Oracle Cloud Storage
- English
- 日本語
Fastly では Oracle Cloud Storageのパブリックおよびプライベートバケットをオリジンとして使用することができます。
設定前の注意点
Oracle Cloud をオリジンとして使用するのに必要なセットアップと設定の手順を開始する前に、以下の点に留意してください。
- 有効な Oracle Cloud アカウントが必要です。新しいバケットを作成し、Fastly が使用するファイルをアップロードする前に、まず Oracle の Web サイトで Oracle Cloud アカウントを作成する必要があります。
- Oracle Cloud には、Oracle 独自の API と Amazon S3 Compatibility API の両方が実装されています。現在、Fastly は S3 Compatibility API 経由でのみプライベートバケットをサポートしています。
Oracle Cloud Storage をオリジンとして使用する
Oracle Cloud Storage をオリジンとして使用するには、以下の手順に従ってください。
新規バケットを作成する
Oracle Cloud Storage のデータはバケットに格納されます。以下の手順で Oracle Cloud のコントロールパネルで新規バケットを作成します。
左上のナビゲーションメニューを開いて Object Storage を選び、Object Storage を選択します。
ページ左側の Compartment リストからコンパートメントを選択します。
Create a Bucket をクリックします。
Bucket Name フィールドに固有のバケット名を入力します。バケット名は名前空間内で固有のものである必要があり、ネストすることはできません。名前には、文字、数字、ダッシュ、ピリオドが使用できます。
Create a Bucket をクリックします。新規作成したバケットが Oracle Cloud Storage Buckets ページのバケットリストに表示されます。
デフォルトでは、新しいバケットはプライベートになります。バケットの右側にある3つの点をクリックし、Edit Visibility を選択します。 可視性を Public に変更して、Allow users to list objects from this bucket オプションの選択を解除します。
先ほど作成した新しいバケットにファイルをアップロードします。
バケットの名前空間とホスト名を探す
Oracle Cloud Storage と連動する 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 Storage のトラフィックを受け入れるように編集する必要があります。その手順については、新規サービスの作成に関するガイドに記載されています。これらの手順を完了する際、以下の点にご注意ください。
- ホストを新規作成する際、Origins ページの Hosts フィールドに Oracle バケットのホスト名を入力します。バケットの名前空間とホスト名を探すのセクションを参照してください。
- Edit this host ページでホスト情報を編集する際は、ホストのトランスポートレイヤーセキュリティ (TLS) セクションの情報を確認してください。具体的には以下を確認してください。
- Fastly とオリジン間の接続が確立されている。
- Certificate hostname フィールドにバケットのホスト名が入力されている。
- SNI のホスト名を Certificate のホスト名と一致させるチェックボックスが選択されている (SNI のホスト名フィールドの下に表示されます)。
- (オプション) Shielding メニューから適切なシールドの場所を選択し、オリジンシールドを有効にできます。Oracle Cloud Storage を使用する場合、最も最適な Oracle の地域に最も近いオリジンシールドの場所を選択する必要があります。
- Advanced options のセクションで、バケットのホスト名と同じオーバーライドホストを指定するかどうかを決定します。
パブリックオブジェクトで Oracle Cloud API を使用する
Oracle Cloud API をパブリックオブジェクトで使用するには、新規ヘッダーまたは VCL スニペットを作成する必要があります。ヘッダーまたは VCL スニペットを作成して Oracle Cloud Storage のインスタンスのリクエスト URL を書き換えます。
ヘッダーオブジェクトを使用する
- Fastly サービスの設定ページで Create 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 をクリックします。
Rewrite Oracle Cloud Storage URL
ヘッダーの横にある 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
の変数の値を変更します。declare local var.oracleNamespace STRING;declare local var.oracleBucket STRING;set var.oracleNamespace = "YOUR_ORACLE_NAMESPACE_ID"; # Change this value to your own dataset var.oracleBucket = "YOUR_ORACLE_BUCKET_NAME"; # Change this value to your own dataif (req.method == "GET" && !req.backend.is_shield) {set bereq.url = "/n/" var.oracleNamespace "/b/" var.oracleBucket "/o/" bereq.url;}
パブリックオブジェクトで S3 Compatible API を使用する
S3 Compatibility API をパブリックオブジェクトで使用するには、以下のように新しいヘッダーを作成する必要があります。
- Fastly サービスの設定ページで Create 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 をクリックします。
Activate をクリックして設定への変更をデプロイします。
プライベートバケット
Oracle Cloud ストレージのプライベートバケットを Fastly で使用するには、Amazon のヘッダーベース認証のバージョン4を実装する必要があります。これはカスタム VCL を使用して行うことができます。以下の点にご注意ください。
- Access Key と Secret Key で構成される Oracle の Customer Secret Key が必要となります。
- パスベースのアクセスを使用する必要があります。バーチャルホストスタイルのアクセス (例えば、バケットに
<bucketname>.<namespace>.compat.objectstorage.<region>.oraclecloud.com
としてアクセスするなど) はサポートされていません。
以下の表は、使用開始前に Oracle Cloud Storage から入手する必要がある情報の一覧です。
項目 | 説明 |
---|---|
名前空間 | バケットに割り当てられている名前空間識別子 (バケットの名前空間とホスト名を探すを参照してください)。 |
バケット名 | OCS バケットの名前です。バケットからアイテムをダウンロードする際に、各オブジェクトの URL パスやホスト名に記載される文字列です。 |
地域 | バケットが存在する場所の OCS 地域コード (例: us-east-1 )。 |
アクセスキー | バケットに対して少なくとも読み取り権限を持つアカウントの OCS アクセスキー文字列。 |
シークレットキー | 上記のアクセスキーとペアになっている OCS のシークレットアクセスキー。 |
これらの情報が得られれば、VCLで適切なヘッダー値を計算することで、ヘッダー認証を使用して S3 バケットに対して認証を行うように Fastly サービスを設定することができます。
まず、レギュラー 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
など) の値を必ず変更してください。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 dataset var.ocsAccessKey = "YOUR_OCS_ACCESS_KEY"; # Change this value to your own dataset var.ocsSecretKey = "YOUR_OCS_SECRET_KEY"; # Change this value to your own dataset var.ocsS3Bucket = "YOUR_OCS_BUCKET_NAME"; # Change this value to your own dataset var.ocsRegion = "YOUR_OCS_REGION"; # Change this value to your own dataif (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" LFbereq.url.path LFvar.canonicalQuery LFvar.canonicalHeaders LFvar.signedHeaders LFdigest.hash_sha256("");set var.scope = var.dateStamp "/" var.ocsRegion "/s3/aws4_request";set var.stringToSign = """AWS4-HMAC-SHA256" LFbereq.http.x-amz-date LFvar.scope LFregsub(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;}
この記事では、サードパーティが提供するサービスとの連携を設定する方法について説明します。利用規約に記載されているとおり、Fastly以外のサービスについては直接サポートを提供していません。。