View a markdown version of this page

限制对 Amazon S3 多区域接入点源的访问 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

限制对 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。

Console
创建源访问控制
  1. 登录 Amazon Web Services 管理控制台,并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/v4/home

  2. 在导航窗格中,选择 Origin access(源访问)。

  3. 选择 Create control setting(创建控制设置)。

  4. Create control setting(创建控制设置)表单上,执行以下操作:

    1. Details(详细信息)窗格中,输入源访问控制的 Name(名称)和(可选)Description(描述)。

    2. Settings(设置)中,建议保留默认设置 [Sign requests (recommended)(签署请求(推荐))]。有关更多信息,请参阅 源访问控制的高级设置

  5. 源类型下拉列表中选择 S3 多区域接入点

  6. 选择创建

    创建 OAC 后,记下 Name(名称)。在以下过程中,您需要此名称。

向分配中的 S3 多区域接入点源添加源访问控制
  1. 通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/v4/home

  2. 选择具有要向其添加 OAC 的 S3 多区域接入点源的分配,然后选择选项卡。

  3. 选择要向其添加 OAC 的 S3 多区域接入点源,然后选择编辑

  4. 源访问部分,选择源访问控制设置(推荐)

  5. 源访问控制下拉菜单中,选择要使用的 OAC。

  6. 选择保存更改

分配开始部署到所有 CloudFront 边缘站点。当边缘站点收到新配置时,它会签署其发送到 S3 多区域接入点源的所有请求。

CLI

使用 create-origin-access-control 命令:

aws cloudfront create-origin-access-control \ --origin-access-control-config '{ "Name": "my-s3-mrap-oac", "Description": "OAC for S3 Multi-Region Access Point", "SigningProtocol": "sigv4a", "SigningBehavior": "always", "OriginAccessControlOriginType": "s3mrap" }'
CloudFormation

OriginAccessControlConfig 中指定以下值:

  • SigningProtocol: sigv4a

  • SigningBehavioralwaysneverno-override

  • OriginAccessControlOriginType: s3mrap

例 Amazon CloudFormation 模板
Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: my-s3-mrap-oac OriginAccessControlOriginType: s3mrap SigningBehavior: always SigningProtocol: sigv4a

签名行为

S3 多区域接入点源的签名行为选项与常规 Amazon S3 存储桶源的签名行为选项相同。有关更多信息,请参阅限制对 Amazon S3 源的访问中的源访问控制的高级设置