このページでは、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 を作成するには、次の手順に従います。
コンソール
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
: Secret の名前(例:aws-access-key-id
)PATH_TO_AWS_SECRET_ACCESS_KEY
: AWS シークレット アクセスキーの値へのパス
シークレット バージョンの追加については、シークレット バージョンを追加するをご覧ください。
Secret Manager アクセスロールを付与する
Secret Manager のシークレット アクセサー ロール(roles/secretmanager.secretAccessor
)を Media CDN サービス アカウントに付与するには、次の手順を行います。
コンソール
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 アドレスを入力します。
[非公開送信元の認証] セクションで、[AWS 署名バージョン 4 を使用してこの送信元への Media CDN のリクエストを認証する] を選択します。
以下の情報を指定します。
- キー 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 認証ヘッダーを生成します。署名の計算と送信元へのリクエストからすべてのクエリ パラメータが削除されます。
送信元がレスポンスにヘッダーを追加することがあります。クライアントに配信する前にレスポンス ヘッダーを削除するには、カスタム ヘッダーを設定するをご覧ください。送信元の設定の詳細については、送信元の接続とシールドをご覧ください。