本页面简要介绍专用源站身份验证以及将其用于 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 
为专用源站配置身份验证
如需配置专用源站身份验证,请按照以下说明操作:
控制台
- 在 Google Cloud 控制台中,前往 Cloud CDN 页面。 
- 点击您要配置的源站的名称。源站必须是自定义源站类型。 
- 在源站详情页面上,点击修改按钮。 
- 如需前往主机和路径规则部分,请点击下一步。 
- 如需前往缓存性能部分,请点击下一步。 
- 在专用源站身份验证部分中,选择使用 AWS 签名版本 4 对此源站的请求进行身份验证。然后,指定以下信息: - 密钥 ID:Amazon S3 存储桶或其他兼容的对象存储区的访问密钥。
- 密钥:用于向对象存储区进行身份验证的密钥。如果您使用的是专用 Cloud Storage 存储桶,请指定 HMAC 密钥。
- 密钥版本:用来表示密钥版本的唯一名称。
- 区域:对象存储区所在的区域,例如 us-east-1。
 
- 点击完成。 
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 访问密钥 ID
- ACCESS_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 访问密钥 ID
- ACCESS_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 标头。