

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

 **描述** 

如果发生安全事件或涉嫌泄露 AWS Identity and Access Management (IAM) 用户/角色或 AWS 身份中心 (IDC) 用户，在保留其配置以供调查的同时，迅速隔离受影响的身份至关重要。该操作`AWSSupport-ContainIAMPrincipal`手册提供了一种结构化、可逆的方法来遏制受损的 IAM 或 IDC 身份，从而有效地阻止他们访问 AWS 资源并防止漏洞的潜在传播。

这种自动化过程允许在不永久更改身份配置的情况下进行调查，从而允许在认为适当时恢复正常访问权限。遏制过程可以维护 IAM 中的用户或角色或 IDC 中的用户，同时有效地将其与所有网络活动隔离开来。这种隔离可防止所包含的身份资源与您的 Amazon Virtual Private Cloud 内的资源通信或访问互联网资源。封闭装置的设计是可逆的，允许在认为适当时恢复正常进入。

 **如何工作？** 

该`AWSSupport-ContainIAMPrincipal`运行手册对 IAM 用户、角色和身份中心用户实施了全面的控制流程。在`Contain`模式下执行时，它会首先验证所有输入参数，然后对指定的 Amazon S3 存储桶执行安全检查。然后，它收集有关目标 IAM 委托人的详细信息，并根据委托人类型应用适当的遏制措施。对于 IAM 用户，它会禁用访问密钥、移除控制台访问权限并附加拒绝策略。对于 IAM 角色，它会附加一个拒绝策略，该策略可撤消在包含之前创建的会话的权限。对于 Identity Center 用户，它会删除权限集、群组成员资格，并应用拒绝策略。在整个过程中，运行手册会将原始配置备份到 Amazon S3 存储桶，以便进行恢复。在`Restore`模式下执行时，它会尝试使用备份的配置将主体恢复到其预先包含的状态。运行手册包括一个无需应用更改即可预览变更的`DryRun`选项，并提供有关成功操作和失败场景的全面报告。

**重要**  
**使用提升权限：**此 SSM 文档执行各种需要提升权限的操作，例如修改 IAM 和 IDC 身份策略以及应用隔离配置。这些操作可能会导致权限升级或影响依赖目标身份的其他工作负载。您应查看向`AutomationAssumeRole`参数指定的角色授予的权限，并确保这些权限适用于预期用例。有关 IAM 权限的更多信息，您可以参考以下 AWS 文档：  
[身份和访问管理 (IAM) Access Management 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions.html)
[AWS Systems Manager 自动化权限](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-permissions.html)
**工作负载不可用风险：本** Systems Manager 文档执行的隔离操作可能会导致工作负载不可用或中断。在安全事件期间执行时，它将通过撤消指定 IAM 和 IDC 身份的 AWS API 权限来限制对受影响资源的访问，阻止他们进行任何 AWS API 调用或操作。这可能会影响依赖这些身份的任何应用程序或服务。
**创建其他资源：**自动化文档可能会有条件地创建其他资源，例如亚马逊简单存储服务 (Amazon S3) 存储桶和存储在其中的 Amazon S3 对象，具体取决于执行参数。这些资源将根据您的 AWS 使用情况产生额外费用。
**恢复风险：**如果*操作*参数设置为`Restore`，则此 SSM 文档会尝试将 IAM 或 IDC 身份配置恢复到其原始状态。但是，恢复过程可能会失败，从而导致 IAM 或 IDC 身份处于不一致的状态。本文档提供了在出现此类故障时手动恢复的说明，但您应该做好在恢复过程中处理潜在问题的准备。
建议在生产环境中执行运行手册之前，请仔细阅读运行手册，了解其潜在影响，并在非生产环境中对其进行测试。

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

**文档类型**

自动化

**所有者**

Amazon

**平台**

/

 **所需的 IAM 权限** 

