限制对 Amazon S3 多区域接入点源的访问
您可以使用源访问控制(OAC)来限制对 Amazon S3 多区域接入点源的访问。S3 多区域接入点提供了一个全局端点,可根据网络延迟将请求路由至最近的 S3 存储桶。
有关将 OAC 与标准 Amazon S3 存储桶源结合使用的信息,请参阅限制对 Amazon S3 源的访问。
先决条件
在创建和设置 OAC 之前,您必须拥有带有 Amazon S3 多区域接入点源的 CloudFront 分配。源域名必须使用 S3 多区域接入点主机名格式:
multi-region-access-point-alias.accesspoint.s3-global.amazonaws.com
有关创建 S3 多区域接入点的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的创建多区域接入点。
向 CloudFront 授予访问 S3 多区域接入点的权限
更新多区域接入点策略,以支持 CloudFront 服务主体 (cloudfront.amazonaws.com) 访问多区域接入点。在策略中使用 Condition 元素,仅在请求代表包含源的 CloudFront 分配时,才支持 CloudFront 访问多区域接入点。
有关添加或修改多区域接入点策略的信息,请参阅《Amazon Simple Storage Service 用户指南》中的多区域接入点策略示例。
例适用于 CloudFront OAC 的多区域接入点策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontOACAccess", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3::111122223333:accesspoint/Multi-Region-Access-Point-Alias.mrap/object/*", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront distribution ID" } } } ] }
向 CloudFront 授予访问底层 S3 存储桶的权限
除了多区域接入点策略外,还必须向 CloudFront 授予访问与多区域接入点关联的每个底层 S3 存储桶的权限。您可以通过两种方式之一来执行此操作:
选项 1:仅向 CloudFront 授予访问权限
向每个 S3 存储桶添加一个存储桶策略,以支持 CloudFront 服务主体访问该存储桶。如果您还需要支持从其它来源直接访问存储桶,请使用此选项。
例底层存储桶的 S3 存储桶策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontOACAccessViaMRAP", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-us-east-1/*", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront distribution ID" } } } ] }
选项 2:将完全存储桶访问权限委托给多区域接入点
向多区域接入点授予对每个底层存储桶的完全访问权限。通过这种方法,对存储桶的所有访问权限都由多区域接入点策略控制,这可简化访问权限管理。对于不需要直接访问存储桶的使用案例,我们建议使用此选项。
例将访问权限委托给多区域接入点的 S3 存储桶策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateAccessToMRAP", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket-us-east-1", "arn:aws:s3:::amzn-s3-demo-bucket-us-east-1/*" ], "Condition": { "StringEquals": { "s3:DataAccessPointArn": "arn:aws:s3::111122223333:accesspoint/Multi-Region-Access-Point-Alias.mrap" } } } ] }
有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的多区域接入点策略示例。
重要
您必须将此存储桶策略添加到与多区域接入点关联的每个 S3 存储桶中。如果任何存储桶缺少策略,则路由到该存储桶的 CloudFront 请求将遭拒绝。
SSE-KMS
如果底层 S3 存储桶中的对象是通过具有 Amazon KMS 的服务器端加密(SSE-KMS)进行加密的,您必须确保 CloudFront 分配具有使用 Amazon KMS 密钥的权限。由于 S3 多区域接入点可以将请求路由到多个区域中的存储桶,因此您必须在底层存储桶使用 SSE-KMS 的每个区域的 KMS 密钥策略中添加一条声明。有关如何修改密钥策略的信息,请参阅 Amazon Key Management Service 开发人员指南 中的更改密钥策略。
例 KMS 密钥政策语句:
以下示例显示了一条 KMS 密钥策略声明,该声明支持具有 OAC 的 CloudFront 分配访问 KMS 密钥来实施 SSE-KMS。
{ "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront distribution ID" } } }
重要
在底层 S3 存储桶使用 SSE-KMS 加密的每个区域中,您都必须将此密钥策略声明添加到 KMS 密钥中。
创建源访问控制
要创建源访问控制(OAC),可以使用 Amazon Web Services 管理控制台、Amazon CloudFormation、Amazon CLI 或 CloudFront API。
签名行为
S3 多区域接入点源的签名行为选项与常规 Amazon S3 存储桶源的签名行为选项相同。有关更多信息,请参阅限制对 Amazon S3 源的访问中的源访问控制的高级设置。