View a markdown version of this page

限制对 Amazon S3 多区域接入点源的访问 - Amazon CloudFront

限制对 Amazon S3 多区域接入点源的访问

您可以使用源访问控制(OAC)来限制对 Amazon S3 多区域接入点源的访问。S3 多区域接入点提供了一个全局端点,可根据网络延迟将请求路由至最近的 S3 存储桶。

注意

对于由选择加入区域中的存储桶支持的 MRAP 端点,不支持将 OAC 与 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 存储桶的权限。您可以通过两种方式之一来执行此操作:

重要

您必须将此存储桶策略添加到与多区域接入点关联的每个 S3 存储桶中。如果任何存储桶缺少策略,则路由到该存储桶的 CloudFront 请求将遭拒绝。

选项 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 用户指南》中的多区域接入点策略示例

SSE-KMS

如果底层 S3 存储桶中的对象是通过具有 AWS KMS 的服务器端加密(SSE-KMS)进行加密的,您必须确保 CloudFront 分配具有使用 AWS KMS 密钥的权限。由于 S3 多区域接入点可以将请求路由到多个区域中的存储桶,因此您必须在底层存储桶使用 SSE-KMS 的每个区域的 KMS 密钥策略中添加一条声明。有关如何修改密钥策略的信息,请参阅 AWS 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),可以使用 AWS 管理控制台、CloudFormation、AWS CLI 或 CloudFront API。

注意

Lambda@Edge 源请求触发器与使用 SigV4a OAC 的源不兼容,无论该源是直接访问还是通过源组访问。

Console
创建源访问控制
  1. 登录 AWS 管理控制台,并通过以下网址打开 CloudFront 控制台:https://console.aws.amazon.com/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,然后选择使用 SigV4a 签名协议选项。

  6. 选择创建

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

向分配中的 S3 多区域接入点源添加源访问控制
  1. 通过以下网址打开 CloudFront 控制台:https://console.aws.amazon.com/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": "s3" }'
CloudFormation

OriginAccessControlConfig 中指定以下值:

  • SigningProtocol: sigv4a

  • SigningBehavioralwaysneverno-override

  • OriginAccessControlOriginType: s3

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

签名行为

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