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 Download Host

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

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

    Backblaze B2 S3 Endpoint

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

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

コントロールパネルを使用した作成方法

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

  1. App Keys リンクをクリックします。Application Keys ページが表示されます。
  2. Add a New Application Key ボタンをクリックします。Add Application Key ウィンドウが表示されます。

    Backblaze B2 New Application Key

  3. 以下の要領で Add Application Key の各フィールドに入力します。
    • Name of Key フィールドに、プライベートバケットキー名を入力します。キー名は英数字、区切り文字として使用できるのはハイフン (-) のみです。スペースは使用できません。
    • Allow access to Bucket(s) メニューから、プライベートバケット名を選択します。
    • Type of Access オプション から Read Only を選択します。
    • 他のオプション項目とフィールドは空白のままにしておきます。
  4. Create New Key ボタンをクリックします。成功メッセージと新しいアプリケーションキーが表示されます。

    Backblaze B2 Created Application Key

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

      Header ページで認証ヘッダーを作成

    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
    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 ページが表示されます。

    Header ページで認証ヘッダーを作成

  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 ボタンを再度クリックし、別の新しいヘッダーを作成します。Create a header ページが表示されます。

    Header ページで認証ヘッダーを作成

  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 ページに新しい Authorization ヘッダーが表示されます。
  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