

# 配置 IAM 策略以使用目录存储桶的接入点
<a name="access-points-directory-buckets-policies"></a>

接入点支持 Amazon Identity and Access Management（IAM）资源策略，这些策略可让您按资源、用户或其它条件控制接入点的使用。要使应用程序或用户可通过接入点访问对象，接入点和底层存储桶策略都必须允许该请求。

**重要**  
当直接通过存储桶的名称访问目录存储桶时，向该存储桶添加接入点不会改变存储桶的行为。针对存储桶的所有现有操作将继续像以前一样运行。您在接入点策略或接入点范围中包括的限制仅适用于通过该接入点发出的请求。

使用 IAM 资源策略时，请确保在保存策略之前，解决来自 Amazon Identity and Access Management Access Analyzer 的安全警告、错误、一般警告和建议。IAM Access Analyzer 将根据 IAM [策略语法](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_grammar.html)和[最佳实践](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html)运行策略检查，以验证您的策略。这些检查项生成调查结果并提供建议，可帮助您编写可操作且符合安全最佳实践的策略。

要了解有关使用 IAM Access Analyzer 验证策略的更多信息，请参阅《IAM 用户指南》**中的 [IAM Access Analyzer 策略验证](https://docs.amazonaws.cn/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。要查看 IAM Access Analyzer 返回的警告、错误和建议的列表，请参阅 [IAM Access Analyzer 策略检查引用](https://docs.amazonaws.cn/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html)。

## 目录存储桶的接入点策略示例
<a name="access-points-directory-buckets-policy-examples"></a>

以下接入点策略演示了如何控制对目录存储桶的请求。接入点策略需要存储桶 ARN 或接入点 ARN。策略中不支持接入点别名。以下是接入点 ARN 的示例：

```
  arn:aws:s3express:region:account-id:accesspoint/myaccesspoint--zoneID--xa-s3
```

您可以在接入点的详细信息中查看接入点 ARN。有关更多信息，请参阅 [查看目录存储桶的接入点的详细信息](access-points-directory-buckets-details.md)。

**注意**  
在接入点策略中授予的权限仅在底层存储桶也允许相同的访问时才有效。您可以通过两种方式实现这一点：  
**（推荐）**将存储桶的访问控制委派给接入点，如[将访问控制委派到接入点](#access-points-directory-buckets-delegating-control)中所述。
将接入点策略中包含的权限添加到底层存储桶的策略中。

**Example 1 – 将接入点限制为 VPC 网络起源的服务控制策略**  
以下服务控制策略要求使用虚拟私有云（VPC）网络起源创建所有新的接入点。实施此策略后，组织中的用户无法创建任何可通过互联网访问的接入点。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Deny",
        "Action": "s3express:CreateAccessPoint",
        "Resource": "*",
        "Condition": {
            "StringNotEquals": {
                "s3express:AccessPointNetworkOrigin": "VPC"
            }
        }
    }
  ]
}
```

**Example 2 – 接入点策略，用于将存储桶访问权限限制为具有 VPC 网络来源的接入点**  
以下接入点策略将对存储桶 *amzn-s3-demo-bucket--zoneID--x-s3* 的所有访问权限限制为具有 VPC 网络来源的接入点内。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenyCreateSessionFromNonVPC",
            "Principal": "*",
            "Action": "s3express:CreateSession",
            "Effect": "Deny",
            "Resource": "arn:aws:s3express:us-east-1:111122223333:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3"
        }
    ]
}
```

## 条件键
<a name="access-points-directory-buckets-condition-keys"></a>

