Alibaba Object Storage Service
最終更新日 2022-03-01
パブリックコンテンツとプライベートコンテンツの両方で、Alibaba Object Storage Service (OSS) を Fastly のオリジン/オリジンサーバとして使用することができます。
OSS をオリジン/オリジンサーバーとして使用する
OSS をオリジンとして使用するには、以下の手順に従ってください。
OSS アカウントのセットアップと設定
オリジンのデータを保存するバケットを作成します。Create Bucket ウィンドウが表示されます。
以下の要領では、 Create Bucket設定画面の各フィールドに入力します。
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
になります。また、バケットドメイン名エリアのバケット概要ページでホスト名を確認することもできます。 - 新たに作成したホストをクリックして編集します。
- Nameフィールドにサービスの分かりやすい名前を入力します (例:
Alibaba Object Storage
)。 - Addressフィールドに最初のステップで入力した形式の
<BUCKET>.<REGION>.aliyuncs.com
ホスト名が無い場合はここで入力します。 - 以下の要領でトランスポートレイヤーセキュリティセクションの各フィールドに入力します。
- 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 のバケット設定のアクセス制御リストのセクションで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 ヘッダーを作成する際には、これらが後ほど必要になります。
- バケットの概要に戻り、ファイルタブをクリックし、認証ボタンをクリックします。認証ユーザーのリストが表示されます。これが新しいバケットである場合、空の状態が表示されるはずです。
- 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 ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
- 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>
を先ほど収集した情報に置き換えます。例: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_expiresCreateボタンをクリックします。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);
この記事では、サードパーティが提供するサービスとの統合について説明します。詳細については、統合に関する注意事項をご参照ください。