Alibaba Object Storage Service

パブリックコンテンツとプライベートコンテンツの両方で、Alibaba Object Storage Service (OSS) を Fastly のオリジン/オリジンサーバとして使用することができます。

OSS をオリジン/オリジンサーバーとして使用する

OSS をオリジンとして使用するには、以下の手順に従ってください。

OSS アカウントのセットアップと設定

  1. Alibaba Object Storage Service に登録します。
  2. オリジンのデータを保存するバケットを作成します。Create Bucket ウィンドウが表示されます。

    Alibaba Object Storage Service の新規バケットの設定画面

  3. 以下の要領では、 Create Bucket 設定画面の各フィールドに入力します。
    • バケット名フィールドに、バケットの名前を入力します。入力した名前を忘れないでください。入力した名前は、Fastly サービスに接続するために必要となります。
    • Regionメニューから、ロケーションを選択して接続を保存します。ほとんどのお客様は、POP に近い地域を選択して、オリジンシールドに指定します。
    • Storage Class のオプションから Standard を選択します。
    • アクセス制御リスト のオプションから Public Read を選択します。
    • 必要に応じて Server-side EncryptionScheduled Backup など、その他のオプションを選択します。
  4. OK ボタンをクリックします。

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

バケットを作成したらそのバケットを選択し、Files タブに移動して Upload ボタンをクリックし、ファイルを追加します。

Alibaba Object Storage Service の新規バケットの設定画面

バケットの Public Read オプションを選択してファイルを外部からアクセス可能にするか、または Inherited from Bucket オプションを使用します。

OSS をオリジンとして使用するように Fastly を構成する

OSS バケットを GCS バケットをオリジンサーバーとして追加するには、ホストと連携する手順に従ってください。オリジンサーバーについての具体的な情報を追加します。

  1. Origins ページで Create Host をクリックし、 形式を使用してホストの適切なアドレスを入力します<BUCKET>.<REGION>.aliyuncs.com。例えば、バケット名が test123 では、地域が北京 (例: oss-cn-beijing) である場合、ホスト名は test123.oss-cn-beijing.aliyuncs.com になります。また、バケットドメイン名エリアのバケット概要ページでホスト名を確認することもできます。
  2. 新たに作成したホストをクリックして編集します。
  3. Name フィールドにサービスの分かりやすい名前を入力します (例: Alibaba Object Storage)。
  4. Address フィールドに最初のステップで入力した形式の<BUCKET>.<REGION>.aliyuncs.comホスト名が無い場合はここで入力します。
  5. 以下の要領で トランスポートレイヤーセキュリティ セクションの各フィールドに入力します。
    • Enable TLS? をデフォルト設定の Yes のままにし、Fastly とオリジン間の接続を保護します。
    • Verify certificate? をデフォルト設定の Yes のままにしておきます。
    • Certificate hostname フィールドに、Address フィールドに表示されるアドレスを入力します (例: test123.oss-cn-beijing.aliyuncs.com)。
    • SNI hostname フィールドでは、Match the SNI hostname to the Certificate hostname のチェックボックスを選択します。ホスト作成時に入力したホスト名のアドレスが表示されます。
  6. TLS セクションの下にある Shielding メニューのシールドロケーションのリストでは、Alibaba のリージョンに近い Fastly POP を選択します。
  7. Advanced options の Override host フィールドに、ホストの適切なアドレスを入力します (例: test123.oss-cn-beijing.aliyuncs.com)。この情報はホスト作成時に入力されたものです。

オリジンシールドの注意点を確認し、それに従ってシールド POP を選択してください。

プライベートオブジェクトで OSS を使用する

OSS のプライベートオブジェクトを Fastly で使用するには、Fastly が正しい OSS バケットに向けられ、Fastly が OSS データにアクセスできるように設定されていることを確認してから、以下の手順に従ってください。

プライベートバケットとサブユーザーの設定

プライベートバケットの設定は、パブリックバケットの設定と同じですが、OSS のバケット設定のアクセス制御リストのセクションで Private を選択する点が異なります。

