

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

# `AWSSupport-ContainIAMPrincipal`
<a name="awssupport-contain-iam-principal"></a>

 **Description** 

如果發生安全事件或疑似入侵 AWS Identity and Access Management (IAM) 使用者/角色或 AWS 身分中心 (IDC) 使用者，快速隔離受影響的身分至關重要，同時保留其組態以進行調查。`AWSSupport-ContainIAMPrincipal` Runbook 提供結構化、可復原的方法，以包含遭入侵的 IAM 或 IDC 身分，有效地封鎖其對 AWS 資源的存取，並防止入侵的潛在傳播。

此自動化程序可在不永久變更身分組態的情況下進行調查，並在認為適當時還原正常存取。遏制程序會維護 IAM 內的使用者或角色，或 IDC 內的使用者，同時有效地將其與所有網路活動隔離。此隔離可防止包含的身分資源與 Amazon Virtual Private Cloud 內的資源通訊，或存取網際網路資源。遏制的設計是可逆的，允許在認為適當時還原正常存取。

 **如何運作？** 

`AWSSupport-ContainIAMPrincipal` Runbook 會為 IAM 使用者、角色和 Identity Center 使用者實作完整的遏制程序。在`Contain`模式下執行時，它會先驗證所有輸入參數，並對指定的 Amazon S3 儲存貯體執行安全檢查。然後，它會收集目標 IAM 主體的詳細資訊，並根據主體類型套用適當的遏制措施。對於 IAM 使用者，它會停用存取金鑰、移除主控台存取，以及連接拒絕政策。對於 IAM 角色，它會附加拒絕政策，以撤銷在遏制之前建立之工作階段的許可。對於 Identity Center 使用者，它會移除許可集、群組成員資格，並套用拒絕政策。在整個過程中， Runbook 會將原始組態備份到 Amazon S3 儲存貯體，以便進行可能的還原。在 `Restore` 模式下執行時，它會嘗試使用備份組態將主體還原至其遏制前狀態。Runbook 包含預覽變更而不套用變更`DryRun`的選項，並提供成功操作和失敗案例的完整報告。

**重要**  
**使用提升權限：**此 SSM 文件會執行需要提升權限的各種操作，例如修改 IAM 和 IDC 身分政策，以及套用隔離組態。這些動作可能會導致權限提升，或影響依賴目標身分的其他工作負載。您應該檢閱授予 `AutomationAssumeRole` 參數所指定角色的許可，並確保這些許可適用於預期的使用案例。如需 IAM 許可的詳細資訊，請參閱下列 AWS 文件：  
[Identity and Access Management (IAM) 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions.html)
[AWS Systems Manager Automation 許可](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-permissions.html)
**工作負載無法使用風險：**此 Systems Manager 文件會執行隔離動作，這可能會導致工作負載無法使用或中斷。在安全事件期間執行時，它會從指定的 IAM 和 IDC 身分撤銷 AWS API 許可，防止他們進行任何 AWS API 呼叫或動作，以限制對受影響資源的存取。這可能會影響依賴這些身分的任何應用程式或服務。
**建立其他資源：**自動化文件可能會根據執行參數，有條件地建立其他資源，例如存放在其中的 Amazon Simple Storage Service (Amazon S3) 儲存貯體和 Amazon S3 物件。這些資源會根據您的 AWS 用量產生額外費用。
**還原風險：**如果*動作*參數設定為 `Restore`，此 SSM 文件會嘗試將 IAM 或 IDC 身分組態還原為其原始狀態。不過，還原程序可能會失敗，使 IAM 或 IDC 身分處於不一致狀態。本文件提供在發生此類失敗時手動還原的說明，但您應該準備好在還原過程中處理潛在問題。
建議您徹底檢閱 Runbook、了解其潛在影響，並在非生產環境中進行測試，然後再在您的生產環境中執行。

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

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

/

 **必要的 IAM 許可** 

