別の AWS アカウントの S3 バケットに出力を送信するように AWS Systems Manager の Run Command を設定するにはどうすればよいですか?

所要時間2分
0

AWS Systems Manager の Run Command の出力を別の AWS アカウントの Amazon Simple Storage Service (Amazon S3) バケットに送信したいと考えています。どうすればそれができますか?

解決方法

AWS Systems Manager の Run Command を使用して、マネージドインスタンスで AWS-RunPatchBaselineAWS-RunPowerShellScript などの Systems Manager ドキュメントを実行できます。その後、同じ AWS アカウントの Amazon CloudWatch と Amazon S3、または別の AWS アカウントの S3 バケットに出力を送信できます。

Systems Manager が別の AWS アカウントの S3 バケットにアクセスできるようにするには、次の AWS Identity and Access Management (IAM) とバケットのポリシーを設定します。

IAM インスタンスプロファイルのアクセス許可

インスタンスプロファイルは、起動時に IAM ロール情報を Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに渡すコンテナです。マネージド EC2 インスタンスにアタッチされた IAM ロールには、S3 バケットへのアクセスを許可するための以下のアクションが必要です。DOC-EXAMPLE-BUCKET を、ターゲットアカウントの S3 バケット名に置き換えます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:PutObjectAcl"
      ],
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

特定のシナリオに必要な S3 アクセス許可の詳細については、「 S3 バケットアクセスのカスタムポリシーを作成」を参照してください。

ターゲット S3 バケットポリシー

ターゲット S3 バケットは、マネージ EC2 インスタンスにアタッチされたインスタンスプロファイルロールがバケットにアクセスできるようにする必要があります。バケットポリシーを作成するか、バケットアクセスコントロールリスト (ACL) でソース AWS アカウントへのアクセスを許可することができます。

警告: バケットポリシーを作成するのが、セキュリティのベストプラクティスです。ソース AWS アカウントをバケット ACL に追加すると、ソース AWS アカウント内のすべてのユーザーとロールが S3 バケットにアクセスできるようになります。

以下に、ターゲット S3 バケットのバケットポリシーの例を示します。DOC-EXAMPLE-BUCKET を、ターゲットアカウントの S3 バケット名に置き換えます。SOURCE-AWS-ACCOUNT をソース AWS アカウント ID に置き換えます。INSTANCE-PROFILE-ROLE-NAME を EC2 インスタンスにアタッチされた IAM ロール名に置き換えます。

{
  "Version": "2012-10-17",
  "Id": "Policy1589684413780",
  "Statement": [
    {
      "Sid": "Stmt1589684412557",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::SOURCE-AWS-ACCOUNT:role/INSTANCE-PROFILE-ROLE-NAME"
      },
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

コマンド出力を Amazon S3 に送信するように Run Command を設定

AWS Systems Manager コンソール

1.    Systems Manager コンソールを開いて、ナビゲーションペインから [Run Command] を選択します。

2.    [Run command] を選択します。

3.    実行するドキュメントを選択し、必要なパラメータをすべて入力します。

4.    [出力オプション] で、[S3 バケットを有効にする] を選択します。[テキストボックスで S3 バケット名を入力] を選択し、ターゲットアカウントで S3 バケットの名前を入力します。

5.    (オプション) コマンド出力を S3 バケットのサブフォルダに送信するには、[S3 キープレフィックス] に S3 キープレフィックスを入力します。

AWS CLI

注意: AWS コマンドラインインターフェイス (AWS CLI) のコマンド実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用するようにしてください

AWS CLI で SendCommand API 呼び出しを実行する場合、次のパラメータを追加することで出力オプションを指定できます。

--output-s3-bucket-name "DOC-EXAMPLE-BUCKET" --output-s3-key-prefix "DOC-EXAMPLE-BUCKET-PREFIX"

注意: 前述のパラメータの例では、DOC-EXAMPLE-BUCKET はターゲットアカウント内の S3 バケットの名前です。DOC-EXAMPLE-BUCKET-PREFIX は、レスポンスを保存する S3 バケット内のサブフォルダを示します。コマンド出力を S3 バケットに送信するには、output-s3-key-prefix パラメータは必要ありません。詳細については、 send-command を参照してください。

次の AWS CLI の例では、AWS-RunPowerShellScript ドキュメントを使用して、Key=tag:Env,Values=Dev,Test とタグ付けされたマネージドインスタンスで echo HelloWorld をリモートで実行するコマンドを開始します。コマンドの出力は、ターゲットアカウントの DOC-EXAMPLE-BUCKET という名前の S3 バケットに送信され、名前にプレフィクス DOC-EXAMPLE-BUCKET-PREFIX が付いたサブフォルダに保存されます。

aws ssm send-command --document-name "AWS-RunPowerShellScript" --parameters '{"commands":["echo helloWorld"]}'  --targets '[{"Key":"tag:Env","Values":["Dev","Test"]}]' --output-s3-bucket-name "DOC-EXAMPLE-BUCKET" --output-s3-key-prefix "DOC-EXAMPLE-BUCKET-PREFIX"

関連情報

Systems Manager の IAM インスタンスプロファイルを作成

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