配置对 Amazon S3 存储桶的访问权限 - Amazon Bedrock

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

配置对 Amazon S3 存储桶的访问权限

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

使用案例 Permissions
从 S3 存储桶中检索数据的权限 s3:GetObject

s3:ListBucket

将数据写入 S3 存储桶的权限 s3:PutObject
对加密 S3 存储桶的 KMS 密钥进行解密的权限 kms:Decrypt

kms: DescribeKey

需要将上述权限附加到哪些身份或资源取决于以下因素:

  • Amazon Bedrock 中的多个功能使用了服务角色。如果某功能使用了一个服务角色,您必须配置权限,使该服务角色(而非用户的 IAM 身份)能够访问 S3 数据。如果您使用 AWS 管理控制台,某些 Amazon Bedrock 功能可以自动为您创建服务角色,并将所需的基于身份的权限附加到该服务角色。

  • Amazon Bedrock 中的某些功能允许一个身份访问另一个账户中的 S3 存储桶。如果需要从其他账户访问 S3 数据,则存储桶拥有者必须在附加到 S3 存储桶的 S3 存储桶策略中添加上述基于资源的权限

以下内容介绍如何确定访问 S3 数据所必需的权限需要附加到什么位置:

  • IAM 身份权限

    • 如果您可以在控制台中自动创建服务角色,系统将为该服务角色配置权限,因此您无需自行配置。

    • 如果您更喜欢使用自定义服务角色,或者需要访问权限的身份不是服务角色,请参阅将权限附加到 IAM 身份以允许其访问 Amazon S3 存储桶,了解如何创建具有适当权限的基于身份的策略。

  • 基于资源的权限

    • 如果该身份需要访问同一账户中的 S3 数据,则无需将 S3 存储桶策略附加到包含该数据的存储桶。

    • 如果该身份需要访问其他账户中的 S3 数据,请参阅将存储桶策略附加到 Amazon S3 存储桶以允许其他账户访问它,了解如何创建具有适当权限的 S3 存储桶策略。

      重要

      在中自动创建服务角色会为该角色AWS 管理控制台附加适当的基于身份的权限,但是如果需要访问 S3 存储桶策略的身份不同,则仍必须配置 S3 存储桶策略。AWS 账户

有关更多信息,请参阅以下链接:

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

将权限附加到 IAM 身份以允许其访问 Amazon S3 存储桶

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

  1. 从 S3 存储桶中检索数据的权限。此语句还包含一个使用 s3:prefix 条件键的条件,用来限制对存储桶中特定文件夹的访问。有关此条件的更多信息,请参阅示例 2:获取存储桶中具有特定前缀的对象列表中的用户策略部分。

  2. (如果您需要向 S3 位置写入数据)向 S3 存储桶写入数据的权限。此语句还包括一个使用aws:ResourceAccount条件键来限制对特定用户发送的请求的访问的条件AWS 账户。

  3. (如果使用 KMS 密钥加密了 S3 存储桶)描述和解密加密 S3 存储桶的 KMS 密钥的权限。

    注意

    如果您的 S3 存储桶启用了版本控制,则您使用此功能上传的每个对象版本可能都具有自己的加密密钥。您负责跟踪哪个加密密钥用于哪个对象版本。

添加、修改和删除以下策略中的语句、资源和条件,并${values}根据需要进行替换:

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 身份权限

将存储桶策略附加到 Amazon S3 存储桶以允许其他账户访问它

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

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

  2. (如果您需要向 S3 位置写入数据)向 S3 存储桶写入数据的权限。

  3. (如果使用 KMS 密钥加密了 S3 存储桶)描述和解密加密 S3 存储桶的 KMS 密钥的权限。

    注意

    如果您的 S3 存储桶启用了版本控制,则您使用此功能上传的每个对象版本可能都具有自己的加密密钥。您负责跟踪哪个加密密钥用于哪个对象版本。

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

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 控制台添加存储桶策略

(高级安全选项)在语句中包含条件以实现更精细的访问

为了更好地控制可以访问您的资源的身份,您可以在策略语句中包含条件。本主题中的策略提供使用以下条件键的示例:

  • s3:prefix:S3 条件键,用于限制对 S3 存储桶中特定文件夹的访问。有关此条件键的更多信息,请参阅示例 2:获取存储桶中具有特定前缀的对象列表中的用户策略部分。

  • aws:ResourceAccount— 一个全局条件密钥,用于限制对来自特定AWS 账户用户的请求的访问。

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

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" } } } ] }

要了解有关条件和条件键的更多信息,请参阅以下链接: