困っていること
Systems Manager の Run Command を実行しました。
その際に、出力オプションで S3 バケットへログの出力を有効にしました。
コマンドを実行しましたが、S3 バケットにログが存在しておりませんでした。
どのように修正すればいいですか?
どう対応すればいいの?
マネージドノードにアタッチされている IAM ロールの権限が不足していないかをご確認ください。
SSM エージェント動作の前提条件では、AWS 管理ポリシーの AmazonSSMManagedInstanceCore
を EC2 インスタンスにアタッチされてる IAM ロールに付与する必要があります。
{
"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" : "*"
}
]
}
しかし、上記のポリシーは S3 への書き込み権限がありません。
そのため、下記のように S3 への書き込み権限が定義された IAM ポリシーを IAM ロールに付与する必要があります。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PutRunCommandLog",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
}
]
}
※DOC-EXAMPLE-BUCKET
は出力先の S3 バケット名に置き換えてください。
補足
メンテナンスウィンドウからタスクを実行する場合も、出力オプションの設定で S3 バケットへのログ出力が可能です。
この場合も、マネージドノードにアタッチされている IAM ロールに、S3 への書き込み権限が定義された IAM ポリシーを付与してください。
参考資料
AmazonSSMManagedInstanceCore - AWS マネージドポリシー
ステップ 1: Systems Manager にインスタンスのアクセス許可を設定する - AWS Systems Manager
Systems Manager Run Command の出力を別の AWS アカウントの S3 バケットに送信する | AWS re:Post