
こんにちは、SREグループのはぶちん(羽渕)です。
この夏から育てたミニトマト、いちごは順調に育っているのですが、きゅうりが枯れてしまいました😢
プランターの排水性が悪く根腐れしてしまったようです。農業はパラメーターが多くて難しいですね。
今回は小ネタですがサクッとIAMポリシーを作成出来て便利だったのでシェアしたいと思います。
ちなみに人に頼むときにタイトルにあるような言い方をするとシバかれると思うので気をつけてください。
とあるIAMポリシーを作りたくなった
Fargateのタスクが起動出来ない問題に遭遇し以下のトラブルシューティングを実施する際に、IAMポリシーのサンプルが記載されておらず、自前で作る必要が有り整形するのが面倒だなあと思っておりました。
AWSSupport-TroubleshootECSTaskFailedToStart - AWS Systems Manager オートメーション (自動化) ランブックリファレンス
そこで私はひらめきました。Bing AI Chatにまかせて見てはどうだろうかと。
Bing AIちゃんIAMポリシー作っといて
早速、Bing AI Chatに以下のプロンプトを入力してみました。
以下のアクションを許可するAWS IAMポリシーを作成してください cloudtrail:LookupEvents ec2:DeleteNetworkInterface ec2:DescribeInstances ec2:DescribeInstanceAttribute ec2:DescribeIamInstanceProfileAssociations ec2:DescribeSecurityGroups ec2:DescribeNetworkAcls ec2:DescribeNetworkInterfaces ec2:DescribeRouteTables ec2:DescribeSubnets ec2:DescribeVpcEndpoints ec2:DescribeVpcs ecr:DescribeImages ecr:GetRepositoryPolicy ecs:DescribeContainerInstances ecs:DescribeServices ecs:DescribeTaskDefinition ecs:DescribeTasks iam:AttachRolePolicy iam:CreateRole iam:DeleteRole iam:DetachRolePolicy iam:GetInstanceProfile iam:GetRole iam:ListRoles iam:PassRole iam:SimulateCustomPolicy iam:SimulatePrincipalPolicy kms:DescribeKey lambda:CreateFunction lambda:DeleteFunction lambda:GetFunctionConfiguration lambda:InvokeFunction lambda:TagResource logs:DescribeLogGroups logs:PutRetentionPolicy secretsmanager:DescribeSecret ssm:DescribeParameters sts:GetCallerIdentity
返ってきた回答がこちら
AWS IAMポリシーを作成するには、以下のJSONを使用してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudtrail:LookupEvents",
"ec2:DeleteNetworkInterface",
"ec2:DescribeInstances",
"ec2:DescribeInstanceAttribute",
"ec2:DescribeIamInstanceProfileAssociations",
"ec2:DescribeSecurityGroups",
"ec2:DescribeNetworkAcls",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeRouteTables",
"ec2:DescribeSubnets",
"ec2:DescribeVpcEndpoints",
"ec2:DescribeVpcs",
"ecr:DescribeImages",
"ecr:GetRepositoryPolicy",
"ecs:DescribeContainerInstances",
"ecs:DescribeServices",
"ecs:DescribeTaskDefinition",
"ecs:DescribeTasks",
"iam:AttachRolePolicy",
"iam:CreateRole",
"iam:DeleteRole",
"iam:DetachRolePolicy",
"iam:GetInstanceProfile",
"iam:GetRole",
"iam:ListRoles",
"iam:PassRole",
"iam:SimulateCustomPolicy",
"iam:SimulatePrincipalPolicy",
"kms:DescribeKey",
"lambda:CreateFunction",
"lambda:DeleteFunction",
"lambda:GetFunctionConfiguration",
"lambda:InvokeFunction",
"lambda:TagResource",
"logs:DescribeLogGroups",
"logs:PutRetentionPolicy",
"secretsmanager:DescribeSecret",
"ssm:DescribeParameters"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"sts:GetCallerIdentity"
],
"Resource": "*"
}
]
}
それそれー!
"Resource": "*" なのにstsだけ分ける必要も無いような気もしますが、期待通りのIAMポリシーが返ってきました!
感想
今まであんなことやこんなことをして整形していたのが、一瞬で出来てしまいました。
もちろんIAMポリシーの中身は人間が理解している必要はありますし、固有のリソース名などを入力する場合は注意が必要かもしれませんが、簡単な処理をお願いするのには良さそうですね。
シェルスクリプトを作成する時なんかにも、あのコマンドのオプションなんだっけ?をスキップして作成出来たりするのでおすすめです。
使い慣れた方には当たり前かもしれませんが、こういう活用も出来ますよ。と、いうことで書いてみました。
自分はちょっと出遅れ気味ですが、これからも活用できればと思います。
最後まで読んで頂きありがとうございました!ではではー