Oracle Cloud ストレージ

Fastly では Oracle Cloud ストレージ のパブリックおよびプライベートバケットをオリジンとして使用することができます。

設定前の注意点

Oracle Cloud をオリジンとして使用するのに必要なセットアップと設定の手順を開始する前に、以下の点に留意してください。

  • 有効な Oracle Cloud アカウントが必要です。新しいバケットを作成し、Fastly が使用するファイルをアップロードする前に、まず Oracle の Web サイトで Oracle Cloud アカウントを作成する必要があります。
  • Oracle Cloud には、Oracle 独自の APIAmazon S3 Compatibility API の両方が実装されています。現在、Fastly は S3 Compatibility API 経由でのみプライベートバケットをサポートしています。

Oracle Cloud ストレージをオリジンとして使用する

Oracle Cloud ストレージをオリジンとして使用するには、以下の手順に従ってください。

新規バケットを作成する

Oracle Cloud ストレージのデータはバケットに格納されます。以下の手順で Oracle Cloud のコントロールパネルで新規バケットを作成します。

ヒント

バケットの作成方法については Oracle Guide で詳しく説明されています。

  1. Oracle account にログインします

  2. 左上のナビゲーションメニューを開いて Object Storage を選び、Object Storage を選択します。

    Oracle Cloud Object Storage の新規バケットのウィンドウ

  3. ページ左側の Compartment リストからコンパートメントを選択します。

  4. Create a Bucket をクリックします。

  5. Bucket Name フィールドに固有のバケット名を入力します。バケット名は名前空間内で固有のものである必要があり、ネストすることはできません。名前には、文字、数字、ダッシュ、ピリオドが使用できます。

    Oracle Cloud Object Storage の新規バケットのウィンドウ

  6. Create a Bucket をクリックします。新規作成したバケットが Oracle Cloud Storage Buckets ページのバケットリストに表示されます。

  7. デフォルトでは新しいバケットはプライベートになります。バケットの右側にある3つの点をクリックし、Edit Visibility を選択します。可視性を Public に変更して、Allow users to list objects from this bucket オプションの選択を解除します 。

  8. 先ほど作成した新しいバケットにファイルをアップロードします。

バケットの名前空間とホスト名を探す

Oracle Cloud ストレージと連動する Fastly サービスをセットアップするには、ファイルをアップロードした作成済みのバケットに割り当てられている名前空間の識別子とホスト名が必要です。

名前空間を調べるには、バケットをクリックして Bucket Information タブで確認できます。この例では名前空間は decafbaddeadbeefです。

Oracle Cloud ストレージバケットの詳細

バケットのホスト名は以下で特定できます。

  • ネイティブの 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 を書き換えます。

ヘッダーオブジェクトを使用する

  1. Fastly サービスの設定ページで Create header をクリックし、新規ヘッダーを作成します。
  2. 以下の要領では、Create a headerページの各フィールドに入力します。
    • Name フィールドに Rewrite Oracle Cloud Storage URL と入力します。
    • TypeメニューからRequestを選択し、ActionメニューからSetを選択します。
    • Destinationフィールドにurlと入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 20 を入力します。
  3. Source フィールドに "/n/<namespace id>/b/<bucket name>/o" req.url(例: "/n/decafbaddeadbeef/b/fastly-bucket/o" req.url) と入力します。
  4. Create をクリックします。
  5. Rewrite Oracle Cloud Storage URL ヘッダーの横にある Add a condition をクリックします。
  6. Create a new request condition をクリックします。
  7. 以下のように条件フィールドに入力します。
    • Name フィールドに Oracle Cloud Storage Shielding と入力します。
    • Apply if フィールドに、(req.method == "GET" && !req.backend.is_shield) {} と入力します。
  8. Save and apply をクリックします。
  9. Activate をクリックして設定への変更をデプロイします。

VCL スニペットを使用する

  1. サービスの設定ページで VCL Snippets をクリックし、Create Snippet をクリックします。

  2. Create a VCL Snippet ページでスニペットの名前を入力します。

  3. within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を指定します。

    VCL スニペットタイプの選択

  4. VCL フィールドに以下のコードを追加します。Oracle の名前空間とバケットに一致するように、oracleNamespaceoracleBucket の変数の値を変更します。

    1declare local var.oracleNamespace STRING;
    2declare local var.oracleBucket STRING;
    3set var.oracleNamespace = "YOUR_ORACLE_NAMESPACE_ID"; # Change this value to your own data
    4set var.oracleBucket = "YOUR_ORACLE_BUCKET_NAME"; # Change this value to your own data
    5if (req.method == "GET" && !req.backend.is_shield) {
    6 set bereq.url = "/n/" var.oracleNamespace "/b/" var.oracleBucket "/o/" bereq.url;
    7}