AccessKey IDAccess Key Secret が必要になります。これらは、Alibaba Cloud Console の右上にあるアバターをクリックし、Access Key を選択して新しいキーを作成することで、ご自身のアカウントにリンクさせることができます。このキーはアカウントへの完全なアクセス権を持つため、Alibaba の手順に従ってサブユーザーを作成することをお勧めします。以下の手順に従ってください。

  1. Resource Access Management (RAM) ページに移動します。
  2. Users タブをクリックします。
  3. Create User をクリックします。
  4. 適切な Logon NameDisplay Name を入力します。
  5. Programmatic Access のチェックボックスを選択し、Alibaba API によるアクセスを有効にします。

    Alibaba Cloud のユーザー作成画面

  6. OK ボタンをクリックします。
  7. AccessKeyIDAccessKeySecret をコピーします。Authorization ヘッダーを作成する際には、これらが後ほど必要になります。
  8. バケットの概要に戻り、ファイル タブをクリックし、認証 ボタンをクリックします。認証ユーザーのリストが表示されます。これが新しいバケットである場合、空の状態が表示されるはずです。
  9. Authorize ボタンをクリックし、以下の要領で各フィールドに入力します。
    • Applied To メニューから Whole Bucket を選択します。Specified Resources を選択することもできますが、その場合、新しいファイルでアクセス許可を更新しないと、後で予期しないエラーが発生する可能性があります。
    • Accounts メニューから RAM Users を選択し、新しく作成した RAM ユーザーをメニューで選択します。
    • Authorized Operation メニューから Read Only を選択します。
    • Condition は空白のままにしておくか、IP =Fastly の IP アドレス範囲を入力、または Access MethodHTTPS に設定してカスタマイズできます。

OSS のプライベートコンテンツを使用するための Fastly のセットアップ

Fastly では、OSS プライベートコンテンツを使用するには、次の2つのヘッダーを作成する必要があります: 日付ヘッダー(認可シグネチャに必要)および Host ヘッダー。また、認可パラメータを追加する必要があります。

Date ヘッダーの作成

  1. Fastly コントロールパネルにログインします。
  2. Home ページから、適切なサービスを選択します。検索ボックスで ID、名称、ドメインでの検索が行えます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. Content をクリックします。Content ページが表示されます。
  5. Create header ボタンをクリックします。Create a new header ページが表示されます。

    新規ヘッダーページでは、Date ヘッダーを作成する

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

Host ヘッダーの作成

  1. Create header ボタンをクリックします。Create a new header ページが表示されます。
  2. 以下の要領では、Create a new header ページの各フィールドに入力します。
    • Name フィールドに Date と入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに http.Host と入力します。
    • Source フィールドに "<your OSS domain>" と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 19 を入力します。
  3. Create ボタンをクリックします。Content ページに新しい Host ヘッダーが表示されます。

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 フィールドに、以下の形式で Authorization ヘッダーの情報を入力します。

    1
    
    req.url.path "?" "OSSAccessKeyId=<AccessKeyId>" "&" "Signature=" digest.hmac_sha1_base64("<AccessKeySecret>", if(req.method == "HEAD", "GET", req.method) LF LF LF req.http.Date LF "/<OSS bucket name>" req.url.path) "&" "Expires=" var.ali_expires
    

    <AccessKeyId><AccessKeySecret><OSS bucket name> を先ほど収集した情報に置き換えます。例:

    1
    
    req.url.path "?" "OSSAccessKeyId=AOSSdecafbad" "&" "Signature=" urlencode(digest.hmac_sha1_base64("AOSSdeadbeef", if(req.method == "HEAD", "GET", req.method) LF LF LF req.http.Date LF "/test123" req.url.path)) "&" "Expires=" var.ali_expires
    
  4. Create ボタンをクリックします。Content ページに新規認可ヘッダーが表示されます。
  5. Activate ボタンをクリックして設定変更をデプロイします。

OSS のプライベートコンテンツを使用するために VCL スニペットで Fastly のセットアップ

VCL スニペットでこの設定を行い、優先順位を 20 に設定します。

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
declare local var.ali_bucket STRING;
declare local var.ali_region STRING;
declare local var.ali_access_key_id STRING;
declare local var.ali_access_key_secret STRING;
declare local var.ali_expires INTEGER;
declare local var.ali_canon STRING;
declare local var.ali_sig STRING;_

set var.ali_bucket = "test123";
set var.ali_region = "oss-cn-beijing";
set var.ali_access_key_id = "decafbad";
set var.ali_access_key_secret = "deadbeef";
set var.ali_expires  = std.atoi(now.sec);
set var.ali_expires += 60;


set req.http.Host = var.ali_bucket "." + var.ali_region + ".aliyuncs.com";
set req.http.Date = var.ali_expires;
set var.ali_canon = if(req.method == "HEAD", "GET", req.method) LF LF LF
                    req.http.Date LF "/" var.ali_bucket req.url.path;
set var.ali_sig   = digest.hmac_sha1_base64(var.alibaba_access_key_secret, var.ali_canon);

set req.url       = req.url.path;
set req.url       = querystring.set(req.url, "OSSAccessKeyId", var.alibaba_access_key_id);
set req.url       = querystring.set(req.url, "Signature",  var.ali_sig);
set req.url       = querystring.set(req.url, "Expires",  var.ali_expires);
この記事では、サードパーティが提供するサービスとの統合について説明します。詳細については、統合に関する注意事項をご参照ください。
Back to Top