

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

# 使用 Macie 检索敏感数据样本的配置选项
<a name="findings-retrieve-sd-options"></a>

您可以配置并使用 Amazon Macie 来检索和显示 Macie 在单独的调查发现中报告的敏感数据样本。检索和显示某项调查发现的敏感数据样本时，Macie 会使用相应[敏感数据调查发现结果](discovery-results-repository-s3.md)中的数据来从受影响的 Amazon Simple Storage Service（Amazon S3）对象中查找敏感数据。然后，Macie 从受影响的对象中提取这些事件样本。Macie 使用您指定的 AWS Key Management Service (AWS KMS) 密钥对提取的数据进行加密，将加密的数据临时存储在缓存中，然后返回结果中的数据以进行查找。解压缩和加密后不久，Macie 会从缓存中永久删除数据，除非临时需要额外保留以解决操作问题。

Macie 不会使用您账户的 [Macie 服务相关角色](service-linked-roles.md)来查找、检索、加密或显示受影响 S3 对象中的敏感数据样本，而是使用您为账户配置的设置和资源。在 Macie 中配置这些设置时，需要指定访问受影响的 S3 对象的方式。您还可以指定使用哪个 AWS KMS key 来加密样本。除了亚太地区（大阪）和以色列（特拉维夫）区域外，您还可以在目前可用 Macie 的所有地区配置设置。 AWS 区域 

您可以通过两种方法来访问受影响的 S3 对象并从中检索敏感数据样本。您可以将 Macie 配置为使用 AWS Identity and Access Management (IAM) 用户证书或担任 IAM 角色：
+ **使用 IAM 用户凭证**：选择此选项后，您账户中的每个用户都将使用自己的 IAM 身份来查找、检索、加密和显示样本。这意味着，如果允许用户访问必要的资源和数据以及执行必要的操作，用户将可以检索和显示调查发现的敏感数据样本。
+ **代入 IAM 角色**：选择此选项后，您可以创建一个 IAM 角色来将访问权限委派给 Macie。您还需要确保该角色的信任和权限策略满足 Macie 代入该角色的所有要求。然后在您账户中的用户选择查找、检索、加密和显示某个调查发现的敏感数据样本时，Macie 将代入该角色。

这两种配置可以用于任何类型的 Macie 账户，例如组织的委派 Macie 管理员账户、组织中的 Macie 成员账户或独立的 Macie 账户。