目录存储桶的接入点具有条件键，您可以在 IAM 策略中使用这些键来控制对资源的访问。以下条件键仅代表 IAM 策略的一部分。有关完整策略示例，请参阅[目录存储桶的接入点策略示例](#access-points-directory-buckets-policy-examples)、[将访问控制委派到接入点](#access-points-directory-buckets-delegating-control)和[授予跨账户接入点的权限](#access-points-directory-buckets-cross-account)。

**`s3express:DataAccessPointArn`**  
此示例说明如何按接入点的 Amazon 资源名称（ARN）筛选访问权限，并匹配区域 *region* 中 Amazon Web Services 账户 *111122223333* 的所有接入点：  

```
"Condition" : {
    "StringLike": {
        "s3express:DataAccessPointArn": "arn:aws:s3express:region:111122223333:accesspoint/*"
    }
}
```

**`s3express:DataAccessPointAccount`**  
此示例显示一个字符串运算符，您可以使用它匹配接入点拥有者的账户 ID。以下示例匹配 Amazon Web Services 账户 *`111122223333`* 拥有的所有接入点。  

```
"Condition" : {
    "StringEquals": {
        "s3express:DataAccessPointAccount": "111122223333"
    }
}
```

**`s3express:AccessPointNetworkOrigin`**  
此示例显示一个字符串运算符，您可以使用它来匹配网络起源（`Internet` 或 `VPC`）。以下示例仅匹配起源为 VPC 的接入点。  

```
"Condition" : {
    "StringEquals": {
        "s3express:AccessPointNetworkOrigin": "VPC"
    }
}
```

**`s3express:Permissions`**  
您可以使用 `s3express:Permissions` 来限制对接入点范围中特定 API 操作的访问权限。支持以下 API 操作：  
+ `PutObject`
+ `GetObject`
+ `DeleteObject`
+ `ListBucket`（对于 `ListObjectsV2` 是必需的）
+ `GetObjectAttributes`
+ `AbortMultipartUpload`
+ `ListBucketMultipartUploads`
+ `ListMultipartUploadParts`
使用多值条件键时，我们建议您将 `ForAllValues` 与 `Allow` 语句结合使用，并将 `ForAnyValue` 与 `Deny` 语句结合使用。有关更多信息，请参阅《IAM 用户指南》中的[多值上下文键](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-single-vs-multi-valued-context-keys.html#reference_policies_condition-multi-valued-context-keys)。

有关在 Amazon S3 中使用条件键的更多信息，请参阅《Service Authorization Reference》**中的 [Actions, resources, and condition keys for Amazon S3](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazons3.html)。

有关 S3 资源类型对 S3 API 操作所需权限的更多信息，请参阅 [Amazon S3 API 操作所需的权限](using-with-s3-policy-actions.md)。

## 将访问控制委派到接入点
<a name="access-points-directory-buckets-delegating-control"></a>

您可以将访问控制从存储桶策略委派到接入点策略。以下示例存储桶策略允许对存储桶拥有者账户所拥有的所有接入点进行完全访问。在应用此策略后，对此存储桶的所有访问权限都由接入点策略控制。我们建议您以这种方式为所有不需要直接访问存储桶的使用案例配置存储桶。

**Example 将访问控制委派给接入点的存储桶策略**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement" : [
    {
        "Effect": "Allow",
        "Principal" : { "AWS": "*" },
        "Action" : "*",
        "Resource" : [ "Bucket ARN",
        "Condition": {
            "StringEquals" : { "s3express:DataAccessPointAccount" : "Bucket owner's account ID" }
        }
    }]
}
```

## 授予跨账户接入点的权限
<a name="access-points-directory-buckets-cross-account"></a>

要为另一个账户拥有的存储桶创建接入点，您必须首先通过指定存储桶名称和账户拥有者 ID 来创建接入点。然后，存储桶拥有者必须更新存储桶策略以授权来自接入点的请求。创建接入点与创建 DNS CNAME 类似，因为接入点不提供对存储桶内容的访问权限。所有存储桶访问权限均由存储桶策略控制。以下示例存储桶策略允许从受信任 Amazon Web Services 账户拥有的接入点对存储桶进行 `GET` 和 `LIST` 请求。

将 *Bucket ARN* 替换为桶的 ARN。

**Example ：将权限委派给其它 Amazon Web Services 账户的存储桶策略**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement" : [
    {
        "Sid": "AllowCreateSessionForDirectoryBucket",
        "Effect": "Allow",
        "Principal" : { "AWS": "*" },
        "Action" : "s3express:CreateSession",
        "Resource" : [ "arn:aws:s3express:us-west-2:111122223333:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3" ],
        "Condition": {
            "ForAllValues:StringEquals": {
                "s3express:Permissions": [
                    "GetObject",
                    "ListBucket"
                ]
            }
        }
    }]
}
```