Backblaze B2 Cloud Storage

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

ヒント

Backblaze には、Backblaze B2 Cloud Storage をオリジンとして使用する場合に、Fastly へのエグレスコストを排除する統合ディスカウントがあります。さらに Backblaze は、他のクラウドプロバイダーから Backblaze への切り替えに伴うデータ転送コストの多くを相殺する移行プログラムも用意しています。移行の際のダウンタイムが最小限に抑えられるようにするには、サポートチームまでご連絡ください

設定前の注意点

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 のガイドで詳しく解説されています。

  1. Backblaze アカウントにログインします。Backblaze アカウントの設定ページが表示されます。

  2. Buckets をクリックします。

  3. Create a Bucket をクリックします。

    Backblaze B2 New Bucket 設定画面

  4. Bucket Unique Name フィールドに、固有のバケット名を入力します。各バケット名は6文字以上の英数字である必要があります。区切り文字として使用できるのはハイフン (-) のみです。スペースは使用できません。

  5. Create a Bucket をクリックします。B2 Cloud Storage Buckets ページのバケット一覧に新規作成したバケットが表示されます。

  6. 先ほど作成した新しいバケットにファイルをアップロードします。

注意

2020年5月4日以前に作成されたバケットは、S3 Compatible API に対応していません。S3 Compatible に対応可能なバケットがない場合、Backblaze にて新規バケットを作成することをおすすめします。

新規バケットにファイルをアップロードする

データを格納するバケットを新規作成したら、次の手順に従って B2 コントロールパネル経由でファイルをアップロードします。

ヒント

コマンドラインツールを使用してバケットを作成する方法については、Backblaze のガイドで詳しく解説されています

  1. B2 コントロールパネルで Buckets をクリックします。 B2 Cloud Storage Buckets ページが表示されます。
  2. 先ほど作成したバケットの詳細を確認します。
  3. Upload/Download をクリックします。
  4. Upload をクリックします。
  5. ファイルを設定画面にドラッグアンドドロップするか、ファイル選択ツールをクリックし、アップロードするファイルを選択します。この段階でのファイルの名前と種類は重要ではありません。どのようなファイルでも問題ありません。アップロードが完了すると、そのバケットのファイル一覧にファイル名が表示されます。
  6. B2 と対話する Fastly サービスをセットアップするために、バケットにアサインされたホスト名を探します

バケットにアサインされたホスト名を探す

B2 と相互作用する Fastly サービスを設定するには、作成したバケットに割り当てられた、ファイルがアップロードされた Backblaze のホスト名を把握する必要があります

以下のいずれかの方法でホスト名を探します。

  • 標準の B2 Cloud Storage API を使用している場合は、B2 コントロールパネルを使用します。 先ほどアップロードしたファイルの名前をクリックし、表示される Details 設定画面の Friendly URL フィールドと Native URL フィールドを確認します。ホスト名は、各行で完全に一致する https:// 指定子の後の文字列です。

    Backblaze B2 ダウンロードホスト

  • コマンドラインと B2 Cloud Storage API を使用します。 コマンドラインで b2 get-account-info コマンドを実行し、downloadUrl 属性のホスト名を使用します。

  • S3 Compatible API を使用している場合は、B2 コントロールパネルを使用します。 Buckets をクリックし、先ほど作成したバケットの詳細を確認します。ホスト名は、Endpoint フィールドにテキスト表示されています。

    Backblaze B2 S3 エンドポイント

プライベートバケットの Backblaze アプリケーションを作成する

Backblaze マスターアプリケーションキーは、Backblaze アカウント上のすべてのバケットとファイルへのアクセスを制御します。Fastly では、Backblaze B2 のプライベートバケットを使用する場合は、バケットに固有のアプリケーションキーを作成する必要があります。

注意

