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 ウィンドウの各フィールドに入力します。
    • Bucket Name フィールドにバケットの名前を入力します。入力した名前を忘れないようにしてください。バケットを Fastly サービスに接続する際にこの名前が必要になります。
    • Region メニューから、コンテンツを保存するロケーションを選択します。通常、オリジンシールドに指定した POP に近いリージョンが選択されます。
    • Storage Class のオプションから Standard を選択します。
    • Access Control List (ACL) のオプションから Public Read を選択します。
    • 必要に応じて Server-side EncryptionScheduled Backup など、その他のオプションを選択します。
  4. OK ボタンをクリックします。

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

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

Alibaba Object Storage Service の新規バケットのウィンドウ

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

OSS をオリジンとして Fastly を設定する

OSS バケットをオリジンとして追加するにはオリジンへの接続に関する手順に従ってください。オリジンサーバーについての具体的な情報を追加します。

  1. Origins ページで Create Host をクリックし、<BUCKET>.<REGION>.aliyuncs.com 形式を使用してホストの適切なアドレスを入力します。例えばバケット名が test123 で、リージョンが北京の場合 (例: oss-cn-beijing)、ホスト名は test123.oss-cn-beijing.aliyuncs.com となります。ホスト名は Bucket Overview ページの Bucket Domain Name のセクションで確認することもできます。
  2. 新たに作成したホストをクリックして編集します。
  3. Name フィールドにサービスの分かりやすい名前を入力します (例: Alibaba Object Storage)。
  4. Address フィールドに最初のステップで入力した <BUCKET>.<REGION>.aliyuncs.com 形式のホスト名が無い場合はここで入力します。
  5. 以下の要領で Transport Layer Security (TLS) セクションの各フィールドに入力します。
    • 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 のバケット設定の Access Control List (ACL) のセクションで 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 をコピーします。これらは後で認証ヘッダーを作成する際に必要になります。
  8. Bucket Overview のページに戻り、Files タブをクリックし、Authorize ボタンをクリックすると、アクセスが許可されているユーザーのリストが表示されます。新しいバケットの場合、リストは空になります。
  9. Authorize ボタンをクリックし、以下の要領で各フィールドに入力します。
    • Applied To メニューから Whole Bucket を選択します。Specified Resources を選択することもできますが、その場合、新しいファイルでアクセス許可を更新しないと、後で予期しないエラーが発生する可能性があります。
    • Accounts メニューから RAM Users を選択し、新しく作成した RAM ユーザーをメニューで選択します。
    • Authorized Operation メニューから Read Only を選択します。
    • Condition は空白のままにしておくか、IP =Fastly の IP アドレス範囲を入力、または Access MethodHTTPS に設定してカスタマイズできます。

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

OSS のプライベートコンテンツを Fastly で使用するには、Date ヘッダー (認証署名で使用するため) と Host ヘッダーの2つのヘッダーを作成する必要があります。また、認証パラメーターをいくつか追加する必要があります。

Date ヘッダーの作成

  1. Fastly コントロールパネルにログインします。
  2. All services ページから、該当するサービスを選択します。検索ボックスを使用して 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 ページに新しい Authorization ヘッダーが表示されます。
  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);
This article describes an integration with a service provided by a third party. See our note on integrations for details.
Back to Top