Backblaze の B2 Cloud Storage

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

設定前の注意点

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 コントロールパネルで新規バケットを作成します。

  1. Backblaze アカウントにログインします。Backblaze アカウントの設定ページが表示されます。
  2. Buckets リンクをクリックします。B2 Cloud Storage Buckets ページが表示されます。
  3. Create a Bucket リンクをクリックします。Create a Bucket 設定画面が表示されます。

    Backblaze B2 New Bucket 設定画面

  4. Bucket Unique Name フィールドに、一意なバケット名を入力します。各バケット名は6文字以上の英数字である必要があります。区切り文字として使用できるのはハイフン (-) のみです。スペースは使用できません。
  5. Create a Bucket ボタンをクリックします。B2 Cloud Storage Buckets ページのバケット一覧に新規作成したバケットが表示されます。
  6. 先ほど作成した新しいバケットにファイルをアップロードします。

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

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

  1. B2 コントロールパネルの Buckets リンクをクリックします。B2 Cloud Storage Buckets ページが表示されます。
  2. 先ほど作成したバケットの詳細を確認します。
  3. Upload/Download ボタンをクリックします。Browse Files ページが表示されます。
  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 のプライベートバケットを使用する場合は、バケットに固有のアプリケーションキーを作成する必要があります。

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

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

  1. App Keys リンクをクリックします。Application Keys ページが表示されます。
  2. Add a New Application Key ボタンをクリックします。Add 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 コマンドを実行します。

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

keyIDapplicationKey の2値が返されます。

新規サービスを作成する

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

  1. ホストを新規作成する際、Origins ページの Hosts フィールドに B2 バケットのホスト名を入力します。
  2. Edit this hostページでは、ホスト情報を編集する際、ホストのトランスポートレイヤーセキュリティ (TLS) セクションの情報を確認してください。具体的には、以下の点を確認します:
    • Fastly とオリジン間の接続が確立されている。
    • Certificate hostname フィールドにバケットのホスト名が入力されている。
    • SNI のホスト名を Certificate のホスト名と一致させるチェックボックスが選択されている (SNI のホスト名フィールドの下に表示されます)。
  3. また、ホストを編集する際、オプションでオリジンシールドメニューから適切なオリジンシールドの場所を選択し、オリジンシールドを有効にできます。つまり、B2 Cloud Storage を使用する際、最も適切な Backblaze のデータセンターに最も近いオリジンシールドの場所を選択する必要があります。最寄りのデータセンターが
    • カリフォルニア州サクラメント (米国西部地域) であれば、オリジンシールド メニューから San Jose (SJC) を選択します。
    • アリゾナ州フェニックス (米国西部地域) であれば、オリジンシールドメニューから 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. 作成したオリジンでは、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
    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 オブジェクトを使用する方法
    1. Create header ボタンを再度クリックし、別の新しいヘッダーを作成します。Create a 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 ページに新しい Date ヘッダーが表示されます。
    5. 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;
     }
    

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

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

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

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

    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
    

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

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

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

  1. Create header ボタンを再度クリックし、別の新しいヘッダーを作成します。Create a header ページが表示されます。

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

  2. 以下の要領では、Create a header ページの各フィールドに入力します。
    • Name フィールドに Authorization と入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに http.Authorization と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 20 と入力します。
  3. Source フィールドに、コマンドラインツールで生成した 認可トークンを引用符で囲んで入力します。例えば、生成されたトークンが DEC0DEC0C0A であれば、Source フィールドは "DEC0DEC0C0A" になります。
  4. Create ボタンをクリックします。Content ページに新規認可ヘッダーが表示されます。
  5. Activate ボタンをクリックして設定変更をデプロイします。

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

  1. Create header ボタンを再度クリックし、別の新しいヘッダーを作成します。Create a header ページが表示されます。

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

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

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

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

    1
    
    querystring.set(req.url, "Authorization", "DEC0DEC0C0A")
    
  4. Create ボタンをクリックします。Content ページに新規認可ヘッダーが表示されます。
  5. Activate ボタンをクリックして設定変更をデプロイします。
This article describes an integration with a service provided by a third party. See our note on integrations for details.
Back to Top