该`AutomationAssumeRole`参数需要以下权限才能成功使用运行手册：
+ s3：GetBucketLocation
+ s3：GetBucket
+ s3：ListBucket
+ s3：GetBucketPublicAccessBlocks
+ s3：GetAccountPublicAccessBlocks
+ s3：GetBucketPolicyStatus
+ s3：GetBucketAcl
+ s3：GetObject
+ s3：CreateBucket
+ s3：PutObject
+ 我是：GetUser
+ 我是：GetUserPolicy
+ 我是：GetRole
+ 我是：ListUserPolicies
+ 我是：ListAttachedUserPolicies
+ 我是：ListAccessKeys
+ 我是：ListMfaDevices
+ 我是：ListVirtualMFADevices
+ 我是：GetLoginProfile
+ 我是：GetPolicy
+ 我是：GetRolePolicy
+ 我是：ListPolicies
+ 我是：ListAttachedRolePolicies
+ 我是：ListRolePolicies
+ 我是：UpdateAccessKey
+ 我是：CreateAccessKey
+ 我是：DeleteLoginProfile
+ 我是：DeleteAccessKey
+ 我是：PutUserPolicy
+ 我是：DeleteUserPolicy
+ 我是：停用 MFADevice
+ 我是：AttachRolePolicy
+ 我是：AttachUserPolicy
+ 我是：DeleteRolePolicy
+ 我是:Tag MFADevice
+ 我是：PutRolePolicy
+ 我是：TagPolicy
+ 我是：TagRole
+ 我是：TagUser
+ 我是：UntagUser
+ 我是：UntagRole
+ 组织：ListAccounts
+ sso：ListPermissionSetsProvisionedToAccount
+ sso：GetInlinePolicyForPermissionSet
+ sso：ListInstances
+ sso 目录：SearchUsers
+ sso：ListPermissionSets
+ sso：ListAccountAssignments
+ sso 目录：DescribeUser
+ identitystore：ListUsers
+ identitystore：ListGroups
+ identitystore：IsMemberInGroups
+ identitystore：ListGroupMemberships
+ 秘密管理器：CreateSecret
+ 秘密管理器：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. 在 S AWS ystems Manager 控制台[AWSSupport-ContainIAMPrincipal](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ContainIAMPrincipal/description)中导航到。

1. 选择 **Execute automation**（执行自动化）。

