Alibaba Object Storage Service
最終更新日 2020-11-09
パブリックコンテンツとプライベートコンテンツの両方で、Alibaba Object Storage Service (OSS) を Fastly のオリジンとして使用できます。
OSS をオリジンとして使用する
OSS をオリジンとして使用するには、以下の手順に従ってください。
OSS アカウントのセットアップと設定
- Alibaba Object Storage Service に登録します。
-
オリジンのデータを保存するバケットを作成します。Create Bucket ウィンドウが表示されます。
- 以下の要領で Create Bucket ウィンドウの各フィールドに入力します。
- Bucket Name フィールドにバケットの名前を入力します。入力した名前を忘れないようにしてください。バケットを Fastly サービスに接続する際にこの名前が必要になります。
- Region メニューから、コンテンツを保存するロケーションを選択します。通常、オリジンシールドに指定した POP に近いリージョンが選択されます。
- Storage Class のオプションから Standard を選択します。
- Access Control List (ACL) のオプションから Public Read を選択します。
- 必要に応じて Server-side Encryption や Scheduled Backup など、その他のオプションを選択します。
- OK ボタンをクリックします。
バケットにファイルをアップロードする
バケットを作成したらそのバケットを選択し、Files タブに移動して Upload ボタンをクリックし、ファイルを追加します。
バケットの Public Read オプションを選択してファイルを外部からアクセス可能にするか、または Inherited from Bucket オプションを使用します。
OSS をオリジンとして Fastly を設定する
OSS バケットをオリジンとして追加するにはオリジンへの接続に関する手順に従ってください。オリジンサーバーについての具体的な情報を追加します。
- Origins ページで Create Host をクリックし、
<BUCKET>.<REGION>.aliyuncs.com
形式を使用してホストの適切なアドレスを入力します。例えばバケット名がtest123
で、リージョンが北京の場合 (例:oss-cn-beijing
)、ホスト名はtest123.oss-cn-beijing.aliyuncs.com
となります。ホスト名は Bucket Overview ページの Bucket Domain Name のセクションで確認することもできます。 - 新たに作成したホストをクリックして編集します。
- Name フィールドにサービスの分かりやすい名前を入力します (例:
Alibaba Object Storage
)。 - Address フィールドに最初のステップで入力した
<BUCKET>.<REGION>.aliyuncs.com
形式のホスト名が無い場合はここで入力します。 - 以下の要領で 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 のチェックボックスを選択します。ホスト作成時に入力したホスト名のアドレスが表示されます。
- TLS セクションの下にある Shielding メニューのシールドロケーションのリストで Alibaba のリージョンに近い Fastly POP を選択します。
- 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 ID と Access Key Secret が必要になります。これらは Alibaba Cloud Console の右上にあるアバターをクリックし、Access Key を選択して新しいキーを作成することで、ご自身のアカウントにリンクさせることができます。このキーはアカウントへの完全なアクセス権を持つため、Alibaba の手順に従ってサブユーザーを作成することをお勧めします。以下の手順に従ってください。
- Resource Access Management (RAM) ページに移動します。
- Users タブをクリックします。
- Create User をクリックします。
- 適切な Logon Name と Display Name を入力します。
-
Programmatic Access のチェックボックスを選択し、Alibaba API によるアクセスを有効にします。
- OK ボタンをクリックします。
- AccessKeyId と AccessKeySecret をコピーします。これらは後で認証ヘッダーを作成する際に必要になります。
- Bucket Overview のページに戻り、Files タブをクリックし、Authorize ボタンをクリックすると、アクセスが許可されているユーザーのリストが表示されます。新しいバケットの場合、リストは空になります。
- Authorize ボタンをクリックし、以下の要領で各フィールドに入力します。
- Applied To メニューから Whole Bucket を選択します。Specified Resources を選択することもできますが、その場合、新しいファイルでアクセス許可を更新しないと、後で予期しないエラーが発生する可能性があります。
- Accounts メニューから RAM Users を選択し、新しく作成した RAM ユーザーをメニューで選択します。
- Authorized Operation メニューから Read Only を選択します。
- Condition は空白のままにしておくか、IP = に Fastly の IP アドレス範囲を入力、または Access Method を HTTPS に設定してカスタマイズできます。
OSS のプライベートコンテンツを使用するための Fastly の設定
OSS のプライベートコンテンツを Fastly で使用するには、Date ヘッダー (認証署名で使用するため) と Host ヘッダーの2つのヘッダーを作成する必要があります。また、認証パラメーターをいくつか追加する必要があります。
Date ヘッダーの作成
- Fastly コントロールパネルにログインします。
- Home ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
- Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
- Content をクリックします。Content ページが表示されます。
-
Create header ボタンをクリックします。Create a new header ページが表示されます。
- 以下の要領で Create a new header ページの各フィールドに入力します。
- Name フィールドに
Date
と入力します。 - Type メニューから Request を選択し、Action メニューから Set を選択します。
- Destination フィールドに
http.Date
と入力します。 - Source フィールドに
var.ali_expires
と入力します。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
19
と入力します。
- Name フィールドに
- Create ボタンをクリックします。コンテンツページに新しい Date ヘッダーが表示されます。これは後で Authorization ヘッダーの署名で使用します。
Host ヘッダーの作成
- Create header ボタンをクリックします。Create a new header ページが表示されます。
- 以下の要領で Create a new header ページの各フィールドに入力します。
- Name フィールドに
Date
と入力します。 - Type メニューから Request を選択し、Action メニューから Set を選択します。
- Destination フィールドに
http.Host
と入力します。 - Source フィールドに
"<your OSS domain>"
と入力します。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
19
と入力します。
- Name フィールドに
- Create ボタンをクリックします。Content ページに新しい Host ヘッダーが表示されます。
Authorization ヘッダーの作成
-
新しいヘッダーを作成するため、Create header ボタンを再度クリックします。Create a header ページが表示されます。
- 以下の要領で Create a header ページの各フィールドに入力します。
- Name フィールドに
Authorization
と入力します。 - Type メニューから Request を選択し、Action メニューから Set を選択します。
- Destination フィールドに
url
と入力します。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
20
と入力します。
- Name フィールドに
-
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
- Create ボタンをクリックします。Content ページに新しい Authorization ヘッダーが表示されます。
- 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);