

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

# 配置对 Amazon S3 存储桶的访问权限
<a name="s3-bucket-access"></a>

有多个 Amazon Bedrock 功能需要访问存储在 Amazon S3 存储桶中的数据。要访问该数据，您必须配置以下权限：


****  

| 使用案例 | Permissions | 
| --- | --- | 
| 从 S3 存储桶中检索数据的权限 | s3：GetObjects3：ListBucket | 
| 将数据写入 S3 存储桶的权限 | s3：PutObject | 
| 对加密 S3 存储桶的 KMS 密钥进行解密的权限 | kms:Decryptkms: DescribeKey | 

需要将上述权限附加到哪些身份或资源取决于以下因素：
+ Amazon Bedrock 中的多个功能使用了[服务角色](security-iam-sr.md)。如果某功能使用了一个服务角色，您必须配置权限，使该服务角色（而非用户的 IAM 身份）能够访问 S3 数据。如果您使用 AWS 管理控制台，某些 Amazon Bedrock 功能可以自动为您创建服务角色，并将所需的[基于身份的权限](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies.html#policies_id-based)附加到该服务角色。
+ Amazon Bedrock 中的某些功能允许一个身份访问另一个账户中的 S3 存储桶。如果需要从其他账户访问 S3 数据，则存储桶拥有者必须在附加到 S3 存储桶的 [S3 存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)中添加上述[基于资源的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)。

以下内容介绍如何确定访问 S3 数据所必需的权限需要附加到什么位置：
+ IAM 身份权限
  + 如果您可以在控制台中自动创建服务角色，系统将为该服务角色配置权限，因此您无需自行配置。
  + 如果您更喜欢使用自定义服务角色，或者需要访问权限的身份不是服务角色，请参阅[将权限附加到 IAM 身份以允许其访问 Amazon S3 存储桶](#s3-bucket-access-identity)，了解如何创建具有适当权限的基于身份的策略。
+ 基于资源的权限
  + 如果该身份需要访问同一账户中的 S3 数据，则无需将 S3 存储桶策略附加到包含该数据的存储桶。
  + 如果该身份需要访问其他账户中的 S3 数据，请参阅[将存储桶策略附加到 Amazon S3 存储桶以允许其他账户访问它](#s3-bucket-access-cross-account)，了解如何创建具有适当权限的 S3 存储桶策略。
**重要**  
在中自动创建服务角色会为该角色AWS 管理控制台附加适当的基于身份的权限，但是如果需要访问 S3 存储桶策略的身份不同，则仍必须配置 S3 存储桶策略。AWS 账户

有关更多信息，请参阅以下链接：
+ 要详细了解如何控制对 Amazon S3 中数据的访问权限，请参阅 [Amazon S3 中的访问控制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-management.html)。
+ 要了解有关 Amazon S3 权限的更多信息，请参阅 [Amazon S3 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-actions-as-permissions)。
+ 要了解有关AWS KMS权限的更多信息，请参阅[由定义的操作AWS Key Management Service](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html#awskeymanagementservice-actions-as-permissions)。

继续阅读与您的使用案例相关的主题：

**Topics**
+ [将权限附加到 IAM 身份以允许其访问 Amazon S3 存储桶](#s3-bucket-access-identity)
+ [将存储桶策略附加到 Amazon S3 存储桶以允许其他账户访问它](#s3-bucket-access-cross-account)
+ [（高级安全选项）在语句中包含条件以实现更精细的访问](#s3-bucket-access-conditions)

## 将权限附加到 IAM 身份以允许其访问 Amazon S3 存储桶
<a name="s3-bucket-access-identity"></a>

此主题提供了附加到 IAM 身份的策略的模板。该策略包含以下语句，这些语句定义的权限用于向 IAM 身份授予对 S3 存储桶的访问权限：

1. 从 S3 存储桶中检索数据的权限。此语句还包含一个使用 `s3:prefix` [条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys)的条件，用来限制对存储桶中特定文件夹的访问。有关此条件的更多信息，请参阅[示例 2：获取存储桶中具有特定前缀的对象列表](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html#condition-key-bucket-ops-2)中的**用户策略**部分。

1. （如果您需要向 S3 位置写入数据）向 S3 存储桶写入数据的权限。此语句还包括一个使用`aws:ResourceAccount`[条件键](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount)来限制对特定用户发送的请求的访问的条件AWS 账户。

1. （如果使用 KMS 密钥加密了 S3 存储桶）描述和解密加密 S3 存储桶的 KMS 密钥的权限。
**注意**  
如果您的 S3 存储桶启用了版本控制，则您使用此功能上传的每个对象版本可能都具有自己的加密密钥。您负责跟踪哪个加密密钥用于哪个对象版本。

添加、修改和删除以下策略中的语句、资源和条件，并*\$1\$1values\$1*根据需要进行替换：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadS3Bucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::${S3Bucket}",
                "arn:aws:s3:::${S3Bucket}/*"
            ]
        },
        {
            "Sid": "WriteToS3Bucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::${S3Bucket}",
                "arn:aws:s3:::${S3Bucket}/*"
            ]
        },
        {
            "Sid": "DecryptKMSKey",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/${KMSKeyId}"
        }
    ]
}
```

------

根据您的使用案例修改策略后，将其附加到需要访问 S3 存储桶的服务角色（或 IAM 身份）。要了解如何将权限附加到 IAM 策略，请参阅[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

## 将存储桶策略附加到 Amazon S3 存储桶以允许其他账户访问它
<a name="s3-bucket-access-cross-account"></a>

本主题提供了一个模板，该模板对应的基于资源的策略可附加到 S3 存储桶，来允许 IAM 身份访问存储桶中的数据。策略包含以下语句，这些语句定义了该身份访问存储桶的权限：

1. 从 S3 存储桶中检索数据的权限。

1. （如果您需要向 S3 位置写入数据）向 S3 存储桶写入数据的权限。

1. （如果使用 KMS 密钥加密了 S3 存储桶）描述和解密加密 S3 存储桶的 KMS 密钥的权限。
**注意**  
如果您的 S3 存储桶启用了版本控制，则您使用此功能上传的每个对象版本可能都具有自己的加密密钥。您负责跟踪哪个加密密钥用于哪个对象版本。

这些权限与[将权限附加到 IAM 身份以允许其访问 Amazon S3 存储桶](#s3-bucket-access-identity)中所述的基于身份的权限类似。但是，每个语句还要求您在 `Principal` 字段中指定要为其授予资源权限的身份。在 `Principal` 字段中指定身份（对于 Amazon Bedrock 中的大多数功能，这都是服务角色）。添加、修改和删除以下策略中的语句、资源和条件，并*\$1\$1values\$1*根据需要进行替换：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadS3Bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/ServiceRole"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::${S3Bucket}",
                "arn:aws:s3:::${S3Bucket}/*"
            ]
        },
        {
            "Sid": "WriteToS3Bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/ServiceRole"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::${S3Bucket}",
                "arn:aws:s3:::${S3Bucket}/*"
            ]
        },
        {
            "Sid": "DecryptKMSKey",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/ServiceRole"
            },
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/${KMSKeyId}"
        }
    ]
}
```

------

根据您的使用案例修改策略后，将其附加到 S3 存储桶。要了解如何将策略附加到 S3 存储桶，请参阅[使用 Amazon S3 控制台添加存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)。

## （高级安全选项）在语句中包含条件以实现更精细的访问
<a name="s3-bucket-access-conditions"></a>

为了更好地控制可以访问您的资源的身份，您可以在策略语句中包含条件。本主题中的策略提供使用以下条件键的示例：
+ `s3:prefix`：S3 条件键，用于限制对 S3 存储桶中特定文件夹的访问。有关此条件键的更多信息，请参阅[示例 2：获取存储桶中具有特定前缀的对象列表](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html#condition-key-bucket-ops-2)中的**用户策略**部分。
+ `aws:ResourceAccount`— 一个全局条件密钥，用于限制对来自特定AWS 账户用户的请求的访问。

以下策略限制对 S3 存储桶中*my-folder*文件夹的读取权限，并*amzn-s3-demo-bucket*将 S3 存储桶的写入权限限制为来自的请求，ID AWS 账户 为：*amzn-s3-demo-destination-bucket**111122223333*

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadS3Bucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ],
            "Condition" : {
                "StringEquals" : {
                    "s3:prefix": "my-folder" 
                }
            }
        },
        {
            "Sid": "WriteToS3Bucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-destination-bucket",
                "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "111122223333"
                }
            }
        }
    ]
}
```

------

要了解有关条件和条件键的更多信息，请参阅以下链接：
+ 要了解条件，请参阅《IAM 用户指南》中的 [IAM JSON 策略元素：Condition](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ 要了解特定于 S3 的条件键，请参阅《服务授权参考》中的 [Amazon S3 的条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys)。
+ 要了解跨使用的全局条件键AWS 服务，请参阅[AWS全局条件上下文键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount)。