このページでは、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 でシークレットを作成する手順は次のとおりです。
コンソール
Google Cloud コンソールで、[Secret Manager] ページに移動します。
[シークレット マネージャー] ページで、[シークレットを作成] をクリックします。
[接続の詳細] セクションで、次の操作を行います。
[名前] フィールドに、シークレットの名前を入力します(例:
aws-access-key-id
)。[シークレット値] セクションで、[ファイルをアップロード] フィールドをスキップします。
[シークレット値] フィールドに、AWS のシークレット アクセスキーを入力します。
残りのセクションはスキップします。
[シークレットの作成] をクリックします。
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
)を付与します。
コンソール
Google Cloud コンソールで、[Secret Manager] ページに移動します。
- シークレットを選択します。
- [権限]、[アクセス権を付与] の順に選択します。[アクセスを許可] ダイアログが表示されます。
[プリンシパルの追加] セクションの [新しいプリンシパル] フィールドに、Media CDN サービス アカウントを次のように入力します。
service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com
PROJECT_NUMBER
は、使用するプロジェクト番号に置き換えます。- [ロールの割り当て] セクションの [ロールを選択] で、[Secret Manager]、[Secret Manager のシークレット アクセサー] の順に選択します。
- [保存] をクリックします。
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
Google Cloud コンソールで、[Media CDN] ページに移動します。
[送信元] タブをクリックします。
構成する送信元の名前をクリックします。
[VM インスタンスの詳細] ページが開きます。
[編集] ボタンをクリックします。
[送信元アドレス] で [FQDN または IP アドレスを指定] を選択し、FQDN または IP アドレスを入力します。
[非公開送信元の認証] セクションで、[この送信元に対する Media CDN のリクエストを AWS 署名バージョン 4 で認証する] を選択します。
以下の情報を指定します。
- Key ID: 送信元に対する読み取り権限を持つ AWS アクセスキー ID
- シークレットを参照する: Secret Manager のアクセスキーの ID とそのバージョン。既存の ID を選択するか、ID を手動で入力するか、新しい ID を作成して選択します。
- リージョン: Amazon S3 バケットが配置されているリージョン(
us-east-1
など)
[プロトコル] で [HTTPS] を選択します。
[送信元を更新] をクリックします。
gcloud
サービスの現在の構成を YAML ファイルにエクスポートするには、
gcloud edge-cache services export
コマンドを実行します。gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml
次のように置き換えます。
SERVICE_NAME
: Media CDN サービスの名前FILENAME
: YAML ファイルの名前
Cloud Shell で、テキスト エディタを使用して YAML ファイルを編集します。
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 アクセスキー IDPROJECT_NUMBER
: プロジェクトの番号SECRET_NAME
: Secret Manager のアクセスキーの IDSECRET_VERSION
: 使用するシークレットのバージョン
送信元へのリクエストのホストとパスの書き換えを構成します。たとえば、パス接頭辞が
/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
の名前で置き換えます。詳細については、サードパーティ ストレージ バックエンドを使用するをご覧ください。
YAML ファイルを保存します。
構成を更新するには、YAML ファイルをインポートします。
gcloud edge-cache origins import ORIGIN_NAME \ --source=FILENAME.yaml
外部バケットに対して認証するように Media CDN を構成すると、Media CDN はヘッダーへのすべてのリクエストに対して HTTP 認可ヘッダーを生成します。すべてのクエリ パラメータは、署名の計算とオリジンへのリクエストから削除されます。
オリジンによって、レスポンスに追加のヘッダーが追加される場合があります。クライアントに提供する前にレスポンス ヘッダーを削除するには、カスタム ヘッダーを設定するをご覧ください。オリジンの構成の詳細については、オリジンの接続とシールドをご覧ください。