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 の変数の値を変更します。

    1
    2
    3
    4
    5
    6
    7
    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 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 など) の値を必ず変更してください。

    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
    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;
    }
注意

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


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

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