パブリックオブジェクトで S3 Compatible API を使用する

S3 Compatibility API をパブリックオブジェクトで使用するには、以下のように新しいヘッダーを作成する必要があります。

  1. Fastly サービスの設定ページで Create header をクリックし、新規ヘッダーを作成します。
  2. 以下の要領では、Create a headerページの各フィールドに入力します。
    • Name フィールドに Rewrite Oracle Cloud Storage URL と入力します。
    • TypeメニューからRequestを選択し、ActionメニューからSetを選択します。
    • Destinationフィールドにurlと入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 20 を入力します。
  3. Source フィールドに "/<bucket name>/" req.url(例: "/fastly-bucket/o" req.url) と入力します。
  4. Create をクリックします。
  5. Activate をクリックして設定への変更をデプロイします。

プライベートバケット

重要

現在、Fastly は S3 Compatibility API を使用してプライベートオブジェクトのみをサポートしています。

Oracle Cloud ストレージのプライベートバケットを Fastly で使用するには、Amazon のヘッダーベース認証のバージョン4を実装する必要があります。これは カスタム VCL を使用して行うことができます。以下の点にご留意ください。

  • Access KeySecret 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 バケットに関連するものに変更するようにしてください)。

  1. サービスの設定ページで VCL Snippets をクリックし、Create Snippet をクリックします。

  2. Create a VCL Snippet ページで、スニペットに AWS protected origin のような意味のある名前をつけます。

  3. within subroutine を選択してスニペットの配置を指定し、サブルーチンのタイプとして miss を選択します。

    VCL スニペットタイプの選択

  4. VCL フィールドに以下のコードを追加します。Oracle の環境に一致するように、変数 (ocsNamespaceocsAccessKey など) の値を必ず変更してください。

    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;
    14set var.ocsNamespace = "YOUR_OCS_NAMESPACE"; # Change this value to your own data
    15set var.ocsAccessKey = "YOUR_OCS_ACCESS_KEY"; # Change this value to your own data
    16set var.ocsSecretKey = "YOUR_OCS_SECRET_KEY"; # Change this value to your own data
    17set var.ocsS3Bucket = "YOUR_OCS_BUCKET_NAME"; # Change this value to your own data
    18set var.ocsRegion = "YOUR_OCS_REGION"; # Change this value to your own data
    19if (req.method == "GET" && !req.backend.is_shield) {
    20 set bereq.http.x-amz-content-sha256 = digest.hash_sha256("");
    21 set bereq.http.x-amz-date = strftime({"%Y%m%dT%H%M%SZ"}, now);
    22 set bereq.http.host = var.ocsNamespace ".compat.objectstorage." var.ocsRegion ".oraclecloud.com";
    23 set bereq.url = querystring.remove(bereq.url);
    24 set bereq.url = regsuball(urlencode(urldecode(bereq.url.path)), {"%2F"}, "/");
    25 set var.dateStamp = strftime({"%Y%m%d"}, now);
    26 set var.canonicalHeaders = ""
    27 "host:" bereq.http.host LF
    28 "x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF
    29 "x-amz-date:" bereq.http.x-amz-date LF
    30 ;
    31 set var.canonicalQuery = "";
    32 set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date";
    33 set var.canonicalRequest = ""
    34 "GET" LF
    35 bereq.url.path LF
    36 var.canonicalQuery LF
    37 var.canonicalHeaders LF
    38 var.signedHeaders LF
    39 digest.hash_sha256("")
    40 ;
    41 set var.scope = var.dateStamp "/" var.ocsRegion "/s3/aws4_request";
    42 set var.stringToSign = ""
    43 "AWS4-HMAC-SHA256" LF
    44 bereq.http.x-amz-date LF
    45 var.scope LF
    46 regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "")
    47 ;
    48 set var.signature = digest.awsv4_hmac(
    49 var.ocsSecretKey,
    50 var.dateStamp,
    51 var.ocsRegion,
    52 "s3",
    53 var.stringToSign
    54 );
    55 set bereq.http.Authorization = "AWS4-HMAC-SHA256 "
    56 "Credential=" var.ocsAccessKey "/" var.scope ", "
    57 "SignedHeaders=" var.signedHeaders ", "
    58 "Signature=" + regsub(var.signature,"^0x", "")
    59 ;
    60 unset bereq.http.Accept;
    61 unset bereq.http.Accept-Language;
    62 unset bereq.http.User-Agent;
    63 unset bereq.http.Fastly-Client-IP;
    64}

このページでは、サードパーティが提供するサービスとの統合について説明しています。詳細については、統合に関する注意事項をご覧ください。


翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。