

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

# 允许 Macie 访问 S3 存储桶和对象
<a name="monitoring-restrictive-s3-buckets"></a>

当你为你启用 Amazon Macie 时 AWS 账户，Macie 会创建一个[服务相关角色，该角色](service-linked-roles.md)授予 Macie 代表你调用亚马逊简单存储服务 (Amazon S3) 和其他服务所需的权限。 AWS 服务 服务相关角色简化了设置的过程， AWS 服务 因为您不必手动添加服务权限即可代表您完成操作。要了解这类角色，请参阅《AWS Identity and Access Management 用户指南》**中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

Macie 服务相关角色 (`AWSServiceRoleForAmazonMacie`) 的权限策略允许 Macie 执行操作，包括检索有关您的 S3 存储桶和对象的信息，以及从您的存储桶中检索对象。如果您是组织的 Macie 管理员，则此策略还允许 Macie 代表您组织中的成员账户执行以下作业。

Macie 使用这些权限执行以下作业：
+ 生成并维护 S3 通用存储桶的清单。
+ 提供有关存储桶和存储桶中对象的统计数据和其他数据。
+ 监控和评测存储桶的安全性和访问控制。
+ 分析存储桶中的对象以检测敏感数据。

在大多数情况下，Macie 拥有执行这些作业所需的权限。但是，如果 S3 存储桶具有限制性存储桶策略，则该策略可能会阻止 Macie 执行部分或全部作业。

*存储桶策略*是一种基于资源的 AWS Identity and Access Management (IAM) 策略，它指定委托人（用户、账户、服务或其他实体）可以对 S3 存储桶执行哪些操作，以及委托人可以在哪些条件下执行这些操作。这些操作和条件可能适用于存储桶级别的操作（例如检索有关存储桶的信息）和对象级操作（例如从存储桶中检索对象）。

存储桶策略通常使用显式 `Allow` 或 `Deny` 语句和条件来授予或限制访问权限。例如，存储桶策略可能包含拒绝访问存储桶的`Allow`或`Deny`语句，除非使用特定的源 IP 地址、Amazon Virtual Private Cloud (Amazon VPC) 终端节点或 VPCs 用于访问存储桶。有关使用存储桶策略授予或限制对存储桶的访问权限的信息，请参阅*《Amazon Simple Storage Service 用户指南》*中的 [Amazon S3 的存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)以及 [Amazon S3 如何授权请求](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-s3-evaluates-access-control.html)。

如果存储桶策略使用显式 `Allow` 语句，该策略不会阻止 Macie 检索有关存储桶和存储桶对象的信息，或从存储桶中检索对象。这是因为 Macie 服务相关角色的权限策略中的 `Allow` 语句授予了这些权限。

但是，如果存储桶策略使用带有一个或多个条件的显式 `Deny` 语句，则可能不允许 Macie 检索有关存储桶或存储桶对象的信息，也不允许检索存储桶的对象。例如，如果存储桶策略明确拒绝来自除特定 IP 地址之外的所有来源的访问，则在您运行敏感数据发现作业时，将不允许 Macie 分析存储桶的对象。这是因为限制性存储桶策略优先于 Macie 服务相关角色的权限策略中的 `Allow` 语句。

要允许 Macie 访问具有限制性存储桶策略的 S3 存储桶，您可以在存储桶策略中添加 Macie 服务相关角色的条件 (`AWSServiceRoleForAmazonMacie`)。该条件可以将 Macie 服务相关角色排除在与策略 `Deny` 限制的匹配范围之外。它可以通过使用 `aws:PrincipalArn` [全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)和 Macie 服务相关角色的 Amazon 资源名称（ARN）来完成此操作。

下面的程序将指导您完成这一过程，并提供了一个示例。

**将 Macie 服务相关角色添加到存储桶策略中**

1. 登录 AWS 管理控制台 并打开 Amazon S3 控制台，网址为[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在导航窗格中，选择**存储桶**。

1. 请选择要允许 Macie 访问的 S3 存储桶。

1. 在 **Permissions**（权限）标签页中，在 **Bucket policy**（存储桶策略）下，请选择 **Edit**（编辑）。

1. 在 **存储桶策略**编辑器中，标识限制访问权限并阻止 Macie 访问存储桶或存储桶对象的每条 `Deny` 语句。

1. 在每条 `Deny` 语句中，添加一个使用 `aws:PrincipalArn` 全局条件上下文密钥的条件，并为您的 AWS 账户指定 Macie 服务相关角色的 ARN。

   条件键的值应为`arn:aws:iam::{{123456789012}}:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie`，其中{{123456789012}}是您的账户 ID AWS 账户。

将其添加到存储桶策略的位置取决于该策略当前包含的结构、元素和条件。要了解支持的结构和元素，请参阅*《Amazon Simple Storage Service 用户指南》*中的 [Amazon S3 中的策略和权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html)。

以下是存储桶策略的示例，该策略使用显式 `Deny` 语句来限制对名为 `amzn-s3-demo-bucket` 的 S3 存储桶的访问。根据当前策略，只能从 ID 为 `vpce-1a2b3c4d` 的 VPC 端点访问存储桶。所有其他 VPC 终端节点的访问均被拒绝，包括来自 AWS 管理控制台 和 Macie 的访问。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Policy1415115example",
   "Statement": [
      {
         "Sid": "Access only from specific VPCE",
         "Effect": "Deny",
         "Principal": "*",
         "Action": "s3:*",
         "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket",
            "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ],
         "Condition": {
            "StringNotEquals": {
               "aws:SourceVpce": "vpce-1a2b3c4d"
            }
         }
      }
   ]
}
```

------

要更改此策略并允许 Macie 访问 S3 存储桶和存储桶的对象，我们可以添加一个使用`StringNotLike` [条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)和`aws:PrincipalArn` [全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)的条件。此附加条件将 Macie 服务相关角色排除在与 `Deny` 限制的匹配范围之外。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id":" Policy1415115example ",
   "Statement": [
      {
         "Sid": "Access only from specific VPCE and Macie",
         "Effect": "Deny",
         "Principal": "*",
         "Action": "s3:*",
         "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket",
            "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ],
         "Condition": {
            "StringNotEquals": {
               "aws:SourceVpce": "vpce-1a2b3c4d"
            },
            "StringNotLike": {
               "aws:PrincipalArn": "arn:aws:iam::123456789012:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie"
            }
         }
      }
   ]
}
```

------

在前面的示例中，`StringNotLike` 条件运算符使用 `aws:PrincipalArn` 条件上下文密钥指定 Macie 服务相关角色的 ARN，其中：
+ `123456789012`是允许使用 Mac AWS 账户 ie 检索有关存储桶和存储桶对象的信息以及从存储桶检索对象的账户 ID。
+ `macie.amazonaws.com` 是 Macie 服务主体的标识符。
+ `AWSServiceRoleForAmazonMacie` 是 Macie 服务相关角色的名称。

我们之所以使用 `StringNotLike` 运算符，是因为策略已经使用了 `StringNotEquals` 运算符。一个策略只能使用 `StringNotEquals` 运算符一次。

有关管理 Amazon S3 资源访问权限的其他策略示例和详细信息，请参阅《*亚马逊简单存储服务用户指南》*中的[访问控制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-management.html)。