- English
- 日本語
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 エイリアスを作成します (例: global-nossl.fastly.net
に対する CNAME cdn.example.com
)。
Fastly は、明示的な Cache-Control
ヘッダーのないコンテンツを1時間にわたってキャッシュします。キャッシュヘッダーを送信しているかどうかは、curl コマンドを使用して確認することができます。例:
$ curl -I opscode-full-stack.s3.wasabisys.comHTTP/1.1 200 OKx-amz-id-2: ZpzRp7IWc6MJ8NtDEFGH12QBdk2CM1+RzVOngQbhMp2f2ZyalkFsZd4qPaLMkSlhx-amz-request-id: ABV5032583242618Date: Fri, 18 Mar 2012 17:15:38 GMTContent-Type: application/xmlTransfer-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 から以下の情報を取得します。
項目 | 説明 |
---|---|
Bucket Name | お客様の Wasabi Hot Cloud Storage バケットの固有の名前です。バケットから項目をダウンロードする際に、各オブジェクトの URL パスやホスト名に記載される文字列です (例: widget-project )。 |
Region | バケットが存在する場所の Wasabi リージョンコード (例: us-east-1 )。 |
Access Key ID | バケットに対して少なくとも読み取り権限を持つ IAM アカウントの Wasabi アクセスキー ID の文字列。 |
Secret Access Key | 上記のアクセスキーとペアになっている Wasabi のシークレットアクセスキー。 |
ユーザーアクセスの分離に関するドキュメントを確認し、意図しないファイルを 誤って公開することがないようにしてください (例: ListBucket 操作を許可するなど)。 また、このドキュメントの 下部にある VCL スニペットを使用して、バケットリストをブロックすることもできます。
これらの情報が得られれば、VCL で適切なヘッダー値を計算することで、ヘッダー認証を使用して Wasabi バケットに対して認証を行うよう Fastly サービスを設定することができます。
認証用 VCL スニペットの作成
レギュラー VCL スニペットを作成します。
- Name フィールドに
Wasabi protected origin
と入力します。 - Type (placement of the snippet) フィールドで、within subroutine を選択してから
miss (vcl_miss)
を選択します。 - VCL フィールドに以下のコードを入力します (特定の値は、お客様ご自身の Wasabi バケットに関連するものに変更してください)。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
if ( req.request == "GET" && req.backend.is_origin) { declare local var.wasabiAccessKey STRING; declare local var.wasabiSecretKey STRING; declare local var.wasabiBucket STRING; declare local var.wasabiRegion STRING; declare local var.canonicalHeaders STRING; declare local var.signedHeaders STRING; declare local var.canonicalRequest STRING; declare local var.canonicalQuery STRING; declare local var.stringToSign STRING; declare local var.dateStamp STRING; declare local var.signature STRING; declare local var.scope STRING; # Supply your own credentials set var.wasabiAccessKey = "YOUR_BUCKET_ACCESS_KEY"; # Change this value to your own data set var.wasabiSecretKey = "YOUR_BUCKET_SECRET"; # Change this value to your own data set var.wasabiBucket = "YOUR_BUCKET_NAME"; # Change this value to your own data set var.wasabiRegion = "YOUR_BUCKET_REGION"; # Change this value to your own data set bereq.http.x-amz-content-sha256 = digest.hash_sha256(""); set bereq.http.x-amz-date = strftime({"%Y%m%dT%H%M%SZ"}, now); set bereq.http.host = var.wasabiBucket ".s3." var.wasabiRegion ".wasabisys.com"; set bereq.url = querystring.remove(bereq.url); set var.dateStamp = strftime({"%Y%m%d"}, now); set var.canonicalHeaders = "" "host:" bereq.http.host LF "x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF "x-amz-date:" bereq.http.x-amz-date LF ; set var.canonicalQuery = ""; set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date"; set var.canonicalRequest = "" "GET" LF bereq.url.path LF var.canonicalQuery LF var.canonicalHeaders LF var.signedHeaders LF digest.hash_sha256("") ; set var.scope = var.dateStamp "/" var.wasabiRegion "/s3/aws4_request"; set var.stringToSign = "" "AWS4-HMAC-SHA256" LF bereq.http.x-amz-date LF var.scope LF regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "") ; set var.signature = digest.awsv4_hmac( var.wasabiSecretKey, var.dateStamp, var.wasabiRegion, "s3", var.stringToSign ); set bereq.http.Authorization = "AWS4-HMAC-SHA256 " "Credential=" var.wasabiAccessKey "/" var.scope ", " "SignedHeaders=" var.signedHeaders ", " "Signature=" + regsub(var.signature,"^0x", "") ; unset bereq.http.Accept; unset bereq.http.Accept-Language; unset bereq.http.User-Agent; unset bereq.http.Fastly-Client-IP; }
追加されたレスポンスヘッダーを削除する VCL スニペットの作成
Wasabi がレスポンスに追加するヘッダーを削除することもできます。そのためには、別の VCL スニペットを作成します。
- Name フィールドに
Strip Wasabi response headers
と入力します。 - Type (placement of the snippet) フィールドで、within subroutine を選択してから
deliver (vcl_deliver)
を選択します。 - VCL フィールドに以下のコードを配置します。
12345
if ( !req.http.Fastly-Debug ) { unset resp.http.x-amz-id-2; unset resp.http.x-amz-request-id; unset resp.http.server;}
ディレクトリの一覧表示をブロックする
IAM 権限を正しく設定しないと、ユーザーがバケットフォルダの内容を一覧表示できる可能があります。Fastly で 許可しない場合は、以下のスニペットを作成してください
- Name フィールドに
Disallow bucket listing
と入力します。 - Type (placement of the snippet) フィールドで、within subroutine を選択してから
recv (vcl_recv)
を選択します。 - VCL フィールドに以下のコードを配置します。
123
if ( req.url.path ~ "/$" ) { error 403;}
注意
このページでは、サードパーティが提供するサービスとの統合について説明しています。詳細については、統合に関する注意事項をご覧ください。
翻訳についての注意事項
このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシーと利用規約が適用されます。