アプリケーションキーの詳細については、Backblaze のドキュメントを参照してください。可能な限り少ない権限を使用してプライベートバケットのアプリケーションキーを作成することを推奨します。オプションでは、一定の秒数経過後にキーが失効するように設定することもできます (最長1,000日または86,400,000秒)。ただし、有効期限を設定した場合は、定期的に新しいアプリケーションキーを作成し、その都度 Fastly の設定を更新する必要があります。

コントロールパネルによる作成

B2 のコントロールパネルでアプリケーションキーを作成するには、以下の手順を実行します。

  1. App Keys をクリックします。

  2. Add a New Application Key をクリックします。

    Backblaze B2 の新しいアプリケーションキー

  3. 以下の要領で、Add Application Key の各フィールドに入力します:

    • Name of Key フィールドに、プライベートバケットキー名を入力します。キー名は英数字、区切り文字として使用できるのはハイフン (-) のみです。スペースは使用できません。
    • Allow access to Bucket(s) メニューから、プライベートバケット名を選択します。
    • Type of Access オプションから Read Only を選択します。
    • 他のオプション項目とフィールドは空白のままにしておきます。
  4. Create New Key をクリックします。

    Backblaze B2 の作成されたアプリケーションキー

  5. 成功メッセージの keyIDapplicationKey をすみやかに控えてください。この情報は、プライベートオブジェクトにヘッダーベースの認証を実装する際に使用します。

コマンドラインを使用した作成方法

コマンドラインからアプリケーションキーを作成するには、以下のように create-key コマンドを実行します。

$ b2 create-key --bucket <bucketName> <keyName> shareFiles,listBuckets

ここでは、<bucketName> <keyName> は作成したバケットとキーの名前を表します。例:

$ b2 create-key --bucket this-is-an-example-bucket Fastly-Private-Bucket-Key shareFiles,listBuckets

keyIDapplicationKey の2値が返されます。

注意

2020年5月4日以前に作成されたアプリケーションキーは、S3 Compatible API に対応していません。

新しいサービスの作成

Fastly サービスを新規作成するには、まず新規ドメインを作成した後に新規ホストを作成し、B2 のトラフィックを受け入れるように編集する必要があります。その手順については、新しいサービスの作成に関するガイドに記載されています。これらの手順を完了する際、以下の点にご注意ください。

  1. ホストを新規作成する際、Origins ページの Hosts フィールドに B2 バケットのホスト名を入力します。
  2. Edit this host ページでは、ホスト情報を編集する際、ホストのトランスポートレイヤーセキュリティ (TLS) セクションの情報を確認してください。具体的には、以下の点を確認します:
    • Fastly とオリジン間の接続が確立されている。
    • Certificate hostname フィールドにバケットのホスト名が入力されている。
    • SNI のホスト名を Certificate のホスト名と一致させるチェックボックスが選択されている (SNI のホスト名フィールドの下に表示されます)。
  3. (オプション) また、Host を編集する場合、Shielding メニューから適切なオリジンシールドの場所を選択し、オリジンシールドを有効にできます。つまり、B2 Cloud Storage を使用する際、最も適切な Backblaze のデータセンターに最も近いオリジンシールドの場所を選択する必要があります。最寄りのデータセンターが
    • カリフォルニア州サクラメント (米国西部地域) であれば、Shieldingメニューから San Jose (SJC) を選択します。
    • アリゾナ州フェニックス (米国西部地域) であれば、Shieldingメニューから Palo Alto (PAO) を選択します。
    • オランダのアムステルダム (EU 中部地域) であれば、オリジンシールドメニューから Amsterdam (AMS) を選択します。
  4. オーバーライドするホストを指定するかどうかを判断する:
    • S3 Compatible API を使用する場合は、オーバーライドホストを指定せずにこの手順をスキップしてください。
    • S3 Compatible API を使用しない場合は、Advanced options の Override host フィールドに Host の適切なアドレスを入力します (例: s3-uswest-000.backblazeb2.comf000.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 であることを表しています。

  1. 作成したOriginでは、Override host フィールドを <bucket>.s3.<region>.backblazeb2.com に設定します (例: testing.s3.uswest-000.backblazeb2.com)。

  2. VCL スニペットを作成します。スニペットを作成する際に、within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を選択します。次に、VCL フィールドに以下のコードを入力します。必ず、お客様の B2 バケットに割り当てられた値に変更してください。ここでは、var.b2Bucket"testing" となり、var.b2Region"uswest-000" となります。

    1
    2
    3
    4
    5
    6
    7
    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
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 にバケット名が含まれていることを確認する必要があります。これは、以下のようにHeader オブジェクトを使用して行うことができます。

  1. Create header を再度クリックし、別の新しいヘッダーを作成します。

    ヘッダーページで Authorization ヘッダーを作成する

  2. 以下の要領で、Create a header ページの各フィールドに入力します。

    • Name フィールドに Rewrite B2 URL と入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに url と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 20 を入力します。
  3. Source フィールドに "/file/<Bucket Name>" req.url と入力します。

  4. Create をクリックします。Content ページに新しい Authorization ヘッダーが表示されます。

  5. Activate をクリックして設定への変更をデプロイします。

また、VCL スニペットを作成します。スニペットを作成する際に、within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を選択します。次に、VCL フィールドに以下のコードを入力します。変数は必ず、お客様の B2 バケット名に変更してください。

1
2
3
4
5
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;
}

