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

このページでは、プライベート オリジンの認証の概要と、Cloud CDN で使用する場合の手順について説明します。

プライベート オリジンの認証を使用すると、Amazon S3 のプライベート バケットまたは互換性のあるオブジェクト ストアに対する長期のリソース アクセス権が Cloud CDN に付与されます。プライベート オリジンを使用すると、クライアントは 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 で認証する] を選択します。次に、以下の情報を指定します。

    • 鍵 ID: Amazon S3 バケットまたは他の互換性のあるオブジェクト ストアのアクセスキー。
    • : オブジェクト ストアの認証に使用される秘密鍵。プライベート 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 は、YAML ファイルの名前に置き換えます。

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 ヘッダーが送信元から提供されるコンテンツで正しく設定されていることを確認します。

次のステップ