限定公開の Amazon S3 互換バケットを送信元として使用する

このページでは、Amazon Simple Storage Service(Amazon S3)と AWS Signature バージョン 4を使用して、Media CDN を非公開の Amazon S3 互換バケットに接続する方法について説明します。 Media CDN は AWS Signature バージョン 4a をサポートしていません。

Media CDN は、送信元リクエストを認証するために AWS Signature バージョン 4 をサポートしています。この機能を使用すると、Media CDN を非公開の Amazon S3 互換バケットに接続して、コンテンツが Media CDN とのみ共有されるようにできます。 また、クライアント認証を有効にして、多層防御を強化することもできます。 詳細については、署名付きリクエストを使用するをご覧ください。

始める前に

以下のリソースがあることを確認してください。

Media CDN のサービス エージェントを作成する

Media CDN のサービス エージェントを作成するには、 gcloud beta services identity create コマンドを使用します。

gcloud

gcloud beta services identity create \
    --project PROJECT_ID \
    --service=networkservices.googleapis.com

PROJECT_ID は、実際のプロジェクト ID に置き換えます。

詳細については、サービス エージェントの作成をトリガーするをご覧ください。

Secret Manager にアクセスキーを保存する

Secret Manager でシークレットを作成する手順は次のとおりです。

コンソール

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

    Secret Manager に移動

  2. [シークレット マネージャー] ページで、[シークレットを作成] をクリックします。

  3. [接続の詳細] セクションで、次の操作を行います。

    1. [名前] フィールドに、シークレットの名前(aws-access-key-id など)を入力します。

    2. [シークレット値] セクションで、[ファイルをアップロード] フィールドをスキップします。

    3. [シークレット値] フィールドに、AWS シークレット アクセスキーを入力します。

  4. 残りのセクションはスキップします。

  5. [シークレットの作成] をクリックします。

gcloud

バージョン 402.0.0 以降の Google Cloud CLI を使用していることを確認します。Compute Engine または Google Kubernetes Engine(GKE)では、cloud-platform スコープを使用して 認証する必要があります

gcloud secrets create SECRET_NAME \
    --replication-policy="automatic" \
    --data-file="PATH_TO_AWS_SECRET_ACCESS_KEY"

次のように置き換えます。

  • SECRET_NAME: Secret の名前(aws-access-key-id など)。
  • PATH_TO_AWS_SECRET_ACCESS_KEY: AWS シークレット アクセスキー値のパス。

シークレット バージョンの追加については、 シークレット バージョンを追加するをご覧ください。

Secret Manager アクセスロールを付与する

次の手順に沿って、 Secret Manager のシークレット アクセサーのロールroles/secretmanager.secretAccessor)を Media CDN サービス アカウントに付与します。

コンソール

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

    Secret Manager に移動

  2. シークレットを選択します。
  3. [**権限**] を選択し、[**アクセスを許可**] を選択します。[アクセスを許可] ダイアログが表示されます。
  4. [**プリンシパルの追加**] セクションの [**新しいプリンシパル**] フィールドに、次のように Media CDN サービス アカウントを入力します。
    service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com

    PROJECT_NUMBER は、使用するプロジェクト番号に置き換えます。

  5. [ロールの割り当て] セクションの [ロールを選択] で、 [Secret Manager] を選択し、 [Secret Manager のシークレット アクセサー] を選択します。
  6. [保存] をクリックします。

gcloud

gcloud secrets add-iam-policy-binding \
projects/PROJECT_NUMBER/secrets/SECRET_NAME \
    --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com" \
    --role="roles/secretmanager.secretAccessor"

次のように置き換えます。

  • PROJECT_NUMBER: プロジェクトの番号
  • SECRET_NAME: Secret の名前。

外部送信元バケットに対して認証するように Media CDN を構成する

