本页面简要介绍专用源站身份验证以及将其用于 Cloud CDN 的说明。
专用源站身份验证允许 Cloud CDN 对专用 Amazon S3 存储分区或其他兼容的对象存储进行长期资源访问。使用专用源站可防止客户端绕过 Cloud CDN 并直接访问您的源站。
具有全球外部应用负载均衡器或传统应用负载均衡器的 Cloud CDN 均支持此功能。
专用源站身份验证是面向源站的,而签名网址和签名 Cookie 是面向客户端的。您可以为相同的内容启用这两项。专用源站身份验证可限制对源站和内容的非 CDN 访问。签名网址和 Cookie 用于控制哪些用户可以访问 Cloud CDN。
准备工作
创建基于哈希的消息身份验证代码 (HMAC) 密钥,以便对请求进行身份验证,并将其与服务帐号关联。记下访问密钥和密钥。
请参阅 AWS 文档中的使用 AWS 凭据访问 AWS:程序化访问。
-
如果您的对象存储区需要 HTTP 请求的
Host
标头的特定值,请确保在后端服务中配置它。如果您未配置自定义请求标头,则后端服务会保留客户端用于连接到外部应用负载平衡器的Host
标头。如需了解配置步骤,请参阅使用自定义请求标头。如需了解具体示例,请参阅使用外部后端配置负载均衡器。
如有必要,请更新到 Google Cloud CLI 的最新版本:
gcloud components update
为专用源站配置身份验证
如需配置专用源站身份验证,请按照以下说明操作:
gcloud
使用
gcloud compute backend-services export
命令将专用源站的后端配置导出到.yaml
文件:gcloud compute backend-services export BACKEND_SERVICE_NAME \ [--destination=DESTINATION]
将
DESTINATION
替换为.yaml
文件的名称,例如my-private-origin.yaml
。如需使用 HMAC 密钥对后端请求进行身份验证,请在
backendServices
的securitySettings
部分指定以下附加配置选项:securitySettings: awsV4Authentication: accessKeyId: ACCESS_KEY_ID accessKey: ACCESS_KEY [accessKeyVersion: ACCESS_KEY_VERSION] originRegion: REGION …]
替换以下内容:
ACCESS_KEY_ID
:HMAC 访问密钥 IDACCESS_KEY
:HMAC 访问密钥ACCESS_KEY_VERSION
(可选):您可以设置的表示密钥版本的唯一名称REGION
:您的存储空间服务的有效区域。对于 Amazon S3,该值不是 Google Cloud 区域。
以下代码段显示了示例
my-private-origin.yaml
文件的内容:name: shopping-cart-services backends: - description: cart-backend-1 group: 'https://www.googleapis.com/compute/v1/projects/my-project-id/global/networkEndpointGroups/my-network-origin-group' securitySettings: awsV4Authentication: accessKeyId: AKIDEXAMPLE accessKey: c4afb1cc5771d871763a393e44b703571b55cc28424d1a5e86da6ed3c154a4b9 accessKeyVersion: prod-access-key-v1.2 originRegion: us-east-2
如需更新您的专用源站,请使用
gcloud compute backend-services import
命令将配置导入后端服务:gcloud compute backend-services import BACKEND_SERVICE_NAME \ [--source=SOURCE]
将
SOURCE
替换为.yaml
文件的名称。
API
如需使用 HMAC 密钥对后端请求进行身份验证,请在 backendServices
的 securitySettings
部分指定这些额外的配置选项。
使用 Method: backendServices.insert
或 Method: backendServices.update
API 调用。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
将以下代码段添加到 JSON 请求正文:
securitySettings: { awsV4Authentication: { accessKeyId: ACCESS_KEY_ID, accessKey: ACCESS_KEY, [accessKeyVersion: ACCESS_KEY_VERSION], originRegion: REGION } }
替换以下内容:
ACCESS_KEY_ID
:HMAC 访问密钥 IDACCESS_KEY
:HMAC 访问密钥ACCESS_KEY_VERSION
(可选):您可以设置的表示密钥版本的唯一名称REGION
:您的存储空间服务的有效区域。对于 Amazon S3,该值不是 Google Cloud 区域。
以下代码段显示了示例 JSON 请求正文的内容:
securitySettings: { awsV4Authentication: { accessKeyId: "AKIDEXAMPLE", accessKey: "c4afb1cc5771d871763a393e44b703571b55cc28424d1a5e86da6ed3c154a4b9", accessKeyVersion: "prod-access-key-v1.2", originRegion: "us-east-2" } }
服务名称会自动设置为 s3
以创建签名。完成这些配置后,Cloud CDN 会为发送到您的源站的所有请求生成 HTTP 授权标头。
缓存经过身份验证的响应
您可能希望确保 Cloud CDN 缓存经过私密身份验证的内容。
为此,请将缓存模式设置为强制缓存所有内容并指定 TTL,以便缓存从源站传送的所有内容。
或者,如果您不想以相同的方式强制缓存所有内容,请将缓存模式更改为使用基于 Cache-Control 标头的源站设置或缓存静态内容,并确保在从源站传送的内容上正确设置 Cache-Control
标头。