Oracle Cloud ストレージ
最終更新日 2021-08-12
Fastly では Oracle Cloud ストレージ のパブリックおよびプライベートバケットをオリジンとして使用することができます。
設定前の注意点
Oracle Cloud をオリジンとして使用するのに必要なセットアップと設定の手順を開始する前に、以下の点に留意してください。
- 有効な Oracle Cloud アカウントが必要です。新しいバケットを作成し、Fastly が使用するファイルをアップロードする前に、まず Oracle の Web サイトで Oracle Cloud アカウントを作成する必要があります。
- Oracle Cloud には、Oracle 独自の API と Amazon S3 Compatibility API の両方が実装されています。現在、Fastly は S3 Compatibility API 経由でのみプライベートバケットをサポートしています。
Oracle Cloud ストレージをオリジンとして使用する
Oracle Cloud ストレージをオリジンとして使用するには、以下の手順に従ってください。
新規バケットを作成する
Oracle Cloud ストレージのデータはバケットに格納されます。以下の手順で Oracle Cloud のコントロールパネルで新規バケットを作成します。
ヒント
バケットの作成方法については Oracle Guide で詳しく説明されています。
- Oracle account にログインします。Oracle アカウントの設定画面が表示されます。
- 左上のナビゲーションメニューを開いて Object Storage を選び、Object Storage を選択します。
- ページ左側の Compartment リストからコンパートメントを選択します。
- Create a Bucket をクリックします。Create a Bucket 設定画面が表示されます。
- Bucket Name フィールドに固有のバケット名を入力します。バケット名は名前空間内で固有のものである必要があり、ネストすることはできません。名前には、文字、数字、ダッシュ、ピリオドが使用できます。
- Create a Bucket ボタンをクリックします。新規作成したバケットが Oracle Cloud Storage Buckets ページのバケットリストに表示されます。
- デフォルトでは新しいバケットはプライベートになります。バケットの右側にある3つの点をクリックして Edit Visibility を選択します。 Visibility を Public に変更し、Allow users to list objects from this bucket オプションの選択を解除します。
- 先ほど作成した新しいバケットにファイルをアップロードします。
バケットの名前空間とホスト名を探す
Oracle Cloud ストレージと連動する Fastly サービスをセットアップするには、ファイルをアップロードした作成済みのバケットに割り当てられている名前空間の識別子とホスト名が必要です。
名前空間を調べるには、バケットをクリックして Bucket Information タブで確認できます。この例では名前空間は decafbaddeadbeef
です。
バケットのホスト名は以下で特定できます。
- ネイティブの Oracle API を使用している場合、ホスト名は
objectstorage.<region>.oraclecloud.com
(例:objectstorage.us-ashburn-1.oraclecloud.com
) のような形式になります。 - S3 Compatibility API を使用している場合、ホスト名は
<namespace id>.compat.objectstorage.<region>.oraclecloud.com
(例:decafbaddeadbeef.compat.objectstorage.us-ashburn-1.oraclecloud.com
) のような形式になります。
新規サービスを作成する
Fastly サービスを新規作成するには、まず新規ドメインを作成した後に新規ホストを作成し、Oracle Cloud ストレージのトラフィックを受け入れるように編集する必要があります。その手順については、新規サービスの作成に関するガイドに記載されています。これらの手順を完了する際、以下の点にご注意ください。
- ホストを新規作成する際、Origins ページの Hosts フィールドに Oracle バケットのホスト名を入力します。バケットの名前空間とホスト名を探すのセクションを参照してください。
- Edit this host ページでホスト情報を編集する際、ホストのトランスポート・レイヤー・セキュリティ (TLS) セクションの情報を確認してください。具体的には以下を確認してください。
- Fastly とオリジン間の接続が確立されている。
- Certificate hostname フィールドにバケットのホスト名を入力します。
- SNI のホスト名を Certificate のホスト名と一致させるチェックボックスが選択されている (SNI のホスト名フィールドの下に表示されます)。
- また、ホストを編集する際、オプションで Shielding メニューから適切なシールドの場所を選択し、オリジンシールドを有効にできます。Oracle Cloud ストレージを使用する場合、最も最適な Oracle のリージョンに最も近いシールド場所を選択する必要があります。
- Advanced options のセクションで、バケットのホスト名と同じオーバーライドホストを指定するかどうかを決定します。
パブリックオブジェクトで Oracle Cloud API を使用する
Oracle Cloud APIをパブリック・オブジェクトで使用するには、新規ヘッダーまたは VCL スニペットを作成する必要があります。ヘッダーまたは VCL スニペットを作成して Oracle Cloud ストレージのインスタンスのリクエスト URL を書き換えます。
ヘッダーオブジェクトを使用する
- Fastly サービスの設定ページで Create header ボタンをクリックし、新規ヘッダーを作成します。Create a header ページが表示されます。
- 以下の要領では、Create a header ページの各フィールドに入力します。
- Name フィールドに
Rewrite Oracle Cloud Storage URL
と入力します。 - Type メニューから Request を選択し、Action メニューから Set を選択します。
- Destination フィールドに
url
と入力します。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
20
を入力します。
- Name フィールドに
- Source フィールドに
"/n/<namespace id>/b/<bucket name>/o" req.url
(例:"/n/decafbaddeadbeef/b/fastly-bucket/o" req.url
) と入力します。 - Create ボタンをクリックします。Content ページに新しいヘッダーが表示されます。
Rewrite Oracle Cloud Storage URL
ヘッダーの横にある Add a condition リンクをクリックします。Add a condition ウィンドウが表示されます。- Create a new request condition ボタンをクリックします。新しいリクエスト条件の作成 ウィンドウが表示されます。
- 以下のように条件フィールドに入力します。
- Name フィールドに
Oracle Cloud Storage Shielding
と入力します。 - Apply if フィールドに、
(req.method == "GET" && !req.backend.is_shield) {}
と入力します。
- Name フィールドに
- Save and apply をクリックします。
- Activate ボタンをクリックして設定変更をデプロイします。
VCL スニペットを使用する
- サービスの設定ページで VCL Snippets をクリックし、Create Snippet をクリックします。
- Create a VCL Snippet ページでスニペットの名前を入力します。
- within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を指定します。
VCL フィールドに以下のコードを追加します。Oracle の名前空間とバケットに一致するように、
oracleNamespace
とoracleBucket
の変数の値を変更します。1declare local var.oracleNamespace STRING;2declare local var.oracleBucket STRING;3set var.oracleNamespace = "YOUR_ORACLE_NAMESPACE_ID"; # Change this value to your own data4set var.oracleBucket = "YOUR_ORACLE_BUCKET_NAME"; # Change this value to your own data56if (req.method == "GET" && !req.backend.is_shield) {7 set bereq.url = "/n/" var.oracleNamespace "/b/" var.oracleBucket "/o/" bereq.url;8}
パブリックオブジェクトで S3 Compatible API を使用する
S3 Compatibility API をパブリックオブジェクトで使用するには、以下のように新しいヘッダーを作成する必要があります。
- Fastly サービスの設定ページで Create header ボタンをクリックし、新規ヘッダーを作成します。Create a header ページが表示されます。
- 以下の要領では、Create a header ページの各フィールドに入力します。
- Name フィールドに
Rewrite Oracle Cloud Storage URL
と入力します。 - Type メニューから Request を選択し、Action メニューから Set を選択します。
- Destination フィールドに
url
と入力します。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
20
を入力します。
- Name フィールドに
- Source フィールドに
"/<bucket name>/" req.url
(例:"/fastly-bucket/o" req.url
) と入力します。 - Create ボタンをクリックします。Content ページに新しいヘッダーが表示されます。
- Activate ボタンをクリックして設定変更をデプロイします。
プライベートバケット
重要
現在、Fastly は S3 Compatibility API を使用してプライベートオブジェクトのみをサポートしています。
Oracle Cloud ストレージのプライベートバケットを Fastly で使用するには、Amazon のヘッダーベース認証のバージョン4を実装する必要があります。これは カスタム VCL を使用して行うことができます。以下の点にご留意ください。
- Access Key と Secret Key で構成される Oracle の Customer Secret Key が必要となります。
- パスベースのアクセスを使用する必要があります。バーチャルホストスタイルのアクセス (例えば、バケットに
<bucketname>.<namespace>.compat.objectstorage.<region>.oraclecloud.com
としてアクセスするなど) はサポートされていません。
以下の表は、使用開始前に Oracle Cloud ストレージから入手する必要がある情報の一覧です。
項目 | 説明 |
---|---|
名前空間 | バケットに割り当てられている名前空間識別子 (バケットの名前空間とホスト名を探すを参照してください)。 |
バケット名 | OCS バケットの名前です。バケットからアイテムをダウンロードする際に、各オブジェクトの URL パスやホスト名に記載される文字列です。 |
地域 | バケットが存在する場所の OCS リージョンコード (例: us-east-1 )。 |
アクセスキー | バケットに対して少なくとも読み取り権限を持つアカウントの OCS アクセスキー文字列。 |
シークレットキー | 上記のアクセスキーとペアになっている OCS のシークレットアクセスキー。 |
これらの情報が得られれば、VCLで適切なヘッダー値を計算することで、ヘッダー認証を使用して S3 バケットに対して認証を行うように Fastly サービスを設定することができます。
重要
サービスの設定で、オリジンの Override host フィールドを空白にすることを検討してください。この設定を行うと、ここで示したスニペットのホストヘッダーが上書きされ、送信される情報を認証する署名が無効になる可能性があります。
まず、レギュラー VCL スニペット を作成します。AWS protected origin
のような意味のある名前を付けます。スニペットを作成する際に、within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を選択します。次に、VCL フィールドに以下のコードを入力します (特定の値は、お客様自身の AWS バケットに関連するものに変更するようにしてください)。
- サービスの設定ページで VCL Snippets をクリックし、Create Snippet をクリックします。
- Create a VCL Snippet ページで、スニペットに
AWS protected origin
のような意味のある名前をつけます。 - within subroutine を選択してスニペットの配置を指定し、サブルーチンのタイプとして miss を選択します。
VCL フィールドに以下のコードを追加します。Oracle の環境に一致するように、変数 (
ocsNamespace
やocsAccessKey
など) の値を必ず変更してください。1declare local var.ocsNamespace STRING;2declare local var.ocsAccessKey STRING;3declare local var.ocsSecretKey STRING;4declare local var.ocsS3Bucket STRING;5declare local var.ocsRegion STRING;6declare local var.canonicalHeaders STRING;7declare local var.signedHeaders STRING;8declare local var.canonicalRequest STRING;9declare local var.canonicalQuery STRING;10declare local var.stringToSign STRING;11declare local var.dateStamp STRING;12declare local var.signature STRING;13declare local var.scope STRING;1415set var.ocsNamespace = "YOUR_OCS_NAMESPACE"; # Change this value to your own data16set var.ocsAccessKey = "YOUR_OCS_ACCESS_KEY"; # Change this value to your own data17set var.ocsSecretKey = "YOUR_OCS_SECRET_KEY"; # Change this value to your own data18set var.ocsS3Bucket = "YOUR_OCS_BUCKET_NAME"; # Change this value to your own data19set var.ocsRegion = "YOUR_OCS_REGION"; # Change this value to your own data2021if (req.method == "GET" && !req.backend.is_shield) {2223 set bereq.http.x-amz-content-sha256 = digest.hash_sha256("");24 set bereq.http.x-amz-date = strftime({"%Y%m%dT%H%M%SZ"}, now);25 set bereq.http.host = var.ocsNamespace ".compat.objectstorage." var.ocsRegion ".oraclecloud.com";26 set bereq.url = querystring.remove(bereq.url);27 set bereq.url = regsuball(urlencode(urldecode(bereq.url.path)), {"%2F"}, "/");28 set var.dateStamp = strftime({"%Y%m%d"}, now);29 set var.canonicalHeaders = ""30 "host:" bereq.http.host LF31 "x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF32 "x-amz-date:" bereq.http.x-amz-date LF33 ;34 set var.canonicalQuery = "";35 set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date";36 set var.canonicalRequest = ""37 "GET" LF38 bereq.url.path LF39 var.canonicalQuery LF40 var.canonicalHeaders LF41 var.signedHeaders LF42 digest.hash_sha256("")43 ;4445 set var.scope = var.dateStamp "/" var.ocsRegion "/s3/aws4_request";4647 set var.stringToSign = ""48 "AWS4-HMAC-SHA256" LF49 bereq.http.x-amz-date LF50 var.scope LF51 regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "")52 ;5354 set var.signature = digest.awsv4_hmac(55 var.ocsSecretKey,56 var.dateStamp,57 var.ocsRegion,58 "s3",59 var.stringToSign60 );6162 set bereq.http.Authorization = "AWS4-HMAC-SHA256 "63 "Credential=" var.ocsAccessKey "/" var.scope ", "64 "SignedHeaders=" var.signedHeaders ", "65 "Signature=" + regsub(var.signature,"^0x", "")66 ;67 unset bereq.http.Accept;68 unset bereq.http.Accept-Language;69 unset bereq.http.User-Agent;70 unset bereq.http.Fastly-Client-IP;71}
この記事では、サードパーティが提供するサービスとの統合について説明します。詳細については、統合に関する注意事項をご参照ください。