本页介绍了如何使用 Amazon Simple Storage Service (Amazon S3) 和 AWS 签名版本 4 将 Media CDN 连接到与 Amazon S3 兼容的私有存储分区。媒体 CDN 不支持 AWS Signature Version 4a。
媒体 CDN 支持使用 AWS 签名版本 4 对源站请求进行身份验证。您可以使用此功能将媒体 CDN 连接到与 Amazon S3 兼容的私有存储分区,以确保您的内容仅与媒体 CDN 共享。您还可以启用客户端身份验证,以增强纵深防御能力。如需了解详情,请参阅使用已签名请求。
准备工作
确认您拥有以下资源:
遵循命名规则的私有 Amazon S3 存储桶。
用于访问上述私有 Amazon S3 存储桶的专用 AWS IAM 用户账号。确保存储桶向 AWS IAM 用户账号授予
s3:getObject
权限。如需详细了解如何配置对 Amazon S3 存储桶的访问权限,请参阅 Amazon S3 中的身份和访问权限管理。专用 AWS IAM 用户账号的 AWS 访问密钥 ID 和 AWS 密钥。如需了解详情,请参阅管理 IAM 用户的访问密钥。
如果您之前从未使用过 Secret Manager,请先配置 Secret Manager。
为媒体 CDN 创建服务代理
如需为媒体 CDN 创建服务代理,请使用 gcloud beta services identity create
命令。
gcloud
gcloud beta services identity create \ --project PROJECT_ID \ --service=networkservices.googleapis.com
将 PROJECT_ID
替换为您的项目 ID。
如需了解详情,请参阅触发服务代理创建。
在 Secret Manager 中存储访问密钥
请按照以下步骤在 Secret Manager 中创建 Secret。
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
在 Secret Manager 页面上,点击创建 Secret。
在密钥详情部分,完成以下操作:
在名称字段中,输入 secret 的名称,例如
aws-access-key-id
。在 Secret 值部分中,跳过 Upload file 字段。
在 Secret 值字段中,输入 AWS 私有访问密钥。
跳过其余部分。
点击创建密钥。
gcloud
确保您使用的是 Google Cloud CLI 402.0.0 或更高版本。在 Compute Engine 或 Google Kubernetes Engine (GKE) 上,您必须使用 cloud-platform 范围进行身份验证。
gcloud secrets create SECRET_NAME \ --replication-policy="automatic" \ --data-file="PATH_TO_AWS_SECRET_ACCESS_KEY"
替换以下内容:
SECRET_NAME
:密钥的名称,例如aws-access-key-id
PATH_TO_AWS_SECRET_ACCESS_KEY
:AWS 私有访问密钥值的路径
如需了解如何添加 Secret 版本,请参阅添加 Secret 版本。
授予 Secret Manager 访问权限角色
请按照以下步骤向 Media CDN 服务账号授予 Secret Manager Secret Accessor 角色 (roles/secretmanager.secretAccessor
)。
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
- 选择相应密钥。
- 选择权限,然后选择授予访问权限。系统随即会显示“授予访问权限”对话框。
在添加主账号部分的新的主账号字段中,输入媒体 CDN 服务账号,如下所示:
service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com
将
PROJECT_NUMBER
替换为您的项目编号。- 在分配角色部分中,针对选择角色,依次选择 Secret Manager 和 Secret Manager Secret Accessor。
- 点击保存。
gcloud
gcloud secrets add-iam-policy-binding \ projects/PROJECT_NUMBER/secrets/SECRET_NAME \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor"
替换以下内容:
PROJECT_NUMBER
:您的项目编号SECRET_NAME
:Secret 的名称
配置媒体 CDN 以对您的外部源站存储桶进行身份验证
控制台
在 Google Cloud 控制台中,前往 Media CDN 页面。
点击来源标签页。
点击您要配置的来源的名称。
系统随即会打开边缘缓存来源详情页面。
点击修改按钮。
对于来源地址,选择指定 FQDN 或 IP 地址,然后输入 FQDN 或 IP 地址。
在专用源站身份验证部分中,选择使用 AWS 签名版本 4 对媒体 CDN 针对此源的请求进行身份验证。
请指定以下信息:
- 密钥 ID:具有对源的读取权限的 AWS 访问密钥 ID
- 引用 Secret:Secret Manager 中的访问密钥 ID 及其版本。您可以选择现有 ID、手动输入 ID,也可以创建新 ID 并选择该 ID。
- 区域:您的 Amazon S3 存储桶所在的区域,例如
us-east-1
对于协议,选择 HTTPS。
点击更新来源。
gcloud
如需将服务的当前配置导出到 YAML 文件,请运行
gcloud edge-cache services export
命令:gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml
替换以下内容:
SERVICE_NAME
:媒体 CDN 服务的名称FILENAME
:YAML 文件的名称
在 Cloud Shell 中,使用文本编辑器修改 YAML 文件。
更新 YAML 文件,使其包含以下代码行:
name: ORIGIN_NAME originAddress: "S3_BUCKET_NAME.s3.S3_REGION.amazonaws.com" protocol: HTTPS awsV4Authentication: accessKeyId: "AWS_ACCESS_KEY_ID" secretAccessKeyVersion: "projects/PROJECT_NUMBER/secrets/SECRET_NAME/versions/SECRET_VERSION" originRegion: "S3_REGION"
替换以下内容:
ORIGIN_NAME
:您为此来源设置的名称S3_BUCKET_NAME
:您的 Amazon S3 存储桶的名称S3_REGION
:您的 Amazon S3 存储桶所在的区域,例如us-east-1
AWS_ACCESS_KEY_ID
:具有对来源读取权限的 AWS 访问密钥 IDPROJECT_NUMBER
:您的项目编号SECRET_NAME
:Secret Manager 中访问密钥的 IDSECRET_VERSION
:要使用的 Secret 版本
为发送到源的主机的请求配置主机和路径重写。例如,如需映射路径前缀为
/vod/
的所有请求,请配置与EdgeCacheService
的 YAML 文件中列出的originAddress
对应的hostRewrite
。以下代码示例展示了如何使用hostRewrite
:name: SERVICE_NAME routeRules: - priority: 1 - description: ROUTE_DESCRIPTION origin: ORIGIN_NAME matchRules: - prefixMatch: "/vod/" routeAction: urlRewrite: hostRewrite: "S3_BUCKET_NAME.s3.S3_REGION.amazonaws.com" pathPrefixRewrite: "/" cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 3600s
将
SERVICE_NAME
替换为EdgeCacheService
的名称。如需了解详情,请参阅使用第三方存储后端。
保存 YAML 文件。
如需更新配置,请导入 YAML 文件。
gcloud edge-cache origins import ORIGIN_NAME \ --source=FILENAME.yaml
将媒体 CDN 配置为对您的外部存储桶进行身份验证后,媒体 CDN 会为发送到您的标头的所有请求生成 HTTP 授权标头。所有查询参数都会从签名计算和对来源的请求中移除。
您的来源可能会向响应附加其他标头。如需在向客户端提供内容之前移除响应标头,请参阅设置自定义标头。如需详细了解如何配置来源,请参阅来源连接性和屏蔽。