Microsoft Azure Blob Storage

Microsoft Azure Blob Storage のパブリックコンテナとプライベートコンテナを Fastly でオリジンとして使用できます。

Azure Blob Storage をオリジンとして使用する

Azure Blob Storage をオリジンとして使用する場合、Azure Storage サービスの最新バージョンのご利用を推奨します。古いすぎるバージョンや、リクエストヘッダーで指定されていないバージョンを使用すると、互換性の問題が発生する可能性があります。ヘッダーに指定されないバージョンの使用を強制する場合、Blob Storage サービスにて DefaultServiceVersion を設定します。

または、VCL スニペットを vcl_missvcl_pass に配置して、バージョンを設定または強制することもできます。例えばバージョンが 2020-06-12 の場合、VCL スニペットは次のようになります。

1
2
3
{{if (req.backend.is_origin) { }}
{{ set bereq.http.x-ms-version = "2020-06-12"; }}
}

Azure Blob Storage のストアを Fastly で利用できるように設定した後、以下の手順に従ってください。

新しいサービスの作成

新規サービスを作成する手順に従ってください。Create a new service フィールドに、オリジンサーバーに関する具体的な情報を入力します。

  • Name フィールドに分かりやすいサービスの名前を入力します。
  • Domain フィールドに、URL として使用するホスト名を入力します (例: cdn.example.com)。
  • Address フィールドに <storage account name>.blob.core.windows.net と入力します。
  • Transport Layer Security (TLS) のセクションで、Enable TLS? をデフォルト設定の Yes のままにし、Fastly とオリジン間の接続を保護します。
  • Transport Layer Security (TLS) のセクションで、Certificate hostname フィールドに <storage account name>.blob.core.windows.net と入力します。

デフォルトのホストと適切なパスを設定する

新しいサービスが作成されたら、デフォルトのホストを azure に設定し、以下の手順でコンテナのパスを URL に追加します。

  1. All services ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
  2. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  3. Settings をクリックします。Settings ページが表示されます。
  4. Override host スイッチをクリックします。Override host header フィールドが表示されます。

    オーバーライドホストヘッダーウィンドウの追加

  5. Azure Blob Storage アカウントのホスト名を入力します。例えば <storage account name>.blob.core.windows.net など。
  6. Save ボタンをクリックします。新しいオーバーライドホストヘッダーが Override host セクションに表示されます。
  7. Content をクリックします。Content ページが表示されます。
  8. Create header ボタンをクリックします。Create a header ページが表示されます。
  9. 以下の要領で Create a header ページの各フィールドに入力します。
    • Name フィールドに Modify URL と入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに url と入力します。
    • Source フィールドに "/<your container name>" req.url と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 10 と入力します。
  10. Create ボタンをクリックします。Content ページに新しい Modify URL ヘッダーが表示されます。
  11. Activate ボタンをクリックして設定変更をデプロイします。

結果をテストする

デフォルトでは yourdomain.global.prod.fastly.net という DNS マッピングが作成されます。上記の例では、cdn.example.com.global.prod.fastly.net となります。指定したドメイン名の DNS エイリアスを作成します (例: global-nossl.fastly.net に対する cdn.example.com の CNAME)。

Fastly は、明示的な Cache-Control ヘッダーのないコンテンツを1時間にわたってキャッシュします。キャッシュヘッダーを送信しているかどうかは、cURL コマンドを使用して確認することができます。以下に例を示します。

1
2
3
4
5
6
7
$ curl -I opscode-full-stack.blob.core.windows.net

HTTP/1.1 200 OK
Date: Fri, 04 May 2018 21:23:07 GMT
Content-Type: application/xml
Transfer-Encoding: chunked
Server: Blob Service Version 1.0 Microsoft-HTTPAPI/2.0

この例では Cache-Control ヘッダーが設定されていないため、デフォルトの TTL が適用されます。

Azure Blob Storage のプライベートコンテナを使用する

Azure Blob Storage のプライベートコンテナを Fastly で使用する場合には、次の指示に従ってください。

設定前の注意点

正しいコンテナを指定し、オリジンをポート443に設定することで、Azure Blob Storage コンテナが Fastly で利用可能になっていることを確認してください。これは認証の前に行う必要があります。

設定を完了するには、Azure Blob Storage 認証ヘッダーを構築するために、Azure Storage アカウントの共有キーとストレージアカウント名が必要になります。認証ヘッダーは以下のような形式になります。

