Alibaba Object Storage Service
最終更新日 2022-03-01
パブリックコンテンツとプライベートコンテンツの両方で、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 バケットを GCS バケットをオリジンサーバーとして追加するには、ホストと連携する手順に従ってください。オリジンサーバーについての具体的な情報を追加します。
- OriginsページでCreate Hostをクリックし、 形式を使用してホストの適切なアドレスを入力します
<BUCKET>.<REGION>.aliyuncs.com
。例えば、バケット名がtest123
では、地域が北京 (例:oss-cn-beijing
) である場合、ホスト名はtest123.oss-cn-beijing.aliyuncs.com
になります。また、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をコピーします。Authorization ヘッダーを作成する際には、これらが後ほど必要になります。
バケットの概要に戻り、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 のセットアップ
Fastly では、OSS プライベートコンテンツを使用するには、次の2つのヘッダーを作成する必要があります: 日付ヘッダー(認可シグネチャに必要)および Host ヘッダー。また、認可パラメータを追加する必要があります。
Date ヘッダーの作成
- Fastly コントロールパネルにログインします。
- Home ページから、適切なサービスを選択します。検索ボックスで ID、名称、ドメインによる検索が行えます。
- Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。Domains ページが表示されます。
- 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 ヘッダーの情報を入力します。
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```plain2 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_expires3 ```
- Createボタンをクリックします。Content ページに新規認可ヘッダーが表示されます。
- Activate ボタンをクリックして設定変更をデプロイします。
OSS のプライベートコンテンツを使用するために VCL スニペットで Fastly のセットアップ
VCL スニペットでこの設定を行い、優先順位を 20
に設定します。
1declare local var.ali_bucket STRING;2declare local var.ali_region STRING;3declare local var.ali_access_key_id STRING;4declare local var.ali_access_key_secret STRING;5declare local var.ali_expires INTEGER;6declare local var.ali_canon STRING;7declare local var.ali_sig STRING;_8
9set var.ali_bucket = "test123";10set var.ali_region = "oss-cn-beijing";11set var.ali_access_key_id = "decafbad";12set var.ali_access_key_secret = "deadbeef";13set var.ali_expires = std.atoi(now.sec);14set var.ali_expires += 60;15
16
17set req.http.Host = var.ali_bucket "." + var.ali_region + ".aliyuncs.com";18set req.http.Date = var.ali_expires;19set var.ali_canon = if(req.method == "HEAD", "GET", req.method) LF LF LF20 req.http.Date LF "/" var.ali_bucket req.url.path;21set var.ali_sig = digest.hmac_sha1_base64(var.alibaba_access_key_secret, var.ali_canon);22
23set req.url = req.url.path;24set req.url = querystring.set(req.url, "OSSAccessKeyId", var.alibaba_access_key_id);25set req.url = querystring.set(req.url, "Signature", var.ali_sig);26set req.url = querystring.set(req.url, "Expires", var.ali_expires);
このページでは、サードパーティが提供するサービスとの統合について説明しています。詳細については、統合に関する注意事項をご覧ください。