Wasabi Hot Cloud Storage

Fastly では Wasabi Hot Cloud Storage のパブリックバケットとプライベートバケットをオリジンとして使用することができます。

Wasabi をオリジンとして使用する

Wasabi Hot Cloud Storage バケットを Fastly で利用できるようにするには、以下の手順に従ってください。

新しいサービスの作成

新規サービスを作成する手順に従ってください。

  1. 新しいドメインとバックエンドホストを作成する場合、以下を行ってください。
    • 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)。
  2. Edit this host ページで ホストの詳細を編集する場合、以下を行ってください。
    • まだ入力されていない場合は、Name フィールドに分かりやすい任意のサービスの名前を入力します。
    • Address フィールドにホストの適切なアドレスが入力されていることを確認します (例: <BUCKET>.s3.wasabisys.com)。この情報はホスト作成時に入力されたものです。
  3. トランスポート・レイヤー・セキュリティ (TLS) のセクションでホストの情報を編集する場合、以下を行ってください。
    • Enable TLS? をデフォルト設定である Yes のままにし、Fastly とオリジン間の接続を保護します。
    • Certificate hostname フィールドに、Address フィールドに表示されるアドレスを入力します (例: <BUCKET>.s3.wasabisys.com)。
    • SNI hostname フィールドで、Match the SNI hostname to the Certificate hostname のチェックボックスを選択します。ホスト作成時に入力したアドレスが表示されます。
  4. Advanced options の Override host フィールドに、ホストの適切なアドレスを入力します (例:<BUCKET>.s3.wasabisys.com)。この情報はホスト作成時に入力されたものです。
  5. 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.com
HTTP/1.1 200 OK
x-amz-id-2: ZpzRp7IWc6MJ8NtDEFGH12QBdk2CM1+RzVOngQbhMp2f2ZyalkFsZd4qPaLMkSlh
x-amz-request-id: ABV5032583242618
Date: Fri, 18 Mar 2012 17:15:38 GMT
Content-Type: application/xml
Transfer-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 バケットに関連するものに変更してください)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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 フィールドに以下のコードを配置します。
1
2
3
4
5
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 フィールドに以下のコードを配置します。
1
2
3
if ( req.url.path ~ "/$" ) {
error 403;
}
注意

このページでは、サードパーティが提供するサービスとの統合について説明しています。詳細については、統合に関する注意事項をご覧ください。


翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。