配置使用访问点的 IAM policy
Amazon S3 访问点支持 Amazon Identity and Access Management (IAM) 资源策略,这些策略允许您按资源、用户或其他条件控制访问点的使用。要使应用程序或用户能够通过访问点访问对象,访问点和底层存储桶都必须允许请求。
向存储桶添加 S3 访问点不会更改存储桶在通过现有存储桶名称或 ARN 访问时的行为。针对存储桶的所有现有操作将继续像以前一样运行。您在访问点策略中包括的限制仅适用于通过该访问点发出的请求。
访问点策略示例
以下示例演示如何创建 IAM policy 来控制通过访问点发出的请求。
在访问点策略中授予的权限仅在底层存储桶也允许相同的访问时才有效。您可以通过两种方式实现这一点:
-
(推荐)将存储桶的访问控制委派到访问点,如将访问控制委派到访问点中所述。
-
将访问点策略中包含的权限添加到底层存储桶的策略中。第一个访问点策略示例说明了如何修改底层存储桶策略以允许必要的访问。
例 访问点策略授予
以下访问点策略通过账户 Alice
中的访问点 123456789012
向账户 GET
中的 IAM 用户 PUT
授予对具有前缀 Alice/
的 my-access-point
和 123456789012
对象的权限。
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Alice" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/Alice/*" }] }
要使访问点策略有效地向 Alice
授予访问权限,底层存储桶也必须对 Alice
允许相同的访问权限。可以将存储桶的访问控制委派到访问点,如将访问控制委派到访问点中所述。或者,您也可以将以下策略添加到底层存储桶中,以便向 Alice 授予必要的权限。请注意,访问点策略和存储桶策略的 Resource
条目不同。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Alice" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::
awsexamplebucket1
/Alice/*" }] }
例 带标签条件的访问点策略
以下访问点策略通过账户 123456789012
中的访问点 my-access-point
向账户 123456789012
中的 IAM 用户 Bob
授予对 GET
对象的权限,这些权限具有值设为 finance
的标签键 data
。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Principal" : { "AWS": "arn:aws:iam::123456789012:user/Bob" }, "Action":"s3:GetObject", "Resource" : "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/*", "Condition" : { "StringEquals": { "s3:ExistingObjectTag/
data
": "finance
" } } }] }
例 允许查看存储桶列示内容的访问点策略
以下访问点策略通过账户 123456789012
中的访问点 my-access-point
授予账户 123456789012
中的 IAM 用户 Charles
查看底层存储桶中包含的对象的权限。
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Charles" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point" }] }
例 服务控制策略
以下服务控制策略要求使用 VPC 网络起源创建所有新访问点。实施此策略时,组织中的用户无法创建可从 Internet 访问的新访问点。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:CreateAccessPoint", "Resource": "*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } }] }
例 将 S3 操作限制为 VPC 网络起源的存储桶策略
以下存储桶策略限制为只能通过具有 VPC 网络起源的访问点来访问存储桶 examplebucket
的所有 S3 对象操作。
在使用类似此示例的语句之前,请确保您不需要使用访问点不支持的功能,例如跨区域复制。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": [ "s3:AbortMultipartUpload", "s3:BypassGovernanceRetention", "s3:DeleteObject", "s3:DeleteObjectTagging", "s3:DeleteObjectVersion", "s3:DeleteObjectVersionTagging", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectLegalHold", "s3:GetObjectRetention", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionAcl", "s3:PutObjectVersionTagging", "s3:RestoreObject" ], "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } } ] }
条件键
S3 访问点使用条件键,这些键可在 IAM policy 中用来控制对资源的访问。这些条件键是 IAM policy 的一部分,有关完整的策略示例,请参阅访问点策略示例。
- s3:DataAccessPointArn
-
这是一个您可以用来匹配访问点 ARN 的字符串。以下示例匹配区域
us-west-2
中 Amazon Web Services 账户123456789012
的所有访问点:"Condition" : { "StringLike": { "s3:DataAccessPointArn": "arn:aws:s3:us-west-2:123456789012:accesspoint/*" } }
- s3:DataAccessPointAccount
-
这是一个字符串运算符,您可以使用它匹配访问点拥有者的账户 ID。以下示例匹配 Amazon Web Services 账户
123456789012
拥有的所有访问点。"Condition" : { "StringEquals": { "s3:DataAccessPointAccount": "123456789012" } }
- s3:AccessPointNetworkOrigin
-
这是一个字符串运算符,您可以使用它来匹配网络起源(
Internet
或VPC
)。以下示例仅匹配起源为 VPC 的访问点。"Condition" : { "StringEquals": { "s3:AccessPointNetworkOrigin": "VPC" } }
有关将条件键与 Amazon S3 结合使用的更多信息,请参阅 Amazon S3 的操作、资源和条件键。
将访问控制委派到访问点
您可以将存储桶的访问控制委托给存储桶的访问点。以下示例存储桶策略允许对存储桶拥有者账户所拥有的所有访问点进行完全访问。因此,对此存储桶的所有访问都由附加到其访问点的策略控制。我们建议您以这种方式为所有不需要直接访问存储桶的使用案例配置存储桶。
例 将访问控制委派给访问点的存储桶策略
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : "*", "Resource" : [ "
Bucket ARN
", "Bucket ARN
/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID
" } } }] }