このページでは、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 とのみ共有されるようにできます。 また、クライアント認証を有効にして、多層防御を強化することもできます。 詳細については、署名付きリクエストを使用するをご覧ください。
始める前に
以下のリソースがあることを確認してください。
上記の非公開の 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 Manager] ページに移動します。 Google Cloud
[シークレット マネージャー] ページで、[シークレットを作成] をクリックします。
[接続の詳細] セクションで、次の操作を行います。
[名前] フィールドに、シークレットの名前(
aws-access-key-idなど)を入力します。[シークレット値] セクションで、[ファイルをアップロード] フィールドをスキップします。
[シークレット値] フィールドに、AWS シークレット アクセスキーを入力します。
残りのセクションはスキップします。
[シークレットの作成] をクリックします。
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 サービス
アカウントに付与します。
コンソール
コンソールで、[Secret Manager] ページに移動します。 Google Cloud
- シークレットを選択します。
- [**権限**] を選択し、[**アクセスを許可**] を選択します。[アクセスを許可] ダイアログが表示されます。
[**プリンシパルの追加**] セクションの [**新しいプリンシパル**] フィールドに、次のように Media CDN サービス アカウントを入力します。
service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.comPROJECT_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 を構成する
コンソール
コンソールで、[Media CDN] ページに移動します。 Google Cloud
[送信元] タブをクリックします。
構成する送信元の名前をクリックします。
[エッジ キャッシュ オリジンの詳細] ページが開きます。
[編集] ボタンをクリックします。
[**送信元アドレス**] で [**FQDN または IP アドレスを指定**] を選択し、 FQDN または IP アドレスを入力します。
[プライベート オリジンの認証] セクションで、[Authenticate Media CDN's request to this origin with AWS signature version 4] を選択します。
以下の情報を指定します。
- キー 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 のアクセスキーの ID。SECRET_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: 3600sSERVICE_NAMEは、EdgeCacheServiceの名前で置き換えます。詳細については、 サードパーティ ストレージ バックエンドを使用するをご覧ください。
YAML ファイルを保存します。
構成を更新するには、YAML ファイルをインポートします。
gcloud edge-cache origins import ORIGIN_NAME \ --source=FILENAME.yaml
外部バケットに対して認証するように Media CDN を構成すると、Media CDN はヘッダーへのすべてのリクエストに対して HTTP Authorization ヘッダーを生成します。すべてのクエリ パラメータは、署名計算と送信元へのリクエストから削除されます。
送信元は、レスポンスに追加のヘッダーを追加する場合があります。クライアントに配信する前にレスポンス ヘッダーを削除するには、 カスタム ヘッダーを設定するをご覧ください。 送信元の構成について詳しくは、 送信元の接続とシールドをご覧ください。