

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `AWSSupport-ContainS3Resource`
<a name="automation-awssupport-contains3resource"></a>

 **Description** 

 `AWSSupport-ContainS3Resource` Runbook 為[支援自動化工作流程 (SAW) Runbook：包含遭入侵的 AWS Amazon S3 儲存貯體](https://repost.aws/articles/ARhGc0hDqKRIKAVCbmF1GmuQ)中所述的程序提供自動化解決方案 

**重要**  
此 Runbook 會執行需要提高權限的各種操作，例如修改 Amazon S3 儲存貯體政策、標籤和公有存取組態。這些動作可能會導致權限提升，或影響依賴目標 Amazon S3 儲存貯體的其他工作負載。您應該檢閱授予 `AutomationAssumeRole` 參數所指定角色的許可，並確保這些許可適用於預期的使用案例。如需 IAM 許可的詳細資訊，請參閱下列 AWS 文件：[https://docs.aws.amazon.com//IAM/latest/UserGuide/access_controlling.html](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_controlling.html)[https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup-iam.html](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup-iam.html)。
此 Runbook 會執行可能導致工作負載無法使用或中斷的變動動作。具體而言， `Contain`動作會封鎖對指定 Amazon S3 儲存貯體的所有存取， `SecureRoles` 參數中指定的角色除外。這可能會影響依賴目標 Amazon S3 儲存貯體的任何應用程式或服務。
在`Contain`動作期間，如果原始儲存貯體的組態尚未存在，此 Runbook 可能會建立額外的 Amazon S3 儲存貯體 （由 `BackupS3BucketName` 參數指定） 來存放其備份。
如果 `Action` 參數設定為 `Restore`，此 Runbook 會嘗試根據存放在儲存貯體中的備份，將 Amazon S3 儲存`BackupS3BucketName`貯體的組態還原為其原始狀態。不過，還原程序可能會失敗，使 Amazon S3 儲存貯體處於不一致狀態。Runbook 提供在發生此類失敗時手動還原的說明，但您應該準備好在還原過程中處理潛在問題。
建議您徹底檢閱 Runbook、了解其潛在影響，並在非生產環境中進行測試，然後再在您的生產環境中執行。

 **如何運作？** 

此 Runbook 的運作方式會根據資源類型和動作而有所不同：
+ 對於 Amazon S3 一般用途儲存貯體 `Containment`：自動化會封鎖對儲存貯體的公開存取、停用 ACL 組態、強制執行儲存貯體擁有者物件擁有權，並將拒絕所有 Amazon S3 動作的限制儲存貯體政策放入儲存貯體，但允許列出的 IAM 角色除外。
+ 對於 Amazon S3 一般用途物件 `Containment`：自動化會封鎖對儲存貯體的公開存取、停用 ACL 組態、強制執行儲存貯體擁有者物件擁有權，並將限制性儲存貯體政策放在物件上拒絕所有 Amazon S3 動作，但允許列出的 IAM 角色除外。
+ 對於 Amazon S3 Directory Bucket `Containment`：自動化會將拒絕所有 Amazon S3 動作的限制儲存貯體政策放入儲存貯體，但允許列出的 IAM 角色除外。
+ 對於 Amazon S3 一般用途儲存貯體 `Restore`：自動化會在遏制之前將封鎖公開存取組態、儲存貯體 ACL 組態、儲存貯體擁有者物件擁有權和儲存貯體政策還原至初始組態。
+ 對於 Amazon S3 一般用途物件 `Restore`：自動化會在遏制之前，將封鎖公開存取組態、儲存貯體 ACL 組態、物件 ACL 組態、儲存貯體擁有者物件擁有權和儲存貯體政策還原至初始組態。
+ 對於 Amazon S3 Directory Bucket `Restore`：自動化會在遏制之前將儲存貯體政策還原至初始組態。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-ContainS3Resource) 

 **文件類型** 

  自動化 

 **擁有者** 

 Amazon 

 **平台** 

 / 

 **所需的 IAM 許可** 

 `AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+ s3:CreateBucket
+ s3:DeleteBucketPolicy
+ s3：DeleteObjectTagging
+ s3:GetAccountPublicAccessBlock
+ s3:GetBucketAcl
+ s3:GetBucketLocation
+ s3:GetBucketOwnershipControls
+ s3:GetBucketPolicy
+ s3:GetBucketPolicyStatus
+ s3：GetBucketTagging
+ s3:GetEncryptionConfiguration
+ s3:GetObject
+ s3：GetObjectAcl
+ s3：GetObjectTagging
+ s3:GetReplicationConfiguration
+ s3:ListBucket
+ s3:PutAccountPublicAccessBlock
+ s3：PutBucketACL
+ s3:PutBucketOwnershipControls
+ s3:PutBucketPolicy
+ s3:PutBucketPublicAccessBlock
+ s3：PutBucketTagging
+ s3:PutBucketVersioning
+ s3:PutObject
+ s3：PutObjectAcl
+ s3express：CreateSession
+ s3express：DeleteBucketPolicy
+ s3express：GetBucketPolicy
+ s3express：PutBucketPolicy
+ ssm:DescribeAutomationExecutions

 以下是授予 必要許可的 IAM 政策範例`AutomationAssumeRole`：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3Permissions",
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:DeleteBucketPolicy",
                "s3:DeleteObjectTagging",
                "s3:GetAccountPublicAccessBlock",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetBucketOwnershipControls",
                "s3:GetBucketPolicy",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketTagging",
                "s3:GetEncryptionConfiguration",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTagging",
                "s3:GetReplicationConfiguration",
                "s3:ListBucket",
                "s3:PutAccountPublicAccessBlock",
                "s3:PutBucketACL",
                "s3:PutBucketOwnershipControls",
                "s3:PutBucketPolicy",
                "s3:PutBucketPublicAccessBlock",
                "s3:PutBucketTagging",
                "s3:PutBucketVersioning",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "*"
        },
        {
            "Sid": "S3ExpressPermissions",
            "Effect": "Allow",
            "Action": [
                "s3express:CreateSession",
                "s3express:DeleteBucketPolicy",
                "s3express:GetBucketPolicy",
                "s3express:PutBucketPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SSMPermissions",
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeAutomationExecutions"
            ],
            "Resource": "*"
        }
    ]
}
```

------

 **指示** 

請依照下列步驟設定自動化：

1. 在文件下的 Systems Manager [https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ContainS3Resource/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ContainS3Resource/description)中導覽至 。

1. 選擇 Execute automation (執行自動化)。

1. 針對輸入參數，輸入下列內容：
   + **BucketName （必要）：**
     + 描述：（必要） Amazon S3 儲存貯體的名稱。
     + 類型：`AWS::S3::Bucket::Name`
   + **動作 （必要）：**
     + 描述：（必要） 選取 `Contain` 以隔離 Amazon S3 資源`Restore`，或嘗試從先前的備份將資源組態還原為其原始狀態。
     + 類型：字串
     + 允許的值： `Contain|Restore`
   + **DryRun （選用）：**
     + 描述：（選用） 當設定為 true 時，自動化不會對目標 Amazon S3 資源進行任何變更，而是輸出嘗試變更的內容。預設值： true。
     + 類型：布林值
     + 允許的值： `true|false`
   + **BucketKeyName （選用）：**
     + 描述：（選用） 您要包含或還原之 Amazon S3 物件的金鑰。在物件層級遏制期間使用。
     + 類型：字串
     + 允許模式： `^[a-zA-Z0-9\\.\\-_\\\\!*'()/]{0,1024}$`
   + **BucketRestrictAccess （條件式）：**
     + 描述：（條件式） 在執行遏制動作後，允許存取目標 Amazon S3 資源的 IAM 使用者或角色 ARN。當 設為 時`Action`，此參數為必要`Contain`。
     + 類型：StringList
     + 允許模式： `^$|^arn:(aws|aws-cn|aws-us-gov|aws-iso(-[a-z])?):iam::[0-9]{12}:(role|user)\\/[\\w+\\/=,.@-]+$`
   + **TagIdentifier （選用）：**
     + 描述：（選用） Key=BatchId，Value=78925 格式的標籤，將在遏制工作流程期間新增至此 Runbook 建立或修改的資源。
     + 類型：字串
     + 允許模式： `^$|^[Kk][Ee][Yy]=[\\+\\-\\=\\.\\_\\:\\/@a-zA-Z0-9]{1,128},[Vv][Aa][Ll][Uu][Ee]=[\\+\\-\\=\\.\\_\\:\\/@a-zA-Z0-9]{0,128}$`
   + **BackupS3BucketName （條件式）：**
     + 描述：（條件式） `Action`將 設定為 時要備份目標資源組態的 Amazon S3 儲存貯體，`Contain`或將 `Action`設定為 時要從 還原組態`Restore`。
     + 類型：`AWS::S3::Bucket::Name`
   + **BackupS3KeyName （條件式）：**
     + 描述：（條件式） 如果 `Action` 設定為 `Restore`，這會指定自動化用來嘗試還原目標資源組態的 Amazon S3 金鑰。
     + 類型：字串
     + 允許模式： `^[a-zA-Z0-9\\.\\-_\\\\!*'()/]{0,1024}$`

     
   + **BackupS3BucketAccess （條件式）：**
     + 描述：（條件式） 在執行遏制動作後，允許存取備份 Amazon S3 儲存貯體的 IAM 使用者或角色 ARN。當 `Action`為 時，此參數為必要`Contain`。
     + 類型：StringList
     + 允許模式： `^$|^arn:(aws|aws-cn|aws-us-gov|aws-iso(-[a-z])?):iam::[0-9]{12}:(role|user)\\/[\\w+\\/=,.@-]+$`
   + **AutomationAssumeRole （選用）：**
     + 描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 IAM 角色的 Amazon Resource Name (ARN)。
     + 類型：`AWS::IAM::Role::Arn`

1. 選取執行。

1. 自動化會啟動。

1. 文件會執行下列步驟：
   + **validateRequiredInputs**

     根據指定的動作驗證所需的自動化輸入參數。
   + **assertBucketExists**

     檢查目標 Amazon S3 儲存貯體是否存在並可存取。
   + **backupBucketPreChecks**

     檢查備份 Amazon S3 儲存貯體是否可能授予對其物件的公開讀取或寫入存取權。
   + **backupTargetBucketMetadata**

     描述目標 Amazon S3 儲存貯體的目前組態，並將備份上傳至指定的備份 Amazon S3 儲存貯體。
   + **containBucket**

     執行儲存貯體層級操作，以包含目標 Amazon S3 儲存貯體。
   + **BranchOnActionAndMode**

     根據輸入參數 Action 和 DryRun 分支自動化。
   + **RestoreInstanceConfiguration**

     從備份還原 Amazon S3 儲存貯體組態。
   + **containFinalOutput**

     以可讀取的格式整合遏制活動。
   + **ReportContain**

     輸出遏制動作的試轉詳細資訊。
   + **ReportRestore**

     輸出還原動作的試轉詳細資訊。
   + **ReportRestoreFailure**

     提供在還原工作流程失敗案例期間還原 Amazon S3 儲存貯體原始組態的說明。
   + **ReportContainmentFailure**

     提供在遏制工作流程失敗情況下還原 Amazon S3 儲存貯體原始組態的說明。
   + **FinalOutput**

     輸出遏制動作的詳細資訊。

1. 執行完成後，請檢閱輸出區段以取得執行的詳細結果：
   + **ContainFinalOutput.Output**

     當 `DryRun` 設定為 False 時，輸出此 Runbook 所執行之遏制動作的詳細資訊。
   + **RestoreFinalOutput.Output**

     當 `DryRun` 設定為 False 時，輸出此 Runbook 所執行還原動作的詳細資訊。
   + **ContainS3ResourceDryRun.Output**

     將 `DryRun` 設定為 True 時，輸出此 Runbook 所執行之遏制動作的詳細資訊。
   + **RestoreS3ResourceDryRun.Output**

     將 `DryRun` 設定為 True 時，輸出此 Runbook 所執行還原動作的詳細資訊。
   + **ReportContainmentFailure.Output**

     提供在遏制工作流程失敗案例期間還原目標 Amazon S3 資源原始組態的指示。
   + **ReportRestoreFailure.Output**

     提供在還原工作流程失敗案例期間還原目標 Amazon S3 資源原始組態的說明。

**參考**

Systems Manager Automation
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ContainS3Resource/description)
+ [執行自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)