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

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

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

始める前に

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

  • 命名規則に従う限定公開の Amazon S3 バケット。

  • 上記のプライベート Amazon S3 バケットにアクセスするための専用の AWS IAM ユーザー アカウント。バケットが AWS IAM ユーザー アカウントに s3:getObject 権限を付与していることを確認します。Amazon S3 バケットへのアクセスの構成の詳細については、Amazon S3 の Identity and Access Management をご覧ください。

  • 専用の AWS IAM ユーザー アカウントの AWS アクセスキー ID と AWS シークレット アクセスキー。詳細については、IAM ユーザーのアクセスキーの管理をご覧ください。

  • Secret Manager を初めて使用する場合は、Secret Manager を構成します。

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. Google Cloud コンソールで、[Secret Manager] ページに移動します。

    Secret Manager に移動

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

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

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

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

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

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

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

gcloud

Google Cloud CLI バージョン 402.0.0 以降を使用していることを確認します。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: シークレットの名前(例: aws-access-key-id
  • PATH_TO_AWS_SECRET_ACCESS_KEY: AWS シークレット アクセスキー値のパス

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

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

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

コンソール

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

    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 を構成する

Console

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

    Media CDN に移動

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

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

    [VM インスタンスの詳細] ページが開きます。

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

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

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

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

    • Key ID: 送信元に対する読み取り権限を持つ AWS アクセスキー ID
    • シークレットを参照する: Secret Manager のアクセスキーの ID とそのバージョン。既存の ID を選択するか、ID を手動で入力するか、新しい ID を作成して選択します。
    • リージョン: 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_NAME: Secret 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 認可ヘッダーを生成します。すべてのクエリ パラメータは、署名の計算とオリジンへのリクエストから削除されます。

オリジンによって、レスポンスに追加のヘッダーが追加される場合があります。クライアントに提供する前にレスポンス ヘッダーを削除するには、カスタム ヘッダーを設定するをご覧ください。オリジンの構成の詳細については、オリジンの接続とシールドをご覧ください。