Wasabi Hot Cloud Storage
最終更新日 2022-03-01
Fastly では Wasabi Hot Cloud Storage のパブリックバケットとプライベートバケットをオリジンとして使用することができます。
Wasabi をオリジンとして使用する
Wasabi Hot Cloud Storage バケットを Fastly で利用できるようにするには、以下の手順に従ってください。
新規サービスを作成する
新規サービスを作成する手順に従ってください。
- 新しいドメインとホストを作成する場合、以下を行ってください。
- Create a domain ページの Domain Name フィールドに、URL として使用するホスト名を入力します (例 :
cdn.example.com
)。 - Origins ページの Hosts フィールドに、ご利用の Wasabi Hot Cloud Storage バケットのリージョンに適したアドレスを入力します。us-east-1 リージョンの場合は、
<BUCKET>.s3.wasabisys.com
と入力します。その他のリージョンの場合は<BUCKET>.s3.<REGION>.wasabisys.com
と入力し、<REGION>
を適切なものに置き換えます (例:<BUCKET>.s3.eu-central-1.wasabisys.com
)。
- Create a domain ページの Domain Name フィールドに、URL として使用するホスト名を入力します (例 :
- Edit this host ページで ホストの詳細を編集する場合、以下を行ってください。
- まだ入力されていない場合は、Name フィールドに分かりやすい任意のサービスの名前を入力します。
- Address フィールドにホストの適切なアドレスが入力されていることを確認します (例:
<BUCKET>.s3.wasabisys.com
)。この情報はホスト作成時に入力されたものです。
- トランスポートレイヤーセキュリティ (TLS)
のセクションでホストの情報を編集する場合、以下を行ってください。
- Enable TLS? をデフォルト設定の Yes のままにし、Fastly とオリジン間の接続を保護します。
- Certificate hostname フィールドに、Address フィールドに表示されるアドレスを入力します (例:
<BUCKET>.s3.wasabisys.com
)。 - SNI hostname フィールドで、Match the SNI hostname to the Certificate hostname のチェックボックスを選択します。ホスト作成時に入力したアドレスが表示されます。
- Advanced options の Override host フィールドに、ホストの適切なアドレスを入力します (例:
<BUCKET>.s3.wasabisys.com
)。この情報はホスト作成時に入力されたものです。 - TLS エリアの下にある Shielding メニューから、適切なオリジンシールドの場所を選択します。この設定や選択する場所に関する詳細については、オリジンシールドを有効にするのセクションをご参照ください。
オリジンシールドを有効にする
お客様のオリジンサーバーに対してオリジンシールドを有効にすることを強くお勧めします。Wasabi は無料転送にソフトキャップを課しています。オリジンシールドを有効にしないと、Fastly は単一の POP ではなく、すべての Fastly エッジ POP に同じオブジェクトのリクエストを送信するため、Wasabi の無料転送ガイドラインに従わない可能性があります。
Shielding メニューからオリジンシールドの場所を選択する際、以下のように Wasabi Hot Cloud Storage バケットに適した場所を選択します。
Wasabi バケットのリージョン | シールドの場所 |
---|---|
eu-central-1 | オランダ、アムステルダム |
us-east-1 | バージニア州、アッシュバーン |
us-west-1 | ワシントン州、シアトル |
詳細については、オリジンシールドの場所の選択に関するガイドをご覧ください。
結果をテストする
デフォルトでは、yourdomain.global.prod.fastly.net という DNS マッピングが作成されます。上記の例では、cdn.example.com.global.prod.fastly.net
となります。指定したドメイン名の DNS エイリアスを作成します (例: cdn.example.com
に対する global-nossl.fastly.net
の CNAME)。
Fastly は、明示的な Cache-Control
ヘッダーのないコンテンツを1時間にわたってキャッシュします。キャッシュヘッダーを送信しているかどうかは、curl コマンドを使用して確認することができます。例:
1$ curl -I opscode-full-stack.s3.wasabisys.com2
3HTTP/1.1 200 OK4x-amz-id-2: ZpzRp7IWc6MJ8NtDEFGH12QBdk2CM1+RzVOngQbhMp2f2ZyalkFsZd4qPaLMkSlh5x-amz-request-id: ABV50325832426186Date: Fri, 18 Mar 2012 17:15:38 GMT7Content-Type: application/xml8Transfer-Encoding: chunked
この例では Cache-Control ヘッダーが設定されていないため、デフォルトの TTL が適用されます。
キャッシュコントロールの強化
異なる種類のアセット (Javascript ファイルや画像など) のキャッシュ方法をより細かくコントロールする必要がある場合は、キャッシュの鮮度に関するドキュメントをご覧ください。
Wasabi Hot Cloud Storage のプライベートバケットを使用する
Wasabi Hot Cloud Storage のプライベートバケットを Fastly で使用するには、Amazon のヘッダーベース認証のバージョン4を実装する必要があります。これは、カスタム VCLを使用して以下の手順で行うことができます。
設定前の注意点
Wasabi Hot Cloud Storage バケットを Fastly で利用できるようにする必要があります。オリジンがポート443に設定されていることを確認してください。以下の手順でヘッダベース認証を行う前にこの設定を行う必要があります。
Wasabi の情報を収集する
まず、Wasabi から以下の情報を取得します。
項目 | 説明 |
---|---|
バケット名 | お客様の Wasabi Hot Cloud Storage バケット の固有の名前です。バケットから項目をダウンロードする際に、各オブジェクトの URL パスやホスト名に記載される文字列です (例: widget-project )。 |
地域 | バケットが存在する場所の Wasabi リージョンコード (例: us-east-1 )。 |
アクセスキー ID | バケットに対して少なくとも読み取り権限を持つ IAM アカウントの Wasabi アクセスキー ID の文字列。 |
シークレットアクセスキー | 上記のアクセスキーとペアになっている Wasabi のシークレットアクセスキー。 |
ユーザーアクセスの分離に関するドキュメントを確認し、 例えば ListBucket の操作を許可するなど、誤って意図しないファイルへのアクセスを可能にすることがないようにします。あるいは、ドキュメントの下部にある VCL スニペットを使用して バケットの一覧表示をブロックすることもできます。
これらの情報が得られれば、VCL で適切なヘッダー値を計算することで、ヘッダー認証を使用して Wasabi バケットに対して認証を行うよう Fastly サービスを設定することができます。
認証用 VCL スニペットの作成
レギュラー VCL スニペットを作成します。
Name フィールドに
Wasabi protected origin
と入力します。Type (placement of the snippet) フィールドで、within subroutine を選択してから
miss (vcl_miss)
を選択します。VCL フィールドに以下のコードを入力します (特定の値は、お客様ご自身の Wasabi バケットに関連するものに変更してください)。
1if ( req.request == "GET" && req.backend.is_origin) {23 declare local var.wasabiAccessKey STRING;4 declare local var.wasabiSecretKey STRING;5 declare local var.wasabiBucket STRING;6 declare local var.wasabiRegion STRING;7 declare local var.canonicalHeaders STRING;8 declare local var.signedHeaders STRING;9 declare local var.canonicalRequest STRING;10 declare local var.canonicalQuery STRING;11 declare local var.stringToSign STRING;12 declare local var.dateStamp STRING;13 declare local var.signature STRING;14 declare local var.scope STRING;1516 # Supply your own credentials17 set var.wasabiAccessKey = "YOUR_BUCKET_ACCESS_KEY"; # Change this value to your own data18 set var.wasabiSecretKey = "YOUR_BUCKET_SECRET"; # Change this value to your own data19 set var.wasabiBucket = "YOUR_BUCKET_NAME"; # Change this value to your own data20 set var.wasabiRegion = "YOUR_BUCKET_REGION"; # Change this value to your own data2122 set bereq.http.x-amz-content-sha256 = digest.hash_sha256("");23 set bereq.http.x-amz-date = strftime({"%Y%m%dT%H%M%SZ"}, now);24 set bereq.http.host = var.wasabiBucket ".s3." var.wasabiRegion ".wasabisys.com";25 set bereq.url = querystring.remove(bereq.url);26 set var.dateStamp = strftime({"%Y%m%d"}, now);27 set var.canonicalHeaders = ""28 "host:" bereq.http.host LF29 "x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF30 "x-amz-date:" bereq.http.x-amz-date LF31 ;32 set var.canonicalQuery = "";33 set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date";34 set var.canonicalRequest = ""35 "GET" LF36 bereq.url.path LF37 var.canonicalQuery LF38 var.canonicalHeaders LF39 var.signedHeaders LF40 digest.hash_sha256("")41 ;4243 set var.scope = var.dateStamp "/" var.wasabiRegion "/s3/aws4_request";4445 set var.stringToSign = ""46 "AWS4-HMAC-SHA256" LF47 bereq.http.x-amz-date LF48 var.scope LF49 regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "")50 ;5152 set var.signature = digest.awsv4_hmac(53 var.wasabiSecretKey,54 var.dateStamp,55 var.wasabiRegion,56 "s3",57 var.stringToSign58 );5960 set bereq.http.Authorization = "AWS4-HMAC-SHA256 "61 "Credential=" var.wasabiAccessKey "/" var.scope ", "62 "SignedHeaders=" var.signedHeaders ", "63 "Signature=" + regsub(var.signature,"^0x", "")64 ;65 unset bereq.http.Accept;66 unset bereq.http.Accept-Language;67 unset bereq.http.User-Agent;68 unset bereq.http.Fastly-Client-IP;69 }
追加されたレスポンスヘッダーを削除する VCL スニペットの作成
Wasabi がレスポンスに追加するヘッダーを削除することもできます。そのためには、別の VCL スニペットを作成します。
- Name フィールドに
Strip Wasabi response headers
と入力します。 - Type (placement of the snippet) フィールドで、within subroutine を選択してから
deliver (vcl_deliver)
を選択します。 - VCL フィールドに以下のコードを配置します。
1if ( !req.http.Fastly-Debug ) {2 unset resp.http.x-amz-id-2;3 unset resp.http.x-amz-request-id;4 unset resp.http.server;5}
ディレクトリの一覧表示をブロックする
IAM 権限を正しく設定しないと、ユーザーがバケットフォルダの内容を一覧表示できる可能があります。Fastly で それを許可しないようにしたい場合は、以下のスニペットを作成します。
- Name フィールドに
Disallow bucket listing
と入力します。 - Type (placement of the snippet) フィールドで、within subroutine を選択してから
recv (vcl_recv)
を選択します。 - VCL フィールドに以下のコードを配置します。
1if ( req.url.path ~ "/$" ) {2 error 403;3}
この記事では、サードパーティが提供するサービスとの統合について説明します。詳細については、統合に関する注意事項をご参照ください。