セッションマネージャでEC2に接続する際に利用するIAMポリシーについて纏めた
記事になります。
■ 背景
私がセッションマネージャを利用するときにインスタンスプロファイルにアタッチしていたIAMロールはAWS管理の「arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore」
でした。
理由ですが、
Amazon EC2 インスタンスが Systems Manager コンソールの [マネージドインスタンス] に表示されない理由のトラブルシューティング
でも紹介されていたので。
ただ、ふと「セッションマネージャの最小権限ってなんだろ?」と思ったところが発端です。
また、AmazonSSMManagedInstanceCore の中のActionをみると意外に広く権限与えているんだなと思ったところも理由です。
■ 2023/3時点でのAmazonSSMManagedInstanceCore
以下のとおりです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:DescribeAssociation",
"ssm:GetDeployablePatchSnapshotForInstance",
"ssm:GetDocument",
"ssm:DescribeDocument",
"ssm:GetManifest",
"ssm:GetParameter",
"ssm:GetParameters",
"ssm:ListAssociations",
"ssm:ListInstanceAssociations",
"ssm:PutInventory",
"ssm:PutComplianceItems",
"ssm:PutConfigurePackageResult",
"ssm:UpdateAssociationStatus",
"ssm:UpdateInstanceAssociationStatus",
"ssm:UpdateInstanceInformation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2messages:AcknowledgeMessage",
"ec2messages:DeleteMessage",
"ec2messages:FailMessage",
"ec2messages:GetEndpoint",
"ec2messages:GetMessages",
"ec2messages:SendReply"
],
"Resource": "*"
}
]
}
■ 本題: 最小権限
Session Manager のカスタム IAM ロールを作成 - AWS Systems Manager
↑のAWS公式サイトそのものです。
AWS公式サイトにも記載されていますが、KMSについては、セッションマネージャの「設定」にて「KMS encryption」が「Enable」を想定しているようであれば必要となります。
下図は「Disabled」の例です。
■ 余談
AmazonSSMManagedInstanceCore の中には例えば、SSMパラメータ値を取得するような「ssm:GetParameter」「ssm:GetParameters」も含まれています。
もし、EC2からSSMパラメータの値は取得させたくないようなときにはAmazonSSMManagedInstanceCoreをそのまま利用することができないため、カスタムIAMポリシーを作成することになるかと思います。
以上です。