新ポリシー AmazonSSMManagedInstanceCore がサポートされました
こんにちは、中川です。
これまで AWS 管理ポリシーの AmazonEC2RoleforSSM を使用して、SystemsManager で EC2 のオペレーションをできるように許可していました。
しかし、 AmazonEC2RoleforSSM は、許可している権限の範囲が広いので、将来的には AmazonEC2RoleforSSM の使用が非推奨となるアナウンスがありました。
Create an IAM Instance Profile for Systems Manager
原文
This approach of adding multiple required and optional IAM policies to an instance profile replaces the practice of using of a single managed policy, AmazonEC2RoleforSSM. While that policy supported all SSM Agent operations on an instance, the scope of its permissions was too broad for many operational scenarios. AmazonEC2RoleforSSM is no longer recommended and will be deprecated in the future.
Google 翻訳
インスタンスプロファイルに複数の必須およびオプションのIAMポリシーを追加するというこのアプローチは、
単一の管理ポリシーであるAmazonEC2RoleforSSMの使用方法に代わるものです。このポリシーはインスタンス上のすべてのSSM Agent操作をサポートしていましたが、その権限の範囲は多くの運用シナリオにとっては広すぎるものでした。 AmazonEC2RoleforSSMは推奨されなくなり、将来は非推奨になります。
代わりにこれからは、新しいポリシー AmazonSSMManagedInstanceCore をベースに、ゼロからカスタムポリシーを作ることが推奨になるようです。
そこで AmazonEC2RoleforSSM と AmazonSSMManagedInstanceCore を比較して、何が変わったか見ていきたいと思います。
確認してみた
ポリシーの diff 差分をとりました。
$ diff -u AmazonEC2RoleforSSM.json AmazonSSMManagedInstanceCore.json
--- AmazonEC2RoleforSSM.json 2019-06-11 09:05:22.000000000 +0900
+++ AmazonSSMManagedInstanceCore.json 2019-06-11 09:05:12.000000000 +0900
@@ -9,6 +9,7 @@
"ssm:GetDocument",
"ssm:DescribeDocument",
"ssm:GetManifest",
+ "ssm:GetParameter",
"ssm:GetParameters",
"ssm:ListAssociations",
"ssm:ListInstanceAssociations",
@@ -42,53 +43,6 @@
"ec2messages:SendReply"
],
"Resource": "*"
- },
- {
- "Effect": "Allow",
- "Action":[
- "cloudwatch:PutMetricData"
- ],
- "Resource": "*"
- },
- {
- "Effect": "Allow",
- "Action":[
- "ec2:DescribeInstanceStatus"
- ],
- "Resource": "*"
- },
- {
- "Effect": "Allow",
- "Action":[
- "ds:CreateComputer",
- "ds:DescribeDirectories"
- ],
- "Resource": "*"
- },
- {
- "Effect": "Allow",
- "Action":[
- "logs:CreateLogGroup",
- "logs:CreateLogStream",
- "logs:DescribeLogGroups",
- "logs:DescribeLogStreams",
- "logs:PutLogEvents"
- ],
- "Resource": "*"
- },
- {
- "Effect": "Allow",
- "Action":[
- "s3:GetBucketLocation",
- "s3:PutObject",
- "s3:GetObject",
- "s3:GetEncryptionConfiguration",
- "s3:AbortMultipartUpload",
- "s3:ListMultipartUploadParts",
- "s3:ListBucket",
- "s3:ListBucketMultipartUploads"
- ],
- "Resource": "*"
}
]
}
変更箇所は以下のとおりです。
- AmazonSSMManagedInstanceCore に以下のActionが追加
- "ssm:GetParameter"
- AmazonEC2RoleforSSM から以下のActionが削除
- "cloudwatch:PutMetricData"
- "ec2:DescribeInstanceStatus"
- "ds:CreateComputer"
- "ds:DescribeDirectories"
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:DescribeLogGroups"
- "logs:DescribeLogStreams"
- "logs:PutLogEvents"
- "s3:GetBucketLocation"
- "s3:PutObject"
- "s3:GetObject"
- "s3:GetEncryptionConfiguration"
- "s3:AbortMultipartUpload"
- "s3:ListMultipartUploadParts"
- "s3:ListBucket"
- "s3:ListBucketMultipartUploads"
CloudWatch や S3 のポリシーがなくなっていることがわかりました。
AmazonEC2RoleforSSM でこれらのアクションを使用している場合、AmazonSSMManagedInstanceCore
と別に必要なポリシーを割り当てて許可していく必要があります。
さいごに
AmazonEC2RoleforSSM は将来的に非推奨になり、AmazonSSMManagedInstanceCore をベースにカスタムポリシーを作ることが推奨されるようになります。
運用の負荷は増えますが、IAM のベストプラクティスとしてポリシーは最小権限を付与するべきですので、この変更自体はもっともだと思います。
AmazonEC2RoleforSSM が急に使用できなくなることはないでしょうが、これを機会に EC2 のポリシーを見直すと良いのではと思いました。