以下主题说明了有助于确定如何为账户配置设置和资源的相关选项、要求和注意事项。这包括要附加到 IAM 角色的信任和权限策略。有关可用于检索和显示敏感数据样本的更多建议和策略示例，请参阅 *AWS 安全博客*中的以下博文：[如何使用 Amazon Macie 预览 S3 存储桶中的敏感数据](https://aws.amazon.com/blogs/security/how-to-use-amazon-macie-to-preview-sensitive-data-in-s3-buckets/)。

**Topics**
+ [确定要使用的访问方法](#findings-retrieve-sd-options-s3access)
+ [使用 IAM 用户凭证访问受影响的 S3 对象](#findings-retrieve-sd-options-s3access-user)
+ [代入 IAM 角色来访问受影响的 S3 对象](#findings-retrieve-sd-options-s3access-role)
+ [配置 IAM 角色以访问受影响的 S3 对象](#findings-retrieve-sd-options-s3access-role-configuration)
+ [解密受影响的 S3 对象](#findings-retrieve-sd-options-decrypt)

## 确定要使用的访问方法
<a name="findings-retrieve-sd-options-s3access"></a>

在确定哪种配置最适合您的 AWS 环境时，需要考虑的关键因素是您的环境是否包括作为一个组织进行集中管理的多个 Amazon Macie 账户。如果您是组织的委派 Macie 管理员，则建议将 Macie 配置为代入 IAM 角色，这样可以简化组织中账户从受影响的 S3 对象中检索敏感数据样本的流程。使用这种方法时，您需要在自己的管理员账户中创建一个 IAM 角色。您还需要在每个相关成员账户中创建一个 IAM 角色。管理员账户中的角色将访问权限委派给 Macie。成员账户中的角色会将跨账户存取权限委派给管理员账户中的角色。如果实施了角色链，则可以使用角色链来访问成员账户的受影响的 S3 对象。

此外还要考虑默认情况下谁可以直接访问具体的调查发现。要检索和显示调查发现的敏感数据样本，用户首先要有该调查发现的访问权限：
+ **敏感数据发现作业**：仅创建作业的账户才能访问该作业生成的调查发现。如果您拥有 Macie 管理员账户，则可以配置一个作业来分析组织中任何账户的 S3 存储桶中对象。因此，您的任务可能会生成成员账户所拥有存储桶中的对象的调查发现。如果您有成员账户或独立的 Macie 账户，则可以配置作业以仅分析您的账户所拥有存储桶中的对象。
+ **自动敏感数据发现**：只有 Macie 管理员账户才能访问自动发现功能为组织中的账户生成的调查发现。成员账户无法访问这些调查发现。如果您拥有独立的 Macie 账户，则只能访问自动发现功能为自己的账户生成的调查发现。

如果您计划使用 IAM 角色来访问受影响的 S3 对象，则还要考虑以下几点：
+ 要查找对象中的敏感数据出现频次，必须将调查发现的相应敏感数据发现结果存储在 Macie 使用 HMAC 散列消息认证码 AWS KMS key签名的 S3 对象中。Macie 必须要能够验证敏感数据发现结果的完整性和真实性。否则，Macie 不会代入该 IAM 角色来检索敏感数据样本。这是一项额外的防护机制，可限制对账户的 S3 对象中数据的访问权限。
+ 要从使用客户管理的对象中检索敏感数据样本 AWS KMS key，必须允许 IAM 角色使用密钥解密数据。更具体地说，该密钥的策略必须允许该角色执行 `kms:Decrypt` 操作。对于其他类型的服务器端加密，无需额外的权限或资源即可解密受影响的对象。有关更多信息，请参阅 [解密受影响的 S3 对象](#findings-retrieve-sd-options-decrypt)。
+ 要检索其他账户的对象中的敏感数据样本，您当前必须是该账户在相应 AWS 区域中的委派 Macie 管理员。此外：
  + 当前必须在相应的区域为该成员账户启用 Macie。
  + 成员账户必须有一个 IAM 角色，用来向您的 Macie 管理员账户中的 IAM 角色委派跨账户存取权限。您的 Macie 管理员账户和该成员账户中的角色名称必须相同。
  + 在成员账户中，该 IAM 角色的信任策略必须包含一个正确指定您配置的外部 ID 的条件。此 ID 是一个唯一的字母数字字符串，由 Macie 在您为 Macie 管理员账户配置设置后自动生成。有关使用外部 IDs 信任策略的信息，请参阅《*AWS Identity and Access Management 用户指南》*中的 “[第三方 AWS 账户 拥有的访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)”。
  + 如果成员账户中的 IAM 角色满足 Macie 的所有要求，则该成员账户无需配置和启用 Macie 设置，即可让您从其账户的对象中检索敏感数据样本。Macie 仅使用您的 Macie 管理员账户中的设置和 IAM 角色以及成员账户中的 IAM 角色。
**提示**  
如果您的账户属于某个大型组织，则建议使用 AWS CloudFormation 模板和堆栈集来为组织中的成员账户预置和管理 IAM 角色。有关创建和使用模板及堆栈集的信息，请参阅 [AWS CloudFormation 用户指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。  
要查看并选择下载可以作为起点的 CloudFormation 模板，您可以使用 Amazon Macie 控制台。在控制台的导航窗格中，在**设置**下，选择**显示样本**。选择 **“编辑”**，然后选择 “**查看成员角色权限和 CloudFormation 模板**”。

本节的后续主题介绍了每种配置类型的更多详细信息和注意事项。对于 IAM 角色，这包括要附加到角色的信任和权限策略。如果您不确定哪种配置最适合您的环境，请向 AWS 管理员寻求帮助。

## 使用 IAM 用户凭证访问受影响的 S3 对象
<a name="findings-retrieve-sd-options-s3access-user"></a>

如果您将 Amazon Macie 配置为使用 IAM 用户凭证来检索敏感数据样本，则您的 Macie 账户中的每个用户都将使用自己的 IAM 身份来查找、检索、加密和显示具体调查发现的样本。这意味着，如果允许用户的 IAM 身份访问必要的资源和数据以及执行必要的操作，用户将可以检索和显示调查发现的敏感数据样本。所有必需的操作都 [已登录 AWS CloudTrail](macie-cloudtrail.md)。

要检索和显示特定调查发现的敏感数据样本，必须要允许用户访问下列数据和资源：发现结果、相应的敏感数据发现结果、受影响的 S3 存储桶以及受影响的 S3 对象。如果适用 AWS KMS key ，还必须允许他们使用用于加密受影响对象的，以及您配置 Macie 以用于加密敏感数据样本的。 AWS KMS key 如果任何 IAM policy、资源策略或其他权限设置拒绝提供必要的访问权限，则该用户将无法检索和显示该调查发现的样本。

要设置此类配置，请完成以下常规任务：

1. 确认您已配置了用于存储敏感数据发现结果的存储库。

1. 配置 AWS KMS key 用于加密敏感数据样本。

1. 确认您拥有在 Macie 中配置这些设置的权限。

1. 在 Macie 中配置并启用这些设置。

有关执行这些任务的信息，请参阅 [配置 Macie 以检索敏感数据样本](findings-retrieve-sd-configure.md)。

## 代入 IAM 角色来访问受影响的 S3 对象
<a name="findings-retrieve-sd-options-s3access-role"></a>

要将 Amazon Macie 配置为通过代入 IAM 角色来检索敏感数据样本，首先需要创建一个向 Amazon Macie 委派访问权限的 IAM 角色。需要确保该角色的信任和权限策略满足 Macie 代入该角色的所有要求。当 Macie 账户中的用户随后选择检索和显示某项调查发现的敏感数据样本时，Macie 将代入该角色来检索受影响 S3 对象中的样本。仅当用户选择检索和显示某项调查发现的样本时，Macie 才会代入该角色。为了扮演这个角色，Macie 使用了 AWS Security Token Service (AWS STS) API 的[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)操作。所有必需的操作都[已登录 AWS CloudTrail](macie-cloudtrail.md)。

要检索和显示特定发现的敏感数据样本，必须允许用户访问该调查结果、相应的敏感数据发现结果以及您配置 Macie 以用于加密敏感数据样本的结果。 AWS KMS key 该 IAM 角色必须允许 Macie 访问受影响的 S3 存储桶和受影响的 S3 对象。如果适用，还必须允许 AWS KMS key 该角色使用用于加密受影响对象的。如果任何 IAM policy、资源策略或其他权限设置拒绝提供必要的访问权限，则该用户将无法检索和显示该调查发现的样本。

要设置此类配置，请完成以下常规任务。如果您拥有组织中的成员账户，请联系您的 Macie 管理员以确定是否能够以及如何配置账户的设置和资源。

1. 定义以下内容：
   + 您希望 Macie 代入的 IAM 角色的名称。如果您的账户属于某个组织，则对于该组织的委派 Macie 管理员账户和每个相关成员账户，该名称必须相同。否则，Macie 管理员将无法访问相关成员账户的受影响的 S3 对象。
   + 要附加到该 IAM 角色的 IAM 权限策略的名称。如果您的账户属于某个组织，我们建议您为该组织中的每个相关成员账户使用相同的策略名称。这可以简化成员账户中的角色预置和管理过程。

1. 确认您已配置了用于存储敏感数据发现结果的存储库。

1. 配置 AWS KMS key 用于加密敏感数据样本。

1. 确认您拥有在 Macie 中创建 IAM 角色和配置这些设置的权限。

1. 如果您是组织的委派 Macie 管理员或拥有独立的 Macie 账户：

   1. 为您的账户创建并配置 IAM 角色。需要确保该角色的信任和权限策略满足 Macie 代入该角色的所有要求。有关这些要求的详细信息，请参阅 [下一个主题](#findings-retrieve-sd-options-s3access-role-configuration)。

   1. 在 Macie 中配置并启用这些设置。然后，Macie 会为该配置生成一个外部 ID。如果您是某个组织的 Macie 管理员，请记下此 ID。您必须在每个相关成员账户中为该 IAM 角色的信任策略指定此 ID。

1. 如果您拥有某个组织的成员账户：

   1. 向您的 Macie 管理员索要将在您的账户中为该 IAM 角色的信任策略指定的外部 ID。此外还需要确认该 IAM 角色的名称以及要创建的权限策略。

   1. 为您的账户创建并配置 IAM 角色。需要确保该角色的信任和权限策略满足 Macie 管理员代入该角色的所有要求。有关这些要求的详细信息，请参阅 [下一个主题](#findings-retrieve-sd-options-s3access-role-configuration)。

   1. （可选）如果需要从自己账户中的受影响 S3 对象检索和显示敏感数据样本，请在 Macie 中配置并启用这些设置。如果您希望 Macie 通过代入某个 IAM 角色来检索样本，请首先在您的账户中额外创建和配置一个 IAM 角色。确保此额外角色的信任和权限策略满足 Macie 代入该角色的所有要求。然后在 Macie 中配置这些设置并指定此额外角色的名称。有关该角色的策略要求的详细信息，请参阅 [下一个主题](#findings-retrieve-sd-options-s3access-role-configuration)。

有关执行这些任务的信息，请参阅 [配置 Macie 以检索敏感数据样本](findings-retrieve-sd-configure.md)。

## 配置 IAM 角色以访问受影响的 S3 对象
<a name="findings-retrieve-sd-options-s3access-role-configuration"></a>

要使用 IAM 角色来访问受影响的 S3 对象，首先需要创建并配置一个向 Amazon Macie 委派访问权限的角色。需要确保该角色的信任和权限策略满足 Macie 代入该角色的所有要求。具体操作步骤取决于您拥有的 Macie 账户的类型。

以下部分详细介绍了对于每种类型的 Macie 账户，需要附加到 IAM 角色的信任和权限策略。选择与您所拥有账户的类型对应的部分。

**注意**  
如果您拥有某个组织的成员账户，则可能需要为您的账户创建和配置两个 IAM 角色：  
要允许您的 Macie 管理员从您账户中的受影响 S3 对象检索和显示敏感数据样本，请创建并配置管理员账户可以代入的角色。要了解这些详细信息，请选择 **Macie 成员账户**部分。
要从您自己账户中的受影响 S3 对象检索和显示敏感数据样本，请创建并配置 Macie 可以代入的角色。要了解这些详细信息，请选择**独立 Macie 账户**部分。
在创建和配置任何一个 IAM 角色之前，请首先联系您的 Macie 管理员，以确定您账户的适当配置。

有关使用 IAM 创建角色的详细信息，请参阅《AWS Identity and Access Management 用户指南》中的 [使用自定义信任策略创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)**。

### Macie 管理员账户
<a name="findings-retrieve-sd-options-s3access-role-admin"></a>

如果您是某个组织的委派 Macie 管理员，请首先使用 IAM policy 编辑器为该 IAM 角色创建权限策略。该策略应如下所示：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RetrieveS3Objects",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "AssumeMacieRevealRoleForCrossAccountAccess",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::*:role/IAMRoleName"
        }
    ]
}
```

------

从受影响*IAMRoleName*的 S3 对象中检索组织账户的敏感数据样本时，Macie 要扮演的 IAM 角色的名称在哪里。将该值替换为您正在为您的账户创建，并且计划为组织中相关成员账户创建的角色的名称。对于 Macie 管理员账户与每个相关成员账户，该名称必须相同。

**注意**  
在前面的权限策略中，第一条语句中的`Resource`元素使用通配符 (`*`)。这将允许附加的 IAM 实体从组织拥有的所有 S3 存储桶中检索对象。要仅允许访问特定的存储桶，请将通配符替换为每个存储桶的 Amazon 资源名称（ARN）。例如，要仅允许访问名为 *amzn-s3-demo-bucket1* 的存储桶中的对象，请将该元素更改为：  
`"Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*"`  
您还可以将访问范围限定为个别账户的特定 S3 存储桶中的对象。为此，请在每个适用账户的 IAM 角色的权限策略`Resource`元素中指定存储桶 ARNs 。有关更多信息和示例，请参阅《IAM 用户指南》*AWS Identity and Access Management *中的 [IAM JSON 策略元素：Resource](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)。

为该 IAM 角色创建权限策略后，创建并配置该角色。如果使用 IAM 控制台执行此操作，则对于该角色的**可信实体类型**，请选择**自定义信任策略**。对于为该角色定义可信实体的信任策略，请指定以下内容。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowMacieReveal",
            "Effect": "Allow",
            "Principal": {
                "Service": "reveal-samples.macie.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                }
            }
        }
    ]
}
```

------

您的账户 ID 在*111122223333*哪里 AWS 账户。请将该值替换为您的 12 位账户 ID。

在前面的信任策略中：
+ `Principal` 元素指定了 Macie 在从受影响的 S3 对象 `reveal-samples.macie.amazonaws.com` 检索敏感数据样本时将使用的服务主体。
+ `Action`元素指定允许服务主体执行的操作，即 AWS Security Token Service (AWS STS) API 的[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)操作。
+ 该`Condition`元素定义了一个使用 aws[: SourceAccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件上下文键的条件。该条件决定了可以执行指定操作的账户。在这种情况下，它仅允许 Macie 为指定账户担任该角色。这种情况有助于防止Macie在与 AWS STS之交易期间被用作[困惑不解的副手](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

为 IAM 角色定义信任策略后，请将权限策略附加到该角色。这应是您在开始创建角色之前就已经创建的权限策略。然后在 IAM 中完成剩余的步骤以完成角色的创建和配置。完成后，[在 Macie 中配置并启用设置](findings-retrieve-sd-configure.md)。

### Macie 成员账户
<a name="findings-retrieve-sd-options-s3access-role-member"></a>

如果您拥有 Macie 成员账户，并且希望允许您的 Macie 管理员从账户中的受影响 S3 对象检索和显示敏感数据样本，请首先要求您的 Macie 管理员提供以下信息：
+ 要创建的 IAM 角色的名称。对于您的账户和组织的 Macie 管理员账户，该名称必须相同。
+ 要附加到该角色的 IAM 权限策略的名称。
+ 要在信任策略中为该角色指定的外部 ID。该 ID 必须是 Macie 为您的 Macie 管理员配置生成的外部 ID。

收到这些信息后，使用 IAM policy 编辑器为该角色创建权限策略。该策略应如下所示：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RetrieveS3Objects",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

前述权限策略将允许附加的 IAM 实体从您账户的所有 S3 存储桶中检索对象。这是因为策略中的`Resource`元素使用通配符 (`*`)。要仅允许访问特定的存储桶，请将通配符替换为每个存储桶的 Amazon 资源名称（ARN）。例如，要仅允许访问名为 *amzn-s3-demo-bucket2* 的存储桶中的对象，请将该元素更改为：

`"Resource": "arn:aws:s3:::amzn-s3-demo-bucket2/*"`

有关更多信息和示例，请参阅《IAM 用户指南》*AWS Identity and Access Management *中的 [IAM JSON 策略元素：Resource](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)。

为该 IAM 角色创建权限策略后，请创建该角色。如果使用 IAM 控制台创建该角色，则对于该角色的**可信实体类型**，请选择**自定义信任策略**。对于为该角色定义可信实体的信任策略，请指定以下内容。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowMacieAdminRevealRoleForCrossAccountAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/IAMRoleName"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "externalID",
                    "aws:PrincipalOrgID": "${aws:ResourceOrgID}"
                }
            }
        }
    ]
}
```

------

在前面的策略中，将占位符值替换为适合您 AWS 环境的正确值，其中：
+ *111122223333*是 Macie 管理员账户的 12 位数账户 ID。
+ *IAMRoleName*是您的 Macie 管理员账户中 IAM 角色的名称。这应是 Macie 管理员提供的名称。
+ *externalID*是您从 Macie 管理员那里收到的外部 ID。

通常，信任策略将允许您的 Macie 管理员代入该角色，从而从您账户的受影响 S3 对象中检索和显示敏感数据样本。`Principal` 元素指定了 Macie 管理员账户中的 IAM 角色的 ARN。这是 Macie 管理员用来检索和显示组织账户中的敏感数据样本的角色。`Condition` 块定义了两个条件，这些条件进一步确定了谁可以代入该角色：
+ 第一个条件指定了组织的配置所独有的外部 ID。要了解有关外部的更多信息 IDs，请参阅《*AWS Identity and Access Management 用户指南*[》中的 “第三方 AWS 账户 拥有的访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)”。
+ 第二个条件使用 a [ws: PrincipalOrg ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) 全局条件上下文密钥。键的值是一个动态变量，它表示 AWS Organizations (`${aws:ResourceOrgID}`) 中组织的唯一标识符。该条件将访问范围限定仅允许属于 AWS Organizations中同一组织的账户访问。如果通过在 Macie 中接受邀请加入您的组织，则请从策略中移除此条件。

为 IAM 角色定义信任策略后，请将权限策略附加到该角色。这应是您在开始创建角色之前就已经创建的权限策略。然后在 IAM 中完成剩余的步骤以完成角色的创建和配置。请勿在 Macie 中配置和输入该角色的设置。

### 独立 Macie 账户
<a name="findings-retrieve-sd-options-s3access-role-standalone"></a>

如果您拥有独立的 Macie 账户或 Macie 成员账户，并且想要从自己账户中的受影响 S3 对象中检索和显示的敏感数据样本，请首先使用 IAM policy 编辑器为该 IAM 角色创建权限策略。该策略应如下所示：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RetrieveS3Objects",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

在前面的权限策略中，`Resource`元素使用通配符 (`*`)。这将允许附加的 IAM 实体您账户的所有 S3 存储桶中检索对象。要仅允许访问特定的存储桶，请将通配符替换为每个存储桶的 Amazon 资源名称（ARN）。例如，要仅允许访问名为 *amzn-s3-demo-bucket3* 的存储桶中的对象，请将该元素更改为：

`"Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*"`

有关更多信息和示例，请参阅《IAM 用户指南》*AWS Identity and Access Management *中的 [IAM JSON 策略元素：Resource](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)。

为该 IAM 角色创建权限策略后，请创建该角色。如果使用 IAM 控制台创建该角色，则对于该角色的**可信实体类型**，请选择**自定义信任策略**。对于为该角色定义可信实体的信任策略，请指定以下内容。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowMacieReveal",
            "Effect": "Allow",
            "Principal": {
                "Service": "reveal-samples.macie.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "999999999999"
                }
            }
        }
    ]
}
```

------

您的账户 ID 在*999999999999*哪里 AWS 账户。请将该值替换为您的 12 位账户 ID。

在前面的信任策略中：
+ `Principal` 元素指定了 Macie 在从受影响的 S3 对象 `reveal-samples.macie.amazonaws.com` 检索和显示敏感数据样本时将使用的服务主体。
+ `Action`元素指定允许服务主体执行的操作，即 AWS Security Token Service (AWS STS) API 的[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)操作。
+ 该`Condition`元素定义了一个使用 aws[: SourceAccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件上下文键的条件。该条件决定了可以执行指定操作的账户。它允许 Macie 仅为指定账户担任该角色。这种情况有助于防止Macie在与 AWS STS之交易期间被用作[困惑不解的副手](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

为 IAM 角色定义信任策略后，请将权限策略附加到该角色。这应是您在开始创建角色之前就已经创建的权限策略。然后在 IAM 中完成剩余的步骤以完成角色的创建和配置。完成后，[在 Macie 中配置并启用设置](findings-retrieve-sd-configure.md)。

## 解密受影响的 S3 对象
<a name="findings-retrieve-sd-options-decrypt"></a>

Amazon S3 支持多种 S3 对象的加密选项。对于大多数选项，IAM 用户或角色无需额外的资源或权限即可解密和检索受影响对象中的敏感数据样本。使用 Amazon S3 托管式密钥或 AWS 托管式 AWS KMS key进行服务器端加密的对象就属于这种情况。

但是，如果使用客户管理的 S3 对象进行加密 AWS KMS key，则需要其他权限才能解密和检索该对象中的敏感数据样本。更具体地说，该 KMS 密钥的密钥政策必须允许该 IAM 用户或角色执行 `kms:Decrypt` 操作。否则会出现错误，并且 Amazon Macie 不会从对象中检索任何样本。要了解如何为 IAM 用户提供此访问权限，请参阅*《AWS Key Management Service 开发人员指南》*中的 [KMS key access and permissions](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

如何为 IAM 角色提供此访问权限取决于拥有 IAM 角色的账户是否 AWS KMS key 也拥有该角色：
+ 如果该 KMS 密钥和该角色由同一账户拥有，则该账户的用户必须更新该密钥的策略。
+ 如果该 KMS 密钥由一个账户拥有，而该角色由另一个账户拥有，则拥有密钥的账户的用户必须允许对该密钥进行跨账户存取。

本主题介绍了如何为您创建的 IAM 角色执行这些任务，以检索 S3 对象中的敏感数据样本。此外还提供了这两种场景的示例。有关允许客户访问其他场景下的托管 AWS KMS keys 客户的信息，请参阅*《AWS Key Management Service 开发人员指南》*中的 [KMS 密钥访问和权限](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

### 允许同一个账户访问客户托管密钥
<a name="findings-retrieve-sd-options-decrypt-same-account"></a>

如果同一个账户同时拥有 AWS KMS key 和 IAM 角色，则该账户的用户必须在密钥的策略中添加声明。该附加语句必须允许该 IAM 角色使用该密钥来解密数据。有关更新密钥政策的详细信息，请参阅 *AWS Key Management Service 开发者指南* 中的[更改密钥政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html)。

在以下语句中：
+ `Principal` 元素必须指定该 IAM 角色的 Amazon 资源名称（ARN）。
+ 数 `Action` 数组必须指定 `kms:Decrypt` 操作。这是解密使用密钥加密的对象时必须允许 IAM 角色执行的唯一 AWS KMS 操作。

以下是添加至 KMS 密钥策略的语句示例。

```
{
    "Sid": "Allow the Macie reveal role to use the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/IAMRoleName"
    },
    "Action": [
        "kms:Decrypt"
    ],
    "Resource": "*"
}
```

在上述示例中：
+ `Principal` 元素中的 `AWS` 字段指定了账户的 IAM 角色的 ARN。它允许角色执行策略声明中指定的操作。 *123456789012*是账户 ID 的示例。将此值替换为拥有该角色的账户的账户 ID 和 KMS 密钥。 *IAMRoleName*是一个示例名称。请将该值替换为账户中的 IAM 角色的名称。
+ `Action` 数组指定了允许该 IAM 角色使用该 KMS 密钥执行的操作，即解密使用该密钥加密的加密文字。

将此语句添加到密钥政策的位置，取决于该策略当前包含的结构和元素。当添加语句时，请确保语法有效。JSON 格式的密钥策略。这意味着您还必须在语句前后添加逗号，具体取决于您在策略中添加语句的位置。

### 允许跨账户存取客户托管密钥
<a name="findings-retrieve-sd-options-decrypt-cross-account"></a>

如果一个账户拥有 AWS KMS key （*密钥所有者*），而另一个账户拥有 IAM *角色（角色所有者*），则密钥所有者必须向角色所有者提供对密钥的跨账户访问权限。执行此操作的一种方法是使用授权。*授权*是一种策略分析工具，如果由授权指定的条件得到满足，则允许 AWS 主体将 KMS 密钥用于加密操作中。要了解有关授权的信息，请参阅*AWS Key Management Service 开发者指南*中的[AWS KMS授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。

使用这种方法时，密钥所有者首先要确保该密钥的策略允许角色所有者为该密钥创建授权。然后，角色所有者需要为该密钥创建授权。该授权会将相关权限委派给其账户中的 IAM 角色。这将允许该角色解密使用该密钥加密的 S3 对象。

**第 1 步：更新密钥政策**  
在密钥政策中，密钥所有者应确保策略中包含一条语句，从而允许角色所有者在角色所有者的账户中为 IAM 角色创建授权。在此语句中，`Principal` 元素必须指定角色所有者账户的 ARN。数 `Action` 数组必须指定 `kms:CreateGrant` 操作。`Condition` 块可以筛选对指定操作的访问权限。以下为 KMS 密钥策略语句示例。

```
{
    "Sid": "Allow a role in an account to create a grant",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
    },
    "Action": [
        "kms:CreateGrant"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/IAMRoleName"
        },
        "ForAllValues:StringEquals": {
            "kms:GrantOperations": "Decrypt"
        }
    }
}
```

在上述示例中：
+ `Principal` 元素中的 `AWS` 字段指定了角色所有者账户的 ARN。它允许账户执行政策声明中指定的操作。 *111122223333*是账户 ID 的示例。请将该值替换为角色所有者账户的账户 ID。
+ `Action` 数组指定了允许角色所有者对该 KMS 密钥执行的操作，即为该密钥创建授权。
+ `Condition` 块使用了 [条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) 和以下条件键，用来筛选角色所有者有权对 KMS 密钥执行的操作的访问权限：
  + [kms: GranteePrincipal](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-grantee-principal) — 此条件允许角色所有者仅为指定的被授权者委托人创建授权，即其账户中 IAM 角色的 ARN。在该 ARN 中，*111122223333*有一个示例账户 ID。将此值替换为角色所有者账户的账户 ID。 *IAMRoleName*是一个示例名称。请将该值替换为角色所有者账户中的 IAM 角色的名称。
  + [kms: GrantOperations](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-grant-operations) — 此条件仅允许角色所有者创建授权，以委托执行 AWS KMS `Decrypt`操作（解密使用密钥加密的密文）的权限。这可以防止角色所有者创建委派对 KMS 密钥执行其他操作的权限的授权。该`Decrypt`操作是唯一 AWS KMS 必须允许 IAM 角色执行的操作，才能解密使用密钥加密的对象。

密钥所有者将此语句添加到密钥政策的位置，取决于密钥政策当前包含的结构和元素。当密钥拥有者添加语句时，他们应确保语法有效。JSON 格式的密钥策略。这意味着密钥拥有者还必须在语句前后添加逗号，具体取决于他们在策略中添加语句的位置。有关更新密钥政策的详细信息，请参阅 *AWS Key Management Service 开发者指南* 中的[更改密钥政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html)。

**第 2 步：创建授权**  
在密钥所有者根据需要更新密钥政策后，角色所有者需要为该密钥创建授权。该授权会将相关权限委派给角色所有者账户中的 IAM 角色。角色所有者应首先确认自己是否有权执行 `kms:CreateGrant` 操作，然后才能创建授权。此操作使其能够向现有的客户自主管理型 AWS KMS key添加授权。

要创建授权，角色所有者可以使用 AWS Key Management Service API 的[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)操作。角色所有者创建授权时，应为所需参数指定以下值：
+ `KeyId` – KMS 密钥的 ARN。对于跨账户存取 KMS 密钥，该值必须是 ARN。它不能是密钥 ID。
+ `GranteePrincipal`：其账户中 IAM 角色的 ARN。此值应为`arn:aws:iam::111122223333:role/IAMRoleName`，其中*111122223333*是角色所有者账户的账户 ID，*IAMRoleName*也是角色的名称。
+ `Operations`— AWS KMS 解密操作 () `Decrypt`。这是解密使用 KMS 密钥加密的对象时必须允许 IAM 角色执行的唯一 AWS KMS 操作。

如果角色所有者正在使用 AWS Command Line Interface (AWS CLI)，他们可以运行 [create-grant 命令来创建授权](https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.html)。下面的示例演示如何操作。该示例针对 Microsoft Windows 进行格式化，并使用脱字号 (^) 行继续符来提高可读性。

```
C:\> aws kms create-grant ^
--key-id arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab ^
--grantee-principal arn:aws:iam::111122223333:role/IAMRoleName ^
--operations "Decrypt"
```

其中：
+ `key-id` 指定要应用授权的 KMS 密钥的 ARN。
+ `grantee-principal` 指定了允许执行该授权所指定操作的 IAM 角色的 ARN。该值应与密钥政策中 `kms:GranteePrincipal` 条件指定的 ARN 一致。
+ `operations` 指定了授权允许指定主体执行的操作，即解密使用该密钥加密的加密文字。

如果命令成功运行，则您将收到类似于以下内容的输出：

```
{
    "GrantToken": "<grant token>",
    "GrantId": "1a2b3c4d2f5e69f440bae30eaec9570bb1fb7358824f9ddfa1aa5a0dab1a59b2"
}
```

其中 `GrantToken`，代表已创建授权的唯一、非秘密的、长度可变的 base64 编码字符串，`GrantId` 也是唯一授权标识符。