Systems Manager の Run Command の実行時に S3 にコマンド出力ログが記録されない事象の解消法

マネージドノードにアタッチされている IAM ロールの権限が不足していないかをご確認ください。
2023.08.16

困っていること

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