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 にログインします。Oracle アカウントの設定画面が表示されます。
  2. 左上のナビゲーションメニューを開いて Object Storage を選び、Object Storage を選択します。

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

  1. ページ左側の Compartment リストからコンパートメントを選択します。
  2. Create a Bucket をクリックします。Create a Bucket 設定画面が表示されます。
  3. Bucket Name フィールドに固有のバケット名を入力します。バケット名は名前空間内で固有のものである必要があり、ネストすることはできません。名前には、文字、数字、ダッシュ、ピリオドが使用できます。

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

  1. Create a Bucket ボタンをクリックします。新規作成したバケットが Oracle Cloud Storage Buckets ページのバケットリストに表示されます。
  2. デフォルトでは新しいバケットはプライベートになります。バケットの右側にある3つの点をクリックして Edit Visibility を選択します。 Visibility を Public に変更し、Allow users to list objects from this bucket オプションの選択を解除します。
  3. 先ほど作成した新しいバケットにファイルをアップロードします。

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

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 ボタンをクリックし、新規ヘッダーを作成します。Create a 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 ボタンをクリックします。Content ページに新しいヘッダーが表示されます。
  5. Rewrite Oracle Cloud Storage URL ヘッダーの横にある Add a condition リンクをクリックします。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 スニペットタイプの選択

  1. 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
    5
    6if (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 をパブリックオブジェクトで使用するには、以下のように新しいヘッダーを作成する必要があります。

  1. Fastly サービスの設定ページで Create header ボタンをクリックし、新規ヘッダーを作成します。Create a 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 ボタンをクリックします。Content ページに新しいヘッダーが表示されます。
  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 スニペットタイプの選択

  1. 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;
    14
    15set var.ocsNamespace = "YOUR_OCS_NAMESPACE"; # Change this value to your own data
    16set var.ocsAccessKey = "YOUR_OCS_ACCESS_KEY"; # Change this value to your own data
    17set var.ocsSecretKey = "YOUR_OCS_SECRET_KEY"; # Change this value to your own data
    18set var.ocsS3Bucket = "YOUR_OCS_BUCKET_NAME"; # Change this value to your own data
    19set var.ocsRegion = "YOUR_OCS_REGION"; # Change this value to your own data
    20
    21if (req.method == "GET" && !req.backend.is_shield) {
    22
    23 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 LF
    31 "x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF
    32 "x-amz-date:" bereq.http.x-amz-date LF
    33 ;
    34 set var.canonicalQuery = "";
    35 set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date";
    36 set var.canonicalRequest = ""
    37 "GET" LF
    38 bereq.url.path LF
    39 var.canonicalQuery LF
    40 var.canonicalHeaders LF
    41 var.signedHeaders LF
    42 digest.hash_sha256("")
    43 ;
    44
    45 set var.scope = var.dateStamp "/" var.ocsRegion "/s3/aws4_request";
    46
    47 set var.stringToSign = ""
    48 "AWS4-HMAC-SHA256" LF
    49 bereq.http.x-amz-date LF
    50 var.scope LF
    51 regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "")
    52 ;
    53
    54 set var.signature = digest.awsv4_hmac(
    55 var.ocsSecretKey,
    56 var.dateStamp,
    57 var.ocsRegion,
    58 "s3",
    59 var.stringToSign
    60 );
    61
    62 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}

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


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

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合はお問い合わせください : support@fastly.com