限制对AWS Elemental MediaStore源的访问
CloudFront 提供源访问控制(OAC),用于限制对 AWS Elemental MediaStore 源的访问。
完成以下主题中描述的步骤,在 CloudFront 中设置新的源访问控制。
在创建和设置源访问控制之前,您必须拥有带有 MediaStore 源的 CloudFront 分配。
在 CloudFront 分配中创建来源访问控制或对其设置之前,请确保 CloudFront 具有访问 MediaStore 源的权限。请在创建 CloudFront 分配后,但在分配配置中将 OAC 添加到 MediaStore 源之前,执行此操作。
使用 MediaStore 容器策略来支持 CloudFront 服务主体 (cloudfront.amazonaws.com
) 访问源。使用策略中的 Condition
元素,仅在请求代表包含 MediaStore 源的 CloudFront 分配时,才允许 CloudFront 访问 MediaStore 容器。这是要向其添加 OAC 的具有 MediaStore 源的分配。
以下是支持 CloudFront 分配访问 MediaStore 源的 MediaStore 容器策略示例。
例 支持启用了 OAC 的 CloudFront 分配进行只读访问的 MediaStore 容器策略
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipalReadOnly",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": [
"mediastore:GetObject"
],
"Resource": "arn:aws:mediastore:us-east-1
:111122223333
:container/<container name>
/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::111122223333
:distribution/CloudFront-distribution-ID
"
},
"Bool": {
"aws:SecureTransport": "true"
}
}
}
]
}
例 支持启用了 OAC 的 CloudFront 分配进行读写访问的 MediaStore 容器策略
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipalReadWrite",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": [
"mediastore:GetObject",
"mediastore:PutObject"
],
"Resource": "arn:aws:mediastore:us-east-1
:111122223333
:container/container-name
/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::111122223333
:distribution/CloudFront-distribution-ID
"
},
"Bool": {
"aws:SecureTransport": "true"
}
}
}
]
}
要允许写访问,您必须在 CloudFront 分配的行为设置中将 Allowed HTTP methods(允许的 HTTP 方法)配置为包含 PUT
。
要创建 OAC,可以使用 AWS Management Console、AWS CloudFormation、AWS CLI 或 CloudFront API。
- Console
-
创建源访问控制
登录 AWS Management Console,并通过以下网址打开 CloudFront 控制台:https://console.aws.amazon.com/cloudfront/v4/home。
-
在导航窗格中,选择 Origin access(源访问)。
-
选择 Create control setting(创建控制设置)。
-
在 Create control setting(创建控制设置)表单上,执行以下操作:
-
在 Details(详细信息)窗格中,输入源访问控制的 Name(名称)和(可选)Description(描述)。
-
在 Settings(设置)中,建议保留默认设置 [Sign requests (recommended)(签署请求(推荐))]。有关更多信息,请参阅 源访问控制的高级设置。
-
从 Origin type(源类型)下拉列表中选择 MediaStore。
-
选择创建。
创建 OAC 后,记下 Name(名称)。在以下过程中,您需要此名称。
向分配中的 MediaStore 源添加源访问控制
通过 https://console.aws.amazon.com/cloudfront/v4/home 打开 CloudFront 控制台
-
选择具有要向其添加 OAC 的 MediaStore 源的分配,然后选择 Origins(源)选项卡。
-
选择要向其添加 OAC 的 MediaStore 源,然后选择 Edit(编辑)。
-
对于源的 Protocol(协议),选择 HTTPS only(仅 HTTPS)。
-
从 Origin access control(源访问控制)下拉菜单中,选择要使用的 OAC。
-
选择保存更改。
分配开始部署到所有 CloudFront 边缘站点。当边缘站点收到新配置时,它会签署其发送到 MediaStore 桶源的所有请求。
- CloudFormation
-
要使用 AWS CloudFormation 创建源访问控制(OAC),请使用 AWS::CloudFront::OriginAccessControl
资源类型。以下示例显示了 YAML 格式的 AWS CloudFormation 模板语法,用于创建源访问控制。
Type: AWS::CloudFront::OriginAccessControl
Properties:
OriginAccessControlConfig:
Description: An optional description for the origin access control
Name: ExampleOAC
OriginAccessControlOriginType: mediastore
SigningBehavior: always
SigningProtocol: sigv4
有关更多信息,请参阅 AWS CloudFormation 用户指南 中的 AWS::CloudFront::OriginAccessControl。
- CLI
-
要使用 AWS Command Line Interface (AWS CLI) 创建源访问控制,请使用 aws cloudfront create-origin-access-control 命令。您可以使用输入文件来提供命令的输入参数,而不是将每个单独的参数指定为命令行输入。
创建源访问控制(带输入文件的 CLI)
-
使用以下命令创建名为 origin-access-control.yaml
的文件。此文件包含 create-origin-access-control 命令的所有输入参数。
aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
-
打开刚创建的 origin-access-control.yaml
文件。编辑文件以添加 OAC 的名称、描述(可选),然后将 SigningBehavior
更改为 always
。然后保存文件。
有关其他 OAC 设置的信息,请参阅源访问控制的高级设置。
-
使用以下命令通过 origin-access-control.yaml
文件中的输入参数创建源访问控制。
aws cloudfront create-origin-access-control --cli-input-yaml file://origin-access-control.yaml
记下命令输出中的 Id
值。您需要使用它将 OAC 添加到 CloudFront 分配中的 MediaStore 源。
将 OAC 附加到现有分配中的 MediaStore 源(带输入文件的 CLI)
-
使用以下命令保存要向其添加 OAC 的 CloudFront 分配的分配配置。该分配必须有 MediaStore 源。
aws cloudfront get-distribution-config --id <CloudFront distribution ID>
--output yaml > dist-config.yaml
-
打开刚创建的名为 dist-config.yaml
的文件。编辑文件,进行以下更改:
-
在 Origins
对象中,将 OAC 的 ID 添加到名为 OriginAccessControlId
的字段中。
-
从名为 OriginAccessIdentity
的字段中移除值(如果存在)。
-
将 ETag
字段重命名为 IfMatch
,但不更改字段的值。
完成后保存该文件。
-
使用以下命令更新分配以使用源访问控制。
aws cloudfront update-distribution --id <CloudFront distribution ID>
--cli-input-yaml file://dist-config.yaml
分配开始部署到所有 CloudFront 边缘站点。当边缘站点收到新配置时,它会签署其发送到 MediaStore 源的所有请求。
- API
-
要使用 CloudFront API 创建源访问控制,请使用 CreateOriginAccessControl。有关您在此 API 调用中指定的字段的更多信息,请参阅 AWS 开发工具包或其他 API 客户端的 API 参考文档。
创建源访问控制后,可以使用下面的任何一个 API 调用将其附加到分配中的 MediaStore 源:
对于这两个 API 调用,请在源内的 OriginAccessControlId
字段中提供源访问控制 ID。有关您在这些 API 调用中指定的其他字段的更多信息,请参阅 所有分配设置参考 以及有关 AWS SDK 或其他 API 客户端的 API 参考文档。
CloudFront 源访问控制特征包括仅适用于特定使用案例的高级设置。除非您特别需要高级设置,否则请使用推荐的设置。
源访问控制包含一个名为 Signing behavior(签名行为)(在控制台中)或 SigningBehavior
(在 API、CLI 和 AWS CloudFormation)的设置。此设置提供以下选项:
- 始终签署源请求(推荐设置)
-
我们建议使用此设置,此设置在控制台中名为签署请求(推荐),在 API、CLI 和 AWS CloudFormation 中名为 always
。使用此设置,CloudFront 将始终签署其发送到 MediaStore 源的所有请求。
- 切勿签署源请求
-
此设置在控制台中名为 Do not sign requests(请勿签署请求),在 API、CLI 和 AWS CloudFormation 中名为 never
。使用此设置关闭所有使用此源访问控制的分配中所有源的源访问控制。与从所有使用源访问控制的源和分配中逐一删除源访问控制相比,这可以节省时间和精力。使用此设置,CloudFront 不会签署其发送到 MediaStore 源的任何请求。
要使用此设置,MediaStore 源必须可供公开访问。如果您将此设置用于不可公开访问的 MediaStore 源,则 CloudFront 无法访问该源。MediaStore 源向 CloudFront 返回错误,而 CloudFront 将这些错误传递给查看器。有关更多信息,请参阅通过 HTTPS 进行公有读取访问的 MediaStore 容器策略示例。
- 不要改写查看器(客户端)
Authorization
标头
-
此设置在控制台中名为 Do not override authorization header(请勿改写授权标头),在 API、CLI 和 AWS CloudFormation 中名为 no-override
。如果您希望 CloudFront 仅在相应的查看器请求不包含 Authorization
标头时签署源请求,请使用此设置。使用此设置,CloudFront 会在查看器请求中存在 Authorization
标头时传递该标头,但在查看器请求不包含 Authorization
标头时对源请求进行签名(添加自己的 Authorization
标头)。
要传递查看器请求的 Authorization
标头,您必须 针对所有使用与此源访问控制关联的 MediaStore 源的缓存行为将 Authorization
标头添加到缓存策略中。