1
Authorization: SharedKey `_Account name_`:`_Signature_`

最後に、Blob Storage コンテナ名も必要になりますのでご留意ください。

共有キーを使って Fastly が Azure Blob Storage のプライベートコンテナを使用するように設定する

共有キーを使用して Fastly で Azure Blob Storage のプライベートコンテナにアクセスするには、Microsoft の共有キーによる認証に関するページを参照してください。次に、Date ヘッダー (承認署名で使用するため) と Authorization ヘッダーの2つのヘッダーを作成します。

Date ヘッダーの作成

以下の手順で Date ヘッダーを作成します。

  1. Fastly コントロールパネルにログインします。
  2. All services ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. Content をクリックします。Content ページが表示されます。
  5. Create header ボタンをクリックします。Create a header ページが表示されます。

    ヘッダーページによる日付ヘッダーの作成

  6. 以下の要領で Create a header ページの各フィールドに入力します。
    • Name フィールドに Date と入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに http.Date と入力します。
    • Source フィールドに now と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 10 と入力します。
  7. Create ボタンをクリックします。Content ページに新しい Date ヘッダーが表示されます。これは後で Authorization ヘッダーの署名で使用します。

Authorization ヘッダーの作成

次に、以下の仕様で認証ヘッダーを作成します。

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

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

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

    1
    
    "SharedKey <Storage Account name>:" digest.hmac_sha256_base64(digest.base64_decode("<Azure Storage Account shared key>"), if(req.method == "HEAD", "GET", req.method) LF LF LF req.http.Date LF "/<Storage Account name>" req.url.path)
    

    <Storage Account name><Azure Storage Account shared key> は、先ほど収集した情報に置き換えます。以下に例を示します。

    1
    
    "SharedKey test123:" digest.hmac_sha256_base64(digest.base64_decode("UDJXUFN1NjhCZmw4OWo3MnZUK2JYWVpCN1NqbE93aFQ0d2hxdDI3"), if(req.method == "HEAD", "GET", req.method) LF LF LF req.http.Date LF "/test123" req.url.path)
    

    以下に、Source フィールドのパラメータについて詳しくご紹介します。

  4. Create ボタンをクリックします。新しい Authorization ヘッダーが Content ページに表示されます。
  5. Activate ボタンをクリックして設定変更をデプロイします。

Source フィールドのパラメーターの詳細

Authorization ヘッダーの Source フィールドを詳しく見てみましょう。基本的な形式は以下の通りです。

SharedKey<storage account name><Signature Function><key><message>

Source フィールドには以下の情報が含まれます。

要素 説明
SharedKey ストレージアカウント名の前に置かれる定数。これは常に SharedKey である必要があります。
storage account name Azure Storage アカウント名。この例では test123 を使用しています。
signature function 署名のキーとメッセージを検証するためのアルゴリズム。この例では digest.hmac_sha256_base64(<key>, <message>) を使用しています。
key Azure Storage の開発者アカウントで取得した Azure Storage アカウントの共有キー。この例では UDJXUFN1NjhCZmw4OWo3MnZUK2JYWVpCN1NqbE93aFQ0d2hxdDI3 を使用しています。このキーは Base64 でデコードされる必要があります。
message UTF-8 エンコードされた StringToSign。メッセージの各部分の内訳は以下の表をご覧ください。

Authorization ヘッダーの Source フィールドに含まれるメッセージは、以下のような基本的な形式になっています。

<HTTP-verb></n><Content-MD5>/n<Content-Type></n><Date></n><CanonicalizedAmzHeader></n><CanonicalizedResource>

Source フィールドには以下の情報が含まれます。

要素 説明
HTTP-verb REST 動詞。この例では req.method を使用しています。HEAD を GET に書き換えるのは、オリジンにリクエストを送る前に Varnish が内部的に行っているからです。
\n 改行表示の定数。この値は常に \n です。
Content-MD5 メッセージの整合性チェックとして使用される content-md5 ヘッダー値。空欄であることが多いです。この例では、LF (ラインフィード) を使用しています。
Content-Type MIME-type を指定するための Content-type ヘッダーの値。空欄であることが多いです。この例では LF を使用しています。
Date 日付と時間のタイムスタンプ。上記の手順で最初に別のヘッダーとして作成した req.http.Date を使用しています。
CanonicalizedHeaders Azure Blob Storage の実装をカスタマイズする x-ms ヘッダー。空欄であることが多いです。この例では LF を使用しています。
CanonicalizedResource Storage のアカウント名。この例では "/test123" を使用しています。

