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

このページでは、Amazon Simple Storage Service(Amazon S3)と AWS Signature バージョン 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 で Secret を作成するには、次の手順に従います。

コンソール

  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: Secret の名前(例: aws-access-key-id
  • PATH_TO_AWS_SECRET_ACCESS_KEY: AWS シークレット アクセスキーの値へのパス

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

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

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

コンソール

  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. [非公開送信元の認証] セクションで、[AWS 署名バージョン 4 を使用してこの送信元への Media CDN のリクエストを認証する] を選択します。

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

    • キー 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 認証ヘッダーを生成します。署名の計算と送信元へのリクエストからすべてのクエリ パラメータが削除されます。

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