Backblaze の B2 Cloud Storage
最終更新日 2022-03-01
Backblaze B2 Cloud Storage (B2) のパブリックバケットとプライベートバケットは、Fastly のオリジンとして使用することができます。
Backblaze には、Backblaze B2 Cloud Storage をオリジン/オリジンサーバーとして使用する場合に、Fastly へのエグレスコストを排除する統合ディスカウントがあります。さらに Backblaze は、他のクラウドプロバイダーから Backblaze への切り替えに伴うデータ転送コストの多くを相殺する移行プログラムも用意しています。移行に伴うダウンタイムを最小にするために、support@fastly.com までご連絡ください。
設定前の注意点
B2 をオリジンとして使用するためのセットアップおよび設定手順を始める前に、以下の点に注意してください。
- 有効な Backblaze アカウントが必要です。 新しいバケットを作成し、Fastly で使用するためのファイルをアップロードする前に、まず Backblaze の Web サイトで Backblaze アカウントを作成 する必要があります。
- Backblaze では、B2 を設定する方法が2つあります。 B2 は、Backblaze コントロールパネルまたは B2 コマンドラインツールを使ってセットアップおよび設定できます。どちらの作成方法もパブリックバケットで使用することができます。ただし、プライベートバケットで使用するには、B2 コマンドラインツールを使用する必要があります。コマンドラインツールのインストール手順などの詳細については、Backblaze の B2 に関するドキュメントを参照してください。
- Backblaze は Backblaze B2 Cloud Storage と統合するための API を2種類用意しています。 B2 Cloud Storage API または S3 Compatible API を使用し、B2 データバケットを Fastly 経由で利用可能にできます。S3 Compatible API を利用することで、既存の S3 統合環境や SDK を B2 と統合することができます。ただし、2020年5月4日以前に作成されたバケットとそのバケットに固有のアプリケーションキーは、S3 Compatible API に対応していません。詳細については、Backblaze の記事『Getting Started with the S3 Compatible API』を参照してください。
Backblaze B2 をオリジンとして使用する
B2 をオリジンとして使用するには、以下の手順に従ってください。
新規バケットを作成する
B2 のデータは、バケットに格納されます。以下の手順で、B2 コントロールパネルで新規バケットを作成します。
コマンドラインツールを使用してバケットを作成する方法については、Backblaze のガイドで詳しく解説されています。
- Backblaze アカウントにログインします。Backblaze アカウントの設定ページが表示されます。
- Buckets リンクをクリックします。B2 Cloud Storage Buckets ページが表示されます。
-
Create a Bucket リンクをクリックします。Create a Bucket 設定画面が表示されます。
- Bucket Unique Name フィールドに、一意なバケット名を入力します。各バケット名は6文字以上の英数字である必要があります。区切り文字として使用できるのはハイフン (
-
) のみです。スペースは使用できません。 - Create a Bucket ボタンをクリックします。B2 Cloud Storage Buckets ページのバケット一覧に新規作成したバケットが表示されます。
- 先ほど作成した新しいバケットにファイルをアップロードします。
2020年5月4日以前に作成されたバケットは、S3 Compatible API に対応していません。S3 Compatible に対応可能なバケットがない場合、Backblaze にて新規バケットを作成することをおすすめします。
新規バケットにファイルをアップロードする
データを格納するバケットを新規作成したら、次の手順に従って B2 コントロールパネル経由でファイルをアップロードします。
コマンドラインツールを使用してバケットを作成する方法については、Backblaze のガイドで詳しく解説されています
。
- B2 コントロールパネルの Buckets リンクをクリックします。B2 Cloud Storage Buckets ページが表示されます。
- 先ほど作成したバケットの詳細を確認します。
- Upload/Download ボタンをクリックします。Browse Files ページが表示されます。
- Upload ボタンをクリックします。アップロード設定画面が表示されます。
- ファイルを設定画面にドラッグアンドドロップするか、ファイル選択ツールをクリックし、アップロードするファイルを選択します。この段階でのファイルの名前と種類は重要ではありません。どのようなファイルでも問題ありません。アップロードが完了すると、そのバケットのファイル一覧にファイル名が表示されます。
- B2 と対話する Fastly サービスをセットアップするために、バケットにアサインされたホスト名を探します。
バケットにアサインされたホスト名を探す
B2 と相互作用する Fastly サービスを設定するには、作成したバケットに割り当てられた、ファイルがアップロードされた Backblaze のホスト名を把握する必要があります
以下のいずれかの方法でホスト名を探します。
-
標準の B2 Cloud Storage API を使用している場合は、B2 コントロールパネルを使用します。 先ほどアップロードしたファイルの名前をクリックし、表示される Details 設定画面の Friendly URL フィールドと Native URL フィールドを確認します。ホスト名は、各行で完全に一致する
https://
指定子の後の文字列です。 -
コマンドラインと B2 Cloud Storage API を使用します。 コマンドラインで
b2 get-account-info
コマンドを実行し、downloadUrl
属性のホスト名を使用します。 -
S3 Compatible API を使用している場合は、B2 コントロールパネルを使用します。 Buckets リンクをクリックし、先ほど作成したバケットの詳細を確認します。ホスト名は、Endpoint フィールドにテキスト表示されています。
プライベートバケットの Backblaze アプリケーションを作成する
Backblaze マスターアプリケーションキーは、Backblaze アカウント上のすべてのバケットとファイルへのアクセスを制御します。Fastly では、Backblaze B2 のプライベートバケットを使用する場合は、バケットに固有のアプリケーションキーを作成する必要があります。
アプリケーションキーの詳細については、Backblaze のドキュメントを参照してください。可能な限り少ない権限を使用してプライベートバケットのアプリケーションキーを作成することを推奨します。オプションでは、一定の秒数経過後にキーが失効するように設定することもできます (最長1,000日または86,400,000秒)。ただし、有効期限を設定した場合は、定期的に新しいアプリケーションキーを作成し、その都度 Fastly の設定を更新する必要があります。
コントロールパネルによる作成
B2 のコントロールパネルでアプリケーションキーを作成するには、以下の手順を実行します。
- App Keys リンクをクリックします。Application Keys ページが表示されます。
-
Add a New Application Key ボタンをクリックします。Add Application Key 設定画面が表示されます。
- 以下の要領では、Add Application Key の各フィールドに入力します:
- Name of Key フィールドに、プライベートバケットキー名を入力します。キー名は英数字、区切り文字として使用できるのはハイフン (
-
) のみです。スペースは使用できません。 - Allow access to Bucket(s) メニューから、プライベートバケット名を選択します。
- Type of Access オプション から Read Only を選択します。
- 他のオプション項目とフィールドは空白のままにしておきます。
- Name of Key フィールドに、プライベートバケットキー名を入力します。キー名は英数字、区切り文字として使用できるのはハイフン (
-
Create New Key ボタンをクリックします。成功メッセージと新しいアプリケーションキーが表示されます。
- 成功メッセージの keyID と applicationKey をすみやかに控えてください。この情報は、プライベートオブジェクトにヘッダーベースの認証を実装する際に使用します。
コマンドラインを使用した作成方法
コマンドラインからアプリケーションキーを作成するには、以下のように create-key
コマンドを実行します。
1
$ b2 create-key --bucket <bucketName> <keyName> shareFiles,listBuckets
ここでは、<bucketName> <keyName>
は作成したバケットとキーの名前を表します。例は以下の通りです:
1
$ b2 create-key --bucket this-is-an-example-bucket Fastly-Private-Bucket-Key shareFiles,listBuckets
keyID と applicationKey の2値が返されます。
2020年5月4日以前に作成されたアプリケーションキーは、S3 Compatible API に対応していません。
新規サービスを作成する
Fastly サービスを新規作成するには、まず新規ドメインを作成した後に新規ホストを作成し、B2 のトラフィックを受け入れるように編集する必要があります。その手順については、新規サービスの作成に関するガイドに記載されています。これらの手順を完了する際、以下の点にご注意ください。
- ホストを新規作成する際、Origins ページの Hosts フィールドに B2 バケットのホスト名を入力します。
- Edit this hostページでは、ホスト情報を編集する際、ホストのトランスポートレイヤーセキュリティ (TLS) セクションの情報を確認してください。具体的には、以下の点を確認します:
- Fastly とオリジン間の接続が確立されている。
- Certificate hostname フィールドにバケットのホスト名が入力されている。
- SNI のホスト名を Certificate のホスト名と一致させるチェックボックスが選択されている (SNI のホスト名フィールドの下に表示されます)。
- また、ホストを編集する際、オプションでオリジンシールドメニューから適切なオリジンシールドの場所を選択し、オリジンシールドを有効にできます。つまり、B2 Cloud Storage を使用する際、最も適切な Backblaze のデータセンターに最も近いオリジンシールドの場所を選択する必要があります。最寄りのデータセンターが
- カリフォルニア州サクラメント (米国西部地域) であれば、オリジンシールド メニューから San Jose (SJC) を選択します。
- アリゾナ州フェニックス (米国西部地域) であれば、オリジンシールドメニューから Palo Alto (PAO) を選択します。
- オランダのアムステルダム (EU 中部地域) であれば、オリジンシールドメニューから Amsterdam (AMS) を選択します。
- オーバーライドするホストを指定するかどうかを判断する:
- S3 Compatible API を使用する場合は、オーバーライドホストを指定せずにこの手順をスキップしてください。
- S3 Compatible API を使用しない場合は、Advanced options の Override host フィールドに Host の適切なアドレスを入力します (例:
s3-uswest-000.backblazeb2.com
やf000.backblazeb2.com
)。
S3 Compatible API を使用する
パブリックオブジェクトで S3 Compatible API を使用する
パブリックオブジェクトで S3 Compatible API を使用するには、Host
ヘッダーに B2 バケットの名前が含まれている必要があります。これを実現するには2つの方法があります。いずれの方法においてもリージョン名を取得する必要があります。リージョン名は S3 Endpoint の2番目の部分になります。例えば、S3 Endpoint が s3.us-west-000.backblazeb2.com
であれば、お客様のリージョンは us-west-000
であることを表しています。
- 作成したオリジンでは、Override host フィールドを
<bucket>.s3.<region>.backblazeb2.com
に設定します (例:testing.s3.uswest-000.backblazeb2.com
)。 -
VCL スニペットを作成します。スニペットを作成する際に、within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を選択します。次に、VCL フィールドに以下のコードを入力します。必ず、お客様の B2 バケットに割り当てられた値に変更してください。ここでは、
var.b2Bucket
は"testing"
となり、var.b2Region
は"uswest-000"
となります。1 2 3 4 5 6 7 8
declare local var.b2Bucket STRING; declare local var.b2Region STRING; set var.b2Bucket = "YOUR_B2_BUCKET_NAME"; # Change this value to your own data set var.b2Region = "YOUR_B2_BUCKET_REGION"; # Change this value to your own data if (req.method == "GET" && !req.backend.is_shield) { set bereq.http.host = var.b2Bucket ".s3." var.b2Region ".backblazeb2.com"; }
プライベートオブジェクトで S3 Compatible API を使用する
Backblaze B2 のプライベートバケットを Fastly で使用するには、Amazon のヘッダーベースによる認証バージョン4を実装する必要があります。これは カスタム VCL を使用して行うことができます。
まず、Backblaze から以下の情報を取得します (「プライベートバケットの Backblaze アプリケーションを作成する」を参照してください)。
項目 | 説明 |
---|---|
バケット名 | Backblaze B2 バケットの名前。バケットからアイテムをダウンロードする際に、各オブジェクトの URL パスやホスト名に記載される文字列です。 |
地域 | お客様のバケットが存在する Backblaze の地域コード (例:uswest-000 )。 |
アクセスキー | バケットに対して読み取り以上の権限を持つ App Key の Backblaze keyID。 |
シークレットキー | 上記のアクセスキーと Backblaze applicationKey の組み合わせ |
これらの情報が得られれば、VCL で適切なヘッダー値を計算することで、ヘッダー認証を使用して B2 バケットに対して認証を行うように Fastly サービスを設定することができます。
まず、レギュラー VCL スニペット を作成します。AWS protected origin
のような意味のある名前を付けます。スニペットを作成する際に、within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を選択します。次に、VCL フィールドに以下のコードを入力します (特定の値は、お客様自身の AWS バケットに関連するものに変更するようにしてください)。
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
63
64
65
66
67
68
69
declare local var.b2AccessKey STRING;
declare local var.b2SecretKey STRING;
declare local var.b2Bucket STRING;
declare local var.b2Region 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;
set var.b2AccessKey = "YOUR_B2_ACCESS_KEY"; # Change this value to your own data
set var.b2SecretKey = "YOUR_B2_SECRET_KEY"; # Change this value to your own data
set var.b2Bucket = "YOUR_B2_BUCKET_NAME"; # Change this value to your own data
set var.b2Region = "YOUR_B2_BUCKET_REGION"; # Change this value to your own data
if (req.method == "GET" && !req.backend.is_shield) {
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.b2Bucket ".s3." var.b2Region ".backblazeb2.com";
set bereq.url = querystring.remove(bereq.url);
set bereq.url = regsuball(urlencode(urldecode(bereq.url.path)), {"%2F"}, "/");
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.b2Region "/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.b2SecretKey,
var.dateStamp,
var.b2Region,
"s3",
var.stringToSign
);
set bereq.http.Authorization = "AWS4-HMAC-SHA256 "
"Credential=" var.b2AccessKey "/" 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;
}
B2 API を使用する
パブリックオブジェクト
URL にバケット名が含まれていることを確認する必要があります。これを行うには、2つの方法があります。
- Header オブジェクトを使用する方法
-
Create header ボタンを再度クリックし、別の新しいヘッダーを作成します。Create a header ページが表示されます。
- 以下の要領で Create a header ページの各フィールドに入力します。
- Name フィールドに
Rewrite B2 URL
と入力します。 - Type メニューから Request を選択し、Action メニューから Set を選択します。
- Destination フィールドに
url
と入力します。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
20
と入力します。
- Name フィールドに
- Source フィールドに
"/file/<Bucket Name>" req.url
と入力します。 - Create ボタンをクリックします。Content ページに新しい Date ヘッダーが表示されます。
- Activate ボタンをクリックして設定変更をデプロイします。
-
-
また、VCL スニペットを作成します。スニペットを作成する際に、within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を選択します。次に、VCL フィールドに以下のコードを入力します。変数は必ず、お客様の B2 バケット名に変更してください。
1 2 3 4 5 6
declare local var.b2Bucket STRING; set var.b2Bucket = "YOUR_B2_BUCKET_NAME"; # Change this value to your own data if (req.method == "GET" && !req.backend.is_shield) { set bereq.url = "/file/" var.b2Bucket bereq.url; }
プライベートオブジェクト
-
Fastly で Backblaze の B2 プライベートバケットを使用するには、
Authorization Token
が必要です。これは、コマンドラインを使用して入手する必要があります。 -
そのためには、取得したアプリケーションキーでコマンドラインツールを認証する必要があります。
1
$ b2 authorize-account <keyID> <applicationKey>
-
ここで、プライベートバケットの認可トークンを取得する必要があります。
1
$ b2 get-download-auth <bucket>
例
1
$ b2 get-download-auth testing
これにより、デフォルトである86400秒 (つまり1日) 有効なトークンが作成されます。オプションで、有効期間を1秒から604,800秒 (つまり1週間) の間で自由に変更することができます。
1
$ b2 get-download-auth --duration 604800 testing
生成されたトークンを控えておきます。
有効期限が切れる前に認可トークンを再生成し、Fastly の設定を更新する必要があります。これを行うには、Fastly のバージョンレス Edge ディクショナリを使用するのが最も良い方法です。
生成されたトークンを Backblaze に渡す
生成されたトークンを Backblaze に渡す方法は2つあります。1つ目は、Authorization
ヘッダーを使用する方法です。こちらの方法をおすすめします。
-
Create header ボタンを再度クリックし、別の新しいヘッダーを作成します。Create a header ページが表示されます。
- 以下の要領では、Create a header ページの各フィールドに入力します。
- Name フィールドに
Authorization
と入力します。 - Type メニューから Request を選択し、Action メニューから Set を選択します。
- Destination フィールドに
http.Authorization
と入力します。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
20
と入力します。
- Name フィールドに
- Source フィールドに、コマンドラインツールで生成した 認可トークンを引用符で囲んで入力します。例えば、生成されたトークンが
DEC0DEC0C0A
であれば、Source フィールドは"DEC0DEC0C0A"
になります。 - Create ボタンをクリックします。Content ページに新規認可ヘッダーが表示されます。
- Activate ボタンをクリックして設定変更をデプロイします。
または、2つ目の方法として、Authorization
クエリパラメータを渡す方法があります。
-
Create header ボタンを再度クリックし、別の新しいヘッダーを作成します。Create a header ページが表示されます。
- 以下の要領では、Create a header ページの各フィールドに入力します。
- Name フィールドに
Authorization
と入力します。 - Type メニューから Request を選択し、Action メニューから Set を選択します。
- Destination フィールドに
url
と入力します。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
20
と入力します。
- Name フィールドに
-
Source 欄には、ヘッダー認証情報を次の形式で入力します。
1
querystring.set(req.url, "Authorization", "<Authorization Token>")
上記の例に倣えば以下のようになります。
1
querystring.set(req.url, "Authorization", "DEC0DEC0C0A")
- Create ボタンをクリックします。Content ページに新規認可ヘッダーが表示されます。
- Activate ボタンをクリックして設定変更をデプロイします。