プライベートオブジェクト

  1. Fastly で Backblaze の B2 プライベートバケットを使用するには、Authorization Token が必要です。これは、コマンドラインを使用して入手する必要があります。

  2. そのためには、取得したアプリケーションキーでコマンドラインツールを認証する必要があります。

    $ b2 authorize-account <keyID> <applicationKey>
  3. ここで、プライベートバケットの認可トークンを取得する必要があります。

    $ b2 get-download-auth <bucket>

    例:

    $ b2 get-download-auth testing

    これにより、デフォルトである86400秒 (つまり1日) 有効なトークンが作成されます。オプションで、有効期間を1秒から604,800秒 (つまり1週間) の間で自由に変更することができます。

    $ b2 get-download-auth --duration 604800 testing

    生成されたトークンを控えておきます。

注意

有効期限が切れる前に認可トークンを再生成し、Fastly の設定を更新する必要があります。これを行うには、Fastlyのバージョンレスディクショナリの使用をお勧めします

生成されたトークンを Backblaze に渡す

生成されたトークンを Backblaze に渡す方法は2つあります。1つ目は、Authorization ヘッダーを使用する方法です。こちらの方法をおすすめします。

  1. Create header を再度クリックし、別の新しいヘッダーを作成します。

    ヘッダーページで Authorization ヘッダーを作成する

  2. 以下の要領で、Create a header ページの各フィールドに入力します。

    • Name フィールドに Authorization と入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに http.Authorization と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 20 を入力します。
  3. Source フィールドに、コマンドラインツールで生成した Authorization Tokenを引用符で囲んで入力します。例えば、生成されたトークンが DEC0DEC0C0A であれば、Source フィールドは "DEC0DEC0C0A" になります。

  4. Create をクリックします。Content ページに新しい Authorization ヘッダーが表示されます。

  5. Activate をクリックして設定への変更をデプロイします。

または、2つ目の方法として、Authorization クエリパラメータを渡す方法があります。

  1. Create header を再度クリックし、別の新しいヘッダーを作成します。

    ヘッダーページで Authorization ヘッダーを作成する

  2. 以下の要領で、Create a header ページの各フィールドに入力します。

    • Name フィールドに Authorization と入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに url と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 20 を入力します。
  3. Source 欄には、ヘッダー認証情報を次の形式で入力します。

    querystring.set(req.url, "Authorization", "<Authorization Token>")

    上記の例に倣えば以下のようになります。

    querystring.set(req.url, "Authorization", "DEC0DEC0C0A")
  4. Create をクリックします。Content ページに新しい Authorization ヘッダーが表示されます。

  5. Activate をクリックして設定への変更をデプロイします。
注意

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


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

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