共有アクセス署名 (SAS) を使って Azure Blob Storage のプライベートコンテナを使用するように Fastly を設定する

サービス共有アクセス署名 (SAS) を利用して Fastly で Azure Blob Storage のプライベートコンテナにアクセスするには、Microsoft の共有アクセス署名を使用したアクセスの委任に関するページを参照してください。次に SAS を取得し、アクセス URL に署名します。

共有アクセス署名の取得

以下の手順で SAS を取得します。

  1. Azure ポータルで Storage アカウントに移動します。
  2. Settings メニューの Shared access signature に移動します。Shared access signature のメニューが表示されます。

    共有アクセス署名の作成

  3. Allowed servicesBlob を選択します。
  4. Allowed resource typesObject を選択します。
  5. Allowed permissionsRead を選択します。
  6. Start time は現在の日時のままにします。
  7. End time をお好きな日時に設定してください (下記の注意をご参照ください)。
  8. Allowed protocolsHTTPS only に設定します。
  9. Generate SAS and connection string ボタンをクリックします。生成された情報が表示されます。
  10. SAS token フィールドのコンテンツをコピーして保存します。SAS トークンは以下のようなものになります。

    1
    
    ?sv=2017-11-09&ss=b&srt=o&sp=r&se=2019-10-22T15:41:23Z&st=2018-10-22T07:41:23Z&spr=https&sig=decafbaddeadbeef
    

    共有アクセス署名パラメータの詳細については、以下で詳しく説明しています。

URL の署名

次に、以下の手順で認証ヘッダーを作成し、アクセス URL に署名します。

  1. Fastly コントロールパネルにログインします。
  2. All services ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. Content をクリックします。Content ページが表示されます。
  5. Create header ボタンをクリックします。Create a header ページが表示されます。

    ヘッダーページで URL を修正する

  6. 以下の要領で Create a header ページの各フィールドに入力します。
    • Name フィールドに Set Azure private SAS Authorization URL のような分かりやすい名前を入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに url と入力します。
    • Source フィールドに req.url.path {"<SAS TOKEN>"} と入力し、 {"<SAS TOKEN>"} を Azure ポータルから取得したトークンに置き換えます。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 10 と入力します。
  7. Create ボタンをクリックします。Content ページに新しいヘッダーが表示されます。
  8. Activate ボタンをクリックして設定変更をデプロイします。

共有アクセス署名パラメータの詳細

Microsoft のサービス SAS の作成に関するページでは、共有アクセス署名の詳細とその構築方法について説明しています。

要素 説明
sv signedversion フィールド。これは必須であり、Azure ポータルが提供したものでなければなりません。
ss signedservice フィールド。これは必須であり、「blob storage」の b でなければなりません。
srt signedresourcetype フィールド。これは必須であり、「object」の o でなければなりません。
sp signedpermissions フィールド。これは必須であり、「read only」の rでなければなりません。
st signedstart フィールド。これはオプションで、共有アクセス署名が有効になる時刻を ISO 8601 と互換性のある UTC 形式で指定します。時刻が入力されない場合、このコールの開始時刻はストレージサービスがリクエストを受信した時刻と想定されます。
se signedexpiry フィールド。これは必須であり、共有アクセス署名が無効になる時刻を ISO 8601 と互換性のある UTC 形式で指定します。
spr signedprotocol フィールド。これはオプションで、コンテナがアクセスに使用する HTTP プロトコル (http または https) を指定します。httpsFastly では を推奨します。
sig signature フィールド。これは必須であり、Azure ポータルが提供したものでなければなりません。

パフォーマンスを向上させる TCP 接続の設定

Fastly のデフォルト設定では、パフォーマンス向上のため、オリジンに対して確立された TCP 接続を開いたままにします。しかし Azure では、アイドル状態の接続は切断されるようにデフォルトで設定されています。つまり、デフォルトで設定されているフローのアイドルタイムアウト時間の4分が経過すると、Azure ロードバランサーによってフローが停止されます。統合が正常に機能するよう、以下のいずれかの方法で Azure をチューニングすることを推奨します。

This article describes an integration with a service provided by a third party. See our note on integrations for details.
Back to Top