1. 对于输入参数，请输入以下内容：
   + **AutomationAssumeRole （可选）：**
     + 描述：（可选） AWS 身份和访问管理 (IAM) Access Management 角色的亚马逊资源名称 (ARN)，允许系统管理员自动化代表您执行操作。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
     + 类型：`AWS::IAM::Role::Arn`
   + **PrincipalType （必填）：**
     + 描述：（必填） AWS IAM 委托人类型：IAM 用户、IAM 角色或身份中心用户。
     + 类型：字符串
     + 允许的值：`IAM user|IAM role|Identity Center user`
   + **PrincipalName （必填）：**
     + 描述：（必填）IAM 委托人的名称。对于身份中心用户，请提供用户名。
     + 类型：字符串
     + 允许的模式：`^[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 （视情况而定）：**
     + 描述：（视情况而定）Amazon Amazon S3 存储桶，用于在操作设置为时备份 IAM 主体配置`Contain`或从操作设置为时恢复配置`Restore`。请注意，如果指定的 Acti `Contain` on 是，而 runbook 无法访问该存储桶或未提供值，则会在您的账户中创建一个名`awssupport-containiamprincipal-<random-string>`为的新存储桶。如果设置 DryRun 为，则需要`true`此参数。
     + 类型：`AWS::S3::Bucket::Name`
   + **BackupS3KeyName （视情况而定）：**
     + 描述：（视情况而定）如果将操作设置为`Restore`，则指定自动化用于尝试恢复 IAM 委托人配置的 Amazon Amazon S3 密钥。亚马逊 Amazon S3 密钥通常遵循以下格式:`{year}/{month}/{day}/{hour}/{minute}/{automation_execution_id}.json`. 密钥可以从之前的控制自动化执行的输出中获得。
     + 类型：字符串
     + 允许的模式：`^[a-zA-Z0-9\\.\\-_\\\\!*'()/]{0,1024}$`
   + **BackupS3BucketAccess（视情况而定）：**
     + 描述：（视情况而定）在运行控制操作后将被允许访问备份 Amazon Amazon S3 存储桶的 IAM 用户或角色的 ARN。当 “操作” 为 “时，此参数是必需的`Contain`。自动将 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>`。此选项允许您跟踪本运行手册所针对的 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 角色或身份中心用户）及其是否在`DryRun`模式下运行来分支自动化。
   + **BranchOnPrincipalTypeForContain**

     分支基于`Contain`操作和输入中指定的 IAM 委托人类型（IAM 用户、IAM 角色或身份中心用户）的自动化。
   + **获取 IAMUser**

     获取目标 IAM 用户的创建时间和用户名。
   + **获取IAMUser详情**

     获取和存储目标 IAM 用户的配置，包括内联策略、托管策略、访问密钥、MFA 设备和登录资料。
   + **最新消息 3 KeyForUser**

     更新步骤输出中的自动化 “S3Key” 变量。`GetIAMUserDetails`
   + **获取 IAMRole**

     获取目标 IAM 角色的创建时间、角色名称和路径。
   + **获取IAMRole详情**

     获取和存储目标 IAM 角色的配置，包括内联策略和附加到该角色的托管策略。
   + **最新消息 3 KeyForRole**

     更新步骤输出中的自动化 “S3Key” 变量。`GetIAMRoleDetails`
   + **GetIdentityStoreId**

     获取与 AWS 账户关联的 AWS IAM 身份中心实例的 ID。
   + **获取 IDCUser**

     使用身份存储 ID 获取目标身份中心用户的用户 ID。
   + **收集IDCUser细节**

     获取和存储目标 Identity Center 用户的配置，包括帐户分配、关联权限集和内联策略。
   + **最新消息 3 KeyFor IDCUser**

     更新步骤输出中的自动化 “S3Key” 变量。`GatherIDCUserDetails`
   + **BranchOnIdentityContain**

     根据`Contain`操作的值`DryRun`和 IAM 委托人类型对自动化进行分支。
   + **BranchOnDisableAccessKeys**

     根据 IAM 用户是否有需要禁用的访问密钥来分支自动化。
   + **DisableAccessKeys**

     禁用有效的 IAM 用户访问密钥。
   + **BranchOnDisableConsoleAccess**

     分支基于 IAM 用户是否启用了 AWS 管理控制台访问权限。
   + **DisableConsoleAccess**

     移除 IAM 用户对 AWS 管理控制台的基于密码的访问权限。
   + **AttachInlineDenyPolicyToUser**

     向 IAM 用户附加拒绝策略，以撤消对旧会话令牌的权限。
   + **AttachInlineDenyPolicyToRole**

     向 IAM 角色附加拒绝策略，以撤消对旧会话令牌的权限。
   + **RemovePermissionSets**

     移除与 Identity Center 用户关联的权限集。
   + **IDCUser从中删除 IDCGroups**

     将身份中心用户从身份中心群组中移除。
   + **AttachInlineDenyPolicyToPermissionSet**

     将拒绝策略附加到与 Identity Center 用户关联的权限集。
   + **BranchOnReactivateKeys**

     在还原过程中，根据`ActivateDisabledKeys`参数对自动化进行分支。
   + **DetachInlineDenyPolicy**

     移除在控制过程中附加到 IAM 角色的拒绝策略。
   + **DetachInlineDenyPolicyFromPermissionSet**

     移除在遏制过程中附加到权限集的拒绝策略。
   + **ReportContain**

     输出有关设置为时将要执行的遏制操作`DryRun`的详细信息。`True`
   + **ReportRestore**

     输出有关设置为时`DryRun`将要执行的恢复操作的详细信息`True`。
   + **ReportContainFailure**

     提供在控制工作流程失败的情况下手动恢复 IAM 委托人的原始配置的全面说明。
   + **ReportRestoreFailure**

     提供在还原工作流程失败的情况下手动完成 IAM 委托人原始配置恢复的详细说明。

1. 执行完成后，请查看 “输出” 部分，了解执行的详细结果：
   + **包含IAMPrincipal。输出**

     提供有关在 “操作” 设置为 “包含” 且 DryRun 设置为 “假” 时执行的遏制操作的详细信息。包括有关备份位置、已应用的拒绝策略和修改的配置的信息。
   + **恢复IAMPrincipal. 输出**

     提供有关在 “操作” 设置为 “还原” 且 DryRun 设置为 False 时所执行的还原操作的详细信息。包括有关已恢复的配置以及恢复过程中遇到的任何问题的信息。
   + **ReportContain。输出**

     输出有关在 “操作” 设置为 “包含” 且 DryRun 设置为 True 时将执行的遏制操作的详细信息。包括当前和封闭后配置的比较。
   + **ReportRestore。输出**

     输出有关在 “操作” 设置为 “恢复” 且 DryRun 设置为 True 时将执行的还原操作的详细信息。显示当前配置和要恢复的原始配置。
   + **ReportContainFailure。输出**

     提供在控制工作流程失败的情况下手动恢复 IAM 委托人的原始配置的全面说明。
   + **ReportRestoreFailure。输出**

     提供在还原工作流程失败的情况下手动完成 IAM 委托人原始配置恢复的详细说明。

 **输出** 

执行完成后，请查看 “输出” 部分以了解详细结果：
+ **包含IAMPrincipal。输出**

  提供有关在 “操作” 设置为 “包含” 且 DryRun 设置为 “假” 时执行的遏制操作的详细信息。包括有关备份位置、已应用的拒绝策略和修改的配置的信息。
+ **恢复IAMPrincipal. 输出**

  提供有关在 “操作” 设置为 “还原” 且 DryRun 设置为 False 时所执行的还原操作的详细信息。包括有关已恢复的配置以及恢复过程中遇到的任何问题的信息。
+ **ReportContain。输出**

  输出有关在 “操作” 设置为 “包含” 且 DryRun 设置为 True 时将执行的遏制操作的详细信息。包括当前和封闭后配置的比较。
+ **ReportRestore。输出**

  输出有关在 “操作” 设置为 “恢复” 且 DryRun 设置为 True 时将执行的还原操作的详细信息。显示当前配置和要恢复的原始配置。
+ **ReportContainFailure。输出**

  提供在控制工作流程失败的情况下手动恢复 IAM 委托人的原始配置的全面说明。
+ **ReportRestoreFailure。输出**

  提供在还原工作流程失败的情况下手动完成 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)
+ [Support 自动化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)