非公開送信元の認証を構成する

このページでは、非公開送信元の認証の概要と、Cloud CDN で使用する場合の手順について説明します。

非公開送信元の認証を使用すると、Cloud CDN は限定公開 Amazon S3 バケットまたは互換性のある他のオブジェクト ストアに長期間リソース アクセスできます。非公開送信元を使用すると、クライアントは Cloud CDN をバイパスできず、送信元に直接アクセスできなくなります。

この機能は、グローバル外部アプリケーション ロードバランサまたはアプリケーション ロードバランサ(従来)を使用する Cloud CDN でサポートされています。

非公開送信元の認証は送信元向けであり、署名付き URL署名付き Cookie はクライアント向けです。同じコンテンツに対して両方を有効にできます。非公開送信元の認証では、送信元とコンテンツに対する CDN 以外のアクセスを制限します。署名付き URL と Cookie は、Cloud CDN にアクセスできるユーザーを制御します。

準備

非公開送信元の認証を構成する

非公開送信元の認証を構成するには、次の操作を行います。

コンソール

  1. Google Cloud コンソールで、[Cloud CDN] ページに移動します。

    Cloud CDN に移動

  2. 構成する送信元の名前をクリックします。送信元は カスタム送信元のタイプである必要があります。

  3. [送信元の詳細] ページで、[編集] ボタンをクリックします。

  4. [ホストとパスのルール] セクションに移動するには、[次へ] をクリックします。

  5. [キャッシュ パフォーマンス] セクションに移動するには、[次へ] をクリックします。

  6. [非公開送信元の認証] セクションで、[この送信元に対するリクエストを AWS 署名バージョン 4 で認証する] を選択します。次に、次の情報を指定します。

    • Key ID: Amazon S3 バケットまたは他の互換性のあるオブジェクト ストアのアクセスキー。
    • Key: オブジェクト ストアの認証に使用される秘密鍵。限定公開の Cloud Storage バケットを使用している場合は、HMAC キーを指定します。
    • 鍵のバージョン: 鍵のバージョンを表す一意の名前。
    • リージョン: オブジェクト ストアが配置されているリージョン(us-east-1 など)。
  7. [完了] をクリックします。

gcloud

  1. 非公開送信元のバックエンド構成を YAML ファイルにエクスポートするには、gcloud compute backend-services export コマンドを使用します。

    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 は、アーティファクト ファイルの名前に置き換えます。

API

HMAC キーを使用してバックエンド リクエストを認証するには、backendServicessecuritySettings セクションで、追加の構成オプションを指定します。

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 Authorization ヘッダーを生成します。

非公開で認証されたレスポンスをキャッシュに保存する

非公開で認証されたコンテンツが Cloud CDN によってキャッシュに保存されるようにすることもできます。

これを行うには、キャッシュ モードを [すべてのコンテンツを強制的にキャッシュします] に設定して TTL を指定し、送信元から提供されるすべてのコンテンツがキャッシュに保存されるようにします。

あるいは、すべてのコンテンツを同じ方法で強制的にキャッシュに保存しない場合は、キャッシュ モードを [Cache-Control ヘッダーに基づいて送信元の設定を使用する] または [静的コンテンツをキャッシュします] に変更し、Cache-Control ヘッダーが送信元から提供されるコンテンツで正しく設定されていることを確認します。

次のステップ