配置专用源站身份验证

本页面简要介绍专用源站身份验证以及将其用于 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

  1. 使用 gcloud compute backend-services export 命令将专用源站的后端配置导出到 .yaml 文件:

    gcloud compute backend-services export BACKEND_SERVICE_NAME \
       [--destination=DESTINATION]
    

    DESTINATION 替换为 .yaml 文件的名称,例如 my-private-origin.yaml

  2. 如需使用 HMAC 密钥对后端请求进行身份验证,请在 backendServicessecuritySettings 部分指定以下附加配置选项:

    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
    
  3. 如需更新您的专用源站,请使用 gcloud compute backend-services import 命令将配置导入后端服务:

    gcloud compute backend-services import BACKEND_SERVICE_NAME \
       [--source=SOURCE]
    

    SOURCE 替换为 .yaml 文件的名称。

API

如需使用 HMAC 密钥对后端请求进行身份验证,请在 backendServicessecuritySettings 部分指定这些额外的配置选项。

使用 Method: backendServices.insertMethod: 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 标头。

后续步骤