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 ボタンをクリックします。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
の変数の値を変更します。1 2 3 4 5 6 7 8
declare local var.oracleNamespace STRING; declare local var.oracleBucket STRING; set var.oracleNamespace = "YOUR_ORACLE_NAMESPACE_ID"; # Change this value to your own data set var.oracleBucket = "YOUR_ORACLE_BUCKET_NAME"; # Change this value to your own data if (req.method == "GET" && !req.backend.is_shield) { set bereq.url = "/n/" var.oracleNamespace "/b/" var.oracleBucket "/o/" bereq.url; }
パブリックオブジェクトで S3 Compatibility 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 snippet を作成します。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
など) の値を必ず変更してください。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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
declare local var.ocsNamespace STRING; declare local var.ocsAccessKey STRING; declare local var.ocsSecretKey STRING; declare local var.ocsS3Bucket STRING; declare local var.ocsRegion STRING; declare local var.canonicalHeaders STRING; declare local var.signedHeaders STRING; declare local var.canonicalRequest STRING; declare local var.canonicalQuery STRING; declare local var.stringToSign STRING; declare local var.dateStamp STRING; declare local var.signature STRING; declare local var.scope STRING; set var.ocsNamespace = "YOUR_OCS_NAMESPACE"; # Change this value to your own data set var.ocsAccessKey = "YOUR_OCS_ACCESS_KEY"; # Change this value to your own data set var.ocsSecretKey = "YOUR_OCS_SECRET_KEY"; # Change this value to your own data set var.ocsS3Bucket = "YOUR_OCS_BUCKET_NAME"; # Change this value to your own data set var.ocsRegion = "YOUR_OCS_REGION"; # Change this value to your own data if (req.method == "GET" && !req.backend.is_shield) { set bereq.http.x-amz-content-sha256 = digest.hash_sha256(""); set bereq.http.x-amz-date = strftime({"%Y%m%dT%H%M%SZ"}, now); set bereq.http.host = var.ocsNamespace ".compat.objectstorage." var.ocsRegion ".oraclecloud.com"; set bereq.url = querystring.remove(bereq.url); set bereq.url = regsuball(urlencode(urldecode(bereq.url.path)), {"%2F"}, "/"); set var.dateStamp = strftime({"%Y%m%d"}, now); set var.canonicalHeaders = "" "host:" bereq.http.host LF "x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF "x-amz-date:" bereq.http.x-amz-date LF ; set var.canonicalQuery = ""; set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date"; set var.canonicalRequest = "" "GET" LF bereq.url.path LF var.canonicalQuery LF var.canonicalHeaders LF var.signedHeaders LF digest.hash_sha256("") ; set var.scope = var.dateStamp "/" var.ocsRegion "/s3/aws4_request"; set var.stringToSign = "" "AWS4-HMAC-SHA256" LF bereq.http.x-amz-date LF var.scope LF regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "") ; set var.signature = digest.awsv4_hmac( var.ocsSecretKey, var.dateStamp, var.ocsRegion, "s3", var.stringToSign ); set bereq.http.Authorization = "AWS4-HMAC-SHA256 " "Credential=" var.ocsAccessKey "/" var.scope ", " "SignedHeaders=" var.signedHeaders ", " "Signature=" + regsub(var.signature,"^0x", "") ; unset bereq.http.Accept; unset bereq.http.Accept-Language; unset bereq.http.User-Agent; unset bereq.http.Fastly-Client-IP; }