如何設定 AWS Systems Manager Run Command 以將輸出傳送至另一個 AWS 帳戶中的 S3 儲存貯體?

2 分的閱讀內容
0

我想將 AWS Systems Manager Run Command 輸出傳送至另一個 AWS 帳戶中的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。我該如何操作?

解決方法

您可以使用 AWS Systems Manager Run Command 在受管執行個體中執行 Systems Manager 文件,例如 AWS-RunPatchBaselineAWS-RunPowerShellScript。然後,您可以將輸出傳送至相同 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 儲存貯體。使用目標帳戶中的 S3 儲存貯體名稱取代 DOC-EXAMPLE-BUCKET

{
  "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 儲存貯體的範例儲存貯體政策。使用目標帳戶中的 S3 儲存貯體名稱取代 DOC-EXAMPLE-BUCKET。使用來源 AWS 帳戶 ID 取代 SOURCE-AWS-ACCOUNT。使用連接至 EC2 執行個體的 IAM 角色名稱取代 INSTANCE-PROFILE-ROLE-NAME

{
  "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/*"
    }
  ]
}

設定 Run Command 以將命令輸出傳送至 Amazon S3

AWS Systems Manager 主控台

1.    開啟 Systems Manager 主控台,然後從導覽窗格中選擇 Run Command

2.    選擇 Run command

3.    選取您要執行的文件,然後輸入所有必要的參數。

4.    對於輸出選項,請選取啟用 S3 儲存貯體。選擇在文字方塊中輸入 S3 儲存貯體名稱,然後輸入目標帳戶中 S3 儲存貯體的名稱。

5.    (選用) 若要將命令輸出傳送至 S3 儲存貯體的子資料夾,對於 S3 索引鍵字首,請輸入 S3 索引鍵字首。

AWS CLI

注意: 如果您在執行 AWS Command Line Interface (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 官方已更新 2 年前