`AutomationAssumeRole` 參數需要下列許可，才能成功使用 Runbook：
+ s3:GetBucketLocation
+ s3:GetBucket
+ s3:ListBucket
+ s3：GetBucketPublicAccessBlocks
+ s3：GetAccountPublicAccessBlocks
+ s3:GetBucketPolicyStatus
+ s3:GetBucketAcl
+ s3:GetObject
+ s3:CreateBucket
+ s3:PutObject
+ iam:GetUser
+ iam:GetUserPolicy
+ iam:GetRole
+ iam:ListUserPolicies
+ iam:ListAttachedUserPolicies
+ iam:ListAccessKeys
+ iam：ListMfaDevices
+ iam:ListVirtualMFADevices
+ iam:GetLoginProfile
+ iam:GetPolicy
+ iam:GetRolePolicy
+ iam:ListPolicies
+ iam:ListAttachedRolePolicies
+ iam:ListRolePolicies
+ iam:UpdateAccessKey
+ iam:CreateAccessKey
+ iam:DeleteLoginProfile
+ iam:DeleteAccessKey
+ iam:PutUserPolicy
+ iam:DeleteUserPolicy
+ iam:DeactivateMFADevice
+ iam:AttachRolePolicy
+ iam:AttachUserPolicy
+ iam:DeleteRolePolicy
+ iam：TagMFADevice
+ iam：PutRolePolicy
+ iam：TagPolicy
+ iam：TagRole
+ iam：TagUser
+ iam：UntagUser
+ iam：UntagRole
+ organizations:ListAccounts
+ sso：ListPermissionSetsProvisionedToAccount
+ sso：GetInlinePolicyForPermissionSet
+ sso：ListInstances
+ sso-directory：SearchUsers
+ sso：ListPermissionSets
+ sso：ListAccountAssignments
+ sso-directory：DescribeUser
+ identitystore:ListUsers
+ identitystore:ListGroups
+ identitystore:IsMemberInGroups
+ identitystore:ListGroupMemberships
+ secretsmanager:CreateSecret
+ secretsmanager:DeleteSecret
+ sso：DeleteAccountAssignment
+ sso：PutInlinePolicyToPermissionSet
+ sso：CreateAccountAssignment
+ sso：DeleteInlinePolicyFromPermissionSet
+ sso：TagResource
+ sso：UntagResource
+ identitystore:DeleteGroupMembership
+ identitystore:CreateGroupMembership

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

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3Permissions",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:GetBucketPublicAccessBlock",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketAcl",
                "s3:GetObject",
                "s3:CreateBucket",
                "s3:PutObject"
            ],
            "Resource": "*"
        },
        {
            "Sid": "IAMPermissions",
            "Effect": "Allow",
            "Action": [
                "iam:GetUser",
                "iam:GetUserPolicy",
                "iam:GetRole",
                "iam:ListUserPolicies",
                "iam:ListAttachedUserPolicies",
                "iam:ListAccessKeys",
                "iam:ListMfaDevices",
                "iam:ListVirtualMFADevices",
                "iam:GetLoginProfile",
                "iam:GetPolicy",
                "iam:GetRolePolicy",
                "iam:ListPolicies",
                "iam:ListAttachedRolePolicies",
                "iam:ListRolePolicies",
                "iam:UpdateAccessKey",
                "iam:CreateAccessKey",
                "iam:DeleteLoginProfile",
                "iam:DeleteAccessKey",
                "iam:PutUserPolicy",
                "iam:DeleteUserPolicy",
                "iam:DeactivateMFADevice",
                "iam:AttachRolePolicy",
                "iam:AttachUserPolicy",
                "iam:DeleteRolePolicy",
                "iam:TagMFADevice",
                "iam:PutRolePolicy",
                "iam:TagPolicy",
                "iam:TagRole",
                "iam:TagUser",
                "iam:UntagUser",
                "iam:UntagRole"
            ],
            "Resource": "*"
        },
        {
            "Sid": "OrganizationsPermissions",
            "Effect": "Allow",
            "Action": [
                "organizations:ListAccounts"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SSOPermissions",
            "Effect": "Allow",
            "Action": [
                "sso:ListPermissionSetsProvisionedToAccount",
                "sso:GetInlinePolicyForPermissionSet",
                "sso:ListInstances",
                "sso-directory:SearchUsers",
                "sso:ListPermissionSets",
                "sso:ListAccountAssignments",
                "sso-directory:DescribeUser",
                "sso:DeleteAccountAssignment",
                "sso:PutInlinePolicyToPermissionSet",
                "sso:CreateAccountAssignment",
                "sso:DeleteInlinePolicyFromPermissionSet",
                "sso:TagResource",
                "sso:UntagResource"
            ],
            "Resource": "*"
        },
        {
            "Sid": "IdentityStorePermissions",
            "Effect": "Allow",
            "Action": [
                "identitystore:ListUsers",
                "identitystore:ListGroups",
                "identitystore:IsMemberInGroups",
                "identitystore:ListGroupMemberships",
                "identitystore:DeleteGroupMembership",
                "identitystore:CreateGroupMembership"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SecretsManagerPermissions",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:CreateSecret",
                "secretsmanager:DeleteSecret"
            ],
            "Resource": "*"
        }
    ]
}
```

------

 **指示** 

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

1. 在 AWS Systems Manager 主控台中導覽至 [AWSSupport-ContainIAMPrincipal](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ContainIAMPrincipal/description)。

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

1. 針對輸入參數，輸入下列內容：
   + **AutomationAssumeRole （選用）：**
     + 描述：（選用） Identity AWS and Access Management (IAM) 角色的 Amazon Resource Name (ARN)，允許 Systems Manager Automation 代表您執行動作。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
     + 類型：`AWS::IAM::Role::Arn`
   + **PrincipalType （必要）：**
     + 描述：（必要） AWS IAM 主體類型：IAM 使用者、IAM 角色或 Identity Center 使用者。
     + 類型：字串
     + 允許的值： `IAM user|IAM role|Identity Center user`
   + **PrincipalName （必要）：**
     + 描述：（必要） IAM 主體的名稱。對於 Identity Center 使用者，請提供使用者名稱。
     + 類型：字串
     + 允許模式： `^[a-zA-Z0-9\\.\\-_\\\\!*'()/+=,@]{1,1024}$`
   + **動作 （必要）：**
     + 描述：（必要） 選取 `Contain` 以隔離目標 IAM 主體`Restore`，或嘗試從先前的備份將 IAM 主體還原為其原始組態。
     + 類型：字串
     + 允許的值： `Contain|Restore`
   + **DryRun （選用）：**
     + 描述：（選用） 當設定為 時`true`，自動化不會對目標 IAM 主體進行任何變更，而是輸出其嘗試變更的內容，詳細說明每個步驟。預設值：`true`。
     + 類型：布林值
     + 允許的值： `true|false`
   + **ActivateDisabledKeys （條件式）：**
     + 描述：（條件式） 如果輸入參數動作設為 `Restore`且 PrincipalType 設為 IAM 使用者，此選項會判斷此自動化是否應嘗試在停用時啟用相關聯的存取金鑰。請注意，無法驗證洩露存取金鑰的完整性。 AWS 強烈建議不要重新啟用洩露的金鑰。反之，建議您產生新的金鑰。預設值：`false`。
     + 類型：布林值
     + 允許的值： `true|false`
   + **BackupS3BucketName （條件式）：**
     + 描述：（條件式） 動作設定為 時要備份 IAM 主體組態的 Amazon S3 儲存貯體，`Contain`或動作為 時要從中還原組態`Restore`。請注意，如果指定的動作為 ，`Contain`且 Runbook 無法存取 儲存貯體，或未提供 值，則會在您的帳戶中建立名為 的新儲存貯體`awssupport-containiamprincipal-<random-string>`。如果 DryRun 設定為`true`此參數為必要。
     + 類型：`AWS::S3::Bucket::Name`
   + **BackupS3KeyName （條件式）：**
     + 描述：（條件式） 如果動作設定為 `Restore`，這會指定自動化用來嘗試還原 IAM 主體組態的 Amazon S3 金鑰。Amazon Amazon S3 金鑰通常遵循此格式：`{year}/{month}/{day}/{hour}/{minute}/{automation_execution_id}.json`。金鑰可從先前的遏制自動化執行的輸出取得。
     + 類型：字串
     + 允許模式： `^[a-zA-Z0-9\\.\\-_\\\\!*'()/]{0,1024}$`
   + **BackupS3BucketAccess （條件式）：**
     + 描述：（條件式） 在執行遏制動作後，允許存取備份 Amazon S3 儲存貯體的 IAM 使用者或角色 ARN。動作為 時，需要此參數`Contain`。AutomationAssumeRole，或在沒有 AutomationAssumeRole 的情況下，正在執行其內容的使用者會自動新增至清單中。
     + 類型：StringList
     + 允許模式： `^$|^arn:(aws|aws-cn|aws-us-gov|aws-iso(-[a-z])?):iam::[0-9]{12}:(role|user)\\/[\\w+\\/=,.@-]+$`
   + **TagIdentifier （選用）：**
     + 描述：（選用） 使用下列格式，使用您選擇的標籤來標記 IAM 主體：`Key=<EXAMPLE_KEY>,Value=<EXAMPLE_VALUE>`。此選項可讓您追蹤此 Runbook 鎖定的 IAM 主體。**注意：**標籤鍵和值區分大小寫。
     + 類型：字串
     + 允許模式： `^$|^[Kk][Ee][Yy]=[\\+\\-\\=\\.\\_\\:\\/@a-zA-Z0-9]{1,128},[Vv][Aa][Ll][Uu][Ee]=[\\+\\-\\=\\.\\_\\:\\/@a-zA-Z0-9]{0,128}$`

1. 選取執行。

1. 自動化會啟動。

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

     根據`Action`指定的 驗證所需的自動化輸入參數。
   + **CheckBackupS3BucketName**

     檢查目標 Amazon S3 儲存貯體是否可能授予`read`或`write`公開存取其物件。在遏制工作流程中，如果儲存貯體不存在，則會建立新的 Amazon S3 `BackupS3BucketName`儲存貯體。
   + **BranchOnAction**

     根據指定 的值來配置自動化`Action`。
   + **BranchOnPrincipalTypeAndDryRun**

     根據 IAM 主體的類型 (IAM 使用者、IAM 角色或 Identity Center 使用者），以及它是否在 `DryRun` 模式下執行，來配置自動化。
   + **BranchOnPrincipalTypeForContain**

     為輸入中指定的`Contain`動作型和 IAM 委託人類型 (IAM 使用者、IAM 角色或 Identity Center 使用者） 分支自動化。
   + **GetIAMUser**

     取得目標 IAM 使用者的建立時間和使用者名稱。
   + **GetIAMUserDetails**

     取得和儲存目標 IAM 使用者的組態，包括內嵌政策、受管政策、存取金鑰、MFA 裝置和登入設定檔。
   + **UpdateS3KeyForUser**

     從步驟 的輸出更新自動化 'S3Key' 變數`GetIAMUserDetails`。
   + **GetIAMRole**

     取得目標 IAM 角色的建立時間、角色名稱和路徑。
   + **GetIAMRoleDetails**

     取得和存放目標 IAM 角色的組態，包括內嵌政策和連接到角色的受管政策。
   + **UpdateS3KeyForRole**

     從步驟 的輸出更新自動化 'S3Key' 變數`GetIAMRoleDetails`。
   + **GetIdentityStoreId**

     取得與 AWS 帳戶相關聯的 AWS IAM Identity Center 執行個體 ID。
   + **GetIDCUser**

     使用 Identity Store ID 取得目標 Identity Center 使用者的使用者 ID。
   + **GatherIDCUserDetails**

     取得和儲存目標 Identity Center 使用者的組態，包括帳戶指派、相關聯的許可集和內嵌政策。
   + **UpdateS3KeyForIDCUser**

     從步驟 的輸出更新自動化 'S3Key' 變數`GatherIDCUserDetails`。
   + **BranchOnIdentityContain**

     根據 的值`DryRun`和 `Contain`動作的 IAM 主體類型來配置自動化。
   + **BranchOnDisableAccessKeys**

     根據 IAM 使用者是否具有需要停用的存取金鑰，來配置自動化。
   + **DisableAccessKeys**

     停用作用中的 IAM 使用者存取金鑰。
   + **BranchOnDisableConsoleAccess**

     根據 IAM 使用者是否已啟用 AWS 管理主控台存取的分支。
   + **DisableConsoleAccess**

     移除 IAM 使用者對 AWS 管理主控台的密碼型存取。
   + **AttachInlineDenyPolicyToUser**

     將拒絕政策連接至 IAM 使用者，以撤銷舊工作階段字符的許可。
   + **AttachInlineDenyPolicyToRole**

     將拒絕政策連接至 IAM 角色，以撤銷舊工作階段字符的許可。
   + **RemovePermissionSets**

     移除與 Identity Center 使用者相關聯的許可集。
   + **RemoveIDCUserFromIDCGroups**

     從 Identity Center 群組中移除 Identity Center 使用者。
   + **AttachInlineDenyPolicyToPermissionSet**

     將拒絕政策連接至與 Identity Center 使用者相關聯的許可集。
   + **BranchOnReactivateKeys**

     在還原程序期間，根據 `ActivateDisabledKeys` 參數分支自動化。
   + **DetachInlineDenyPolicy**

     在遏制過程中移除連接到 IAM 角色的拒絕政策。
   + **DetachInlineDenyPolicyFromPermissionSet**

     在遏制程序期間移除附加至許可集的拒絕政策。
   + **ReportContain**

     輸出有關 `DryRun` 設定為 時將執行的遏制動作的詳細資訊`True`。
   + **ReportRestore**

     輸出在 `DryRun` 設定為 時將執行之還原動作的詳細資訊`True`。
   + **ReportContainFailure**

     提供在遏制工作流程失敗案例期間手動還原 IAM 主體原始組態的完整指示。
   + **ReportRestoreFailure**

     提供詳細說明，以在還原工作流程失敗案例期間手動完成 IAM 主體原始組態的還原。

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

     提供有關動作設定為「包含」且 DryRun 設定為 False 時所執行之遏制動作的詳細資訊。包括備份位置、套用的拒絕政策和修改組態的相關資訊。
   + **RestoreIAMPrincipal.Output**

     提供當動作設定為 Restore 且 DryRun 設定為 False 時所執行還原動作的詳細資訊。包括還原組態的相關資訊，以及在還原期間遇到的任何問題。
   + **ReportContain.Output**

     輸出有關當動作設定為「包含」且 DryRun 設定為 True 時將執行之遏制動作的詳細資訊。包括目前和遏制後組態的比較。
   + **ReportRestore.Output**

     輸出當動作設定為 Restore 且 DryRun 設定為 True 時，將執行之還原動作的詳細資訊。顯示目前的組態和要還原的原始組態。
   + **ReportContainFailure.Output**

     提供在遏制工作流程失敗案例期間手動還原 IAM 主體原始組態的完整指示。
   + **ReportRestoreFailure.Output**

     提供詳細說明，以在還原工作流程失敗案例期間手動完成 IAM 主體原始組態的還原。

 **輸出** 

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

  提供有關動作設定為「包含」且 DryRun 設定為 False 時所執行之遏制動作的詳細資訊。包括備份位置、套用的拒絕政策和修改組態的相關資訊。
+ **RestoreIAMPrincipal.Output**

  提供當動作設定為 Restore 且 DryRun 設定為 False 時所執行還原動作的詳細資訊。包括還原組態的相關資訊，以及在還原期間遇到的任何問題。
+ **ReportContain.Output**

  輸出有關當動作設定為「包含」且 DryRun 設定為 True 時將執行之遏制動作的詳細資訊。包括目前和遏制後組態的比較。
+ **ReportRestore.Output**

  輸出當動作設定為 Restore 且 DryRun 設定為 True 時，將執行之還原動作的詳細資訊。顯示目前的組態和要還原的原始組態。
+ **ReportContainFailure.Output**

  提供在遏制工作流程失敗情況下手動還原 IAM 主體原始組態的完整指示。
+ **ReportRestoreFailure.Output**

  提供詳細說明，以在還原工作流程失敗案例期間手動完成 IAM 主體原始組態的還原。

 **參考** 

Systems Manager Automation
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-ContainIAMPrincipal)
+ [執行簡易自動化](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/)