コンソール

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

    Media CDN に移動

  2. [送信元] タブをクリックします。

  3. 構成する送信元の名前をクリックします。

    [エッジ キャッシュ オリジンの詳細] ページが開きます。

  4. [編集] ボタンをクリックします。

  5. [**送信元アドレス**] で [**FQDN または IP アドレスを指定**] を選択し、 FQDN または IP アドレスを入力します。

  6. [プライベート オリジンの認証] セクションで、[Authenticate Media CDN's request to this origin with AWS signature version 4] を選択します。

  7. 以下の情報を指定します。

    • リージョン: Amazon S3 バケットが 配置されているリージョン(us-east-1など)。
  8. [プロトコル] で [HTTPS] を選択します。

  9. [送信元を更新] をクリックします。

gcloud

  1. サービスの現在の構成を YAML ファイルにエクスポートするには、 gcloud edge-cache services export コマンドを実行します。

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    次のように置き換えます。

    • SERVICE_NAME: Media CDN サービスの名前。
    • FILENAME: YAML ファイルの名前。
  2. Cloud Shell で、テキスト エディタを使用して YAML ファイルを編集します。

  3. YAML ファイルを次のように更新します。

    name: ORIGIN_NAME
    originAddress: "S3_BUCKET_NAME.s3.S3_REGION.amazonaws.com"
    protocol: HTTPS
    awsV4Authentication:
      accessKeyId: "AWS_ACCESS_KEY_ID"
      secretAccessKeyVersion: "projects/PROJECT_NUMBER/secrets/SECRET_NAME/versions/SECRET_VERSION"
      originRegion: "S3_REGION"
    

    次のように置き換えます。

    • ORIGIN_NAME: この送信元に設定する名前。
    • S3_BUCKET_NAME: Amazon S3バケットの名前。
    • S3_REGION: Amazon S3 バケットが配置されているリージョン(us-east-1 など)。
    • AWS_ACCESS_KEY_ID: 送信元に対する読み取り権限を持つ AWS アクセスキー ID
    • PROJECT_NUMBER: プロジェクトの番号
    • SECRET_NAMESecret Manager のアクセスキーの ID。
    • SECRET_VERSION: 使用するシークレットのバージョン。
  4. 送信元へのリクエストのホストとパスの書き換えを構成します。たとえば、パス接頭辞が /vod/ のすべてのリクエストをマッピングするには、EdgeCacheService の YAML ファイルにリストされている originAddress に対応する hostRewrite を構成します。次のコードサンプルは、hostRewrite の使用方法を示しています。

    name: SERVICE_NAME
    routeRules:
      - priority: 1
      - description: ROUTE_DESCRIPTION
        origin: ORIGIN_NAME
        matchRules:
        - prefixMatch: "/vod/"
        routeAction:
          urlRewrite:
            hostRewrite: "S3_BUCKET_NAME.s3.S3_REGION.amazonaws.com"
            pathPrefixRewrite: "/"
          cdnPolicy:
            cacheMode: CACHE_ALL_STATIC
            defaultTtl: 3600s
    

    SERVICE_NAME は、EdgeCacheService の名前で置き換えます。

    詳細については、 サードパーティ ストレージ バックエンドを使用するをご覧ください。

  5. YAML ファイルを保存します。

  6. 構成を更新するには、YAML ファイルをインポートします。

    gcloud edge-cache origins import ORIGIN_NAME \
        --source=FILENAME.yaml
    

外部バケットに対して認証するように Media CDN を構成すると、Media CDN はヘッダーへのすべてのリクエストに対して HTTP Authorization ヘッダーを生成します。すべてのクエリ パラメータは、署名計算と送信元へのリクエストから削除されます。

送信元は、レスポンスに追加のヘッダーを追加する場合があります。クライアントに配信する前にレスポンス ヘッダーを削除するには、 カスタム ヘッダーを設定するをご覧ください。 送信元の構成について詳しくは、 送信元の接続とシールドをご覧ください。