Akamai Diversity

Akamai Japan ブログ

S3バケットへの認証ヘッダー使ったアクセス

署名バージョン4による認証ヘッダーを付ける

Akamai Solutions Engineer の Yuhki です。

Akamai Edge Server上で、エンドユーザーから受け取ったHTTPリクエストに、AWSのアクセスキー(Access Key IDとSecret Access Key)を使用して生成した署名(署名バージョン4)を付けS3に送信する事が可能です。以前は Advanced実装 (Akamaiのサービスに依頼して頂く必用のある実装) 扱いでしたが、現在は Property の Behavior を使用してユーザーが設定する事が可能です。(この機能が標準のBehaviorとして提供されているのは、この記事作製時点で Download Delivery 等の Media系製品のみになります)

署名されていない一般ユーザーによるS3へのアクセスを防ぐ事ができますので、Akamai を通さない S3へのアクセスを許可したくない場合等に使用できます。また、AWSのアクセスキーを使うため、S3バケットに対する細かなアクセス制御を行う事も可能になります。

2019/08/06:S3へPathベースでアクセスする方法が推奨では無くなったため、PathベースでS3にアクセスする方法で書かれていた記事を Virtual Host ベースでアクセスする内容に更新致しました。

s3akamai.png
Akamai のProperty の設定

この手順の中では具体的な設定に触れていませんが、ユーザー→アカマイ Edge Server → S3(オリジン)への通信は HTTPS 通信ができている事を前提にしています。
HTTP ヘッダーに署名情報を含んだ通信をするため、HTTPS 通信で保護する事が望ましいと思います。

アカマイのプロパティの設定で変更が必要な、Behavior (動作)の設定箇所は2箇所あります。

  • Behavior「オリジンサーバー」の設定

「オリジンサーバーのホスト名」は、S3 の EndPoint 名になります。(実際には「バケット名.s3-ap-northeast-1.amazonawas.com」のような形式でも大丈夫です。AWSのヘルプページには「ほとんどのバケットは http://bucketname.s3.amazonaws.com で自動的にアクセス可能」とされています)

S3はホストヘッダーを元に、バケットを判断します。「カスタム転送ホストヘッダー」には、「<バケット名>.s3-ap-northeast-1.amazonawas.com」のようなドメイン名を入力します。

S3RESTAccessVirtualHost1-1.jpg

バケット名が「mybucket.test」のような「.」を含むバケット名になっている場合は、S3が提供する証明書がカバーしているホスト名が「*.s3-ap-northeast-1.amazonawas.com」のようなワイルドカード形式であるため Akamai Edger Server と S3 の間で HTTPS コネクションが成立しません。「.」を含まないバケット名を使用する必要があります。

  • Behavior 「オリジンの特性」の設定

「AWS Hostname」の部分は、前述の「カスタム転送ホストヘッダー」の値と同じ「<バケット名>.s3-ap-northeast-1.amazonawas.com」のようなドメイン名を入力します。
S3RESTAccessVirtualHost2-1.jpg

※例で使われているkey等の値は実際の値を少し改変したダミーの値ですので、この値をそのまま入力しても動作しません。

AWSのCLI以外で認証ヘッダーを使う場合、自分で認証ヘッダーに付ける値を計算する必要がありますが、Akamaiのプロパティ設定に値を入力するだけで、Akamai 側で認証ヘッダーの値の計算をし、Akamai Edge からS3へのアクセス時にヘッダーに付加されるようになります。

Leave a comment