はじめに

みなさん、こんにちは。
Oracle Cloud Infrastructure 検証チームです。

今回は、オブジェクト・ストレージのプライベート・エンドポイントを利用して、プライベート・サブネットからオブジェクト・ストレージへアクセスする方法について紹介いたします。

オブジェクト・ストレージとは

オブジェクト・ストレージは、信頼性のあるコスト効率の高いデータ耐久性を実現するインターネット規模の高パフォーマンス・ストレージ・プラットフォームです。
分析データ、およびイメージやビデオなどのリッチ・コンテンツを含む、あらゆるコンテンツ・タイプの非構造化データを無制限に格納できます。
また、インターネットまたはクラウド・プラットフォーム内から直接データを安全かつセキュアに格納したり、取得できます

参考:Oracle Cloud Infrastructure ドキュメント | オブジェクト・ストレージ(外部サイト)

オブジェクト・ストレージについては、過去の記事もございますので是非ご覧ください。
OCI オブジェクト・ストレージとは

オブジェクト・ストレージへのアクセス方法

プライベート・サブネットのインスタンスからオブジェクト・ストレージへのアクセスの方法として、従来はパブリック・エンドポイントに依存しているサービス・ゲートウェイを利用し、オブジェクト・ストレージのサービスにアクセスを行う必要がありました。

2024/8/27より、オブジェクト・ストレージのプライベート・エンドポイントの機能が追加され、VCN内のプライベートIPアドレスを使用してオブジェクト・ストレージのバケットおよびオブジェクトにアクセスすることが可能となりました。

参考

従来の方法(サービス・ゲートウェイを使用する場合)

新規の方法(プライベート・エンドポイントを使用する場合)

今回は、②プライベート・エンドポイントを使用する場合の方法についての紹介になります。

プライベート・エンドポイントを利用したアクセス方法の検証

今回の検証を実施するにあたり、下記が既に設定されていることとします。

  • プライベート・サブネットへの接続が可能であること
  • プライベート・サブネットのインスタンスにOCI_CLIがインストールされていること
    OCI_CLIのインストール方法についてまとまっている過去の記事もございますので是非ご覧ください。
    OCI CLI(コマンドライン)によるAutonomous Databaseの起動停止1/2
  • オブジェクト・ストレージに作成済みのバケットが存在し、オブジェクトが1件以上アップロードされていること
  • VCNにサービス・ゲートウェイが構成されていること

今回の検証のOCI構成について


今回は、サービス・ゲートウェイを使用した従来通りの接続方法とプライベート・エンドポイントを使用した新しい接続方法の2通りを実施します。

検証

プライベート・エンドポイントの作成

OCIコンソールにて、「ストレージ」→「オブジェクト・ストレージとアーカイブ・ストレージ」→「プライベート・エンドポイント」に移動します。

  1. プライベート・エンドポイントの作成」を選択します。
  2. プライベート・エンドポイントの各種項目を設定し、「作成」を選択します。
    • 名前:任意
    • DNS接頭辞:任意 ※FQDNの接頭辞になります
    • VCNの選択:任意
    • サブネットの選択:選択したVCNのプライベート・サブネットを選択
    • アクセス・ターゲット:プライベート・エンドポイントを使用してアクセスするオブジェクト・ストレージのバケットを指定(アスタリスク(*)を使用してすべての値を対象とすることも可能)
      • ネームスペース:対象のバケットのネームスペースを入力
      • コンパートメントOCID:対象のバケットのコンパートメントのOCIDを入力
      • バケット名:対象のバケット名を入力

  3. ステータスが「作成中」から「アクティブ」に変化したら完了です。
OCI CLIを使用したオブジェクト・ストレージへのアクセス確認
  • サービス・ゲートウェイを使用する場合
    下記のコマンドを使用してオブジェクト・ストレージのバケット内のオブジェクトのリストを表示します。
    oci os object list –bucket-name <バケット名> –namespace <ネームスペース名>
    [opc@private-instance ~]$ oci os object list --bucket-name bucket-test --namespace xxxxxxxxxxxx
    {
      "data": [
        {
          "archival-state": null,
          "etag": "688f1a09-27f2-4a98-9de5-68ccb58becf2",
          "md5": "rhw3xnmKrz/4f/Ph18Z2Uw==",
          "name": "upload_test.txt",
          "size": 20,
          "storage-tier": "Standard",
          "time-created": "2025-05-07T05:45:47.943000+00:00",
          "time-modified": "2025-05-07T05:45:47.943000+00:00"
        }
      ],
      "prefixes": []
    }
  • プライベート・エンドポイントを使用する場合
    プライベート・エンドポイントを使用する場合は、従来のコマンドに加えて –endpoint https://<プライベート・エンドポイントのFQDN> を追加します。
    [opc@private-instance ~]$ oci os object list --bucket-name bucket-test --namespace xxxxxxxxxxxx --endpoint https://bucket-pe-xxxxxxxxxxxx.private.objectstorage.ap-tokyo-1.oci.customer-oci.com
    {
      "data": [
        {
          "archival-state": null,
          "etag": "688f1a09-27f2-4a98-9de5-68ccb58becf2",
          "md5": "rhw3xnmKrz/4f/Ph18Z2Uw==",
          "name": "upload_test.txt",
          "size": 20,
          "storage-tier": "Standard",
          "time-created": "2025-05-07T05:45:47.943000+00:00",
          "time-modified": "2025-05-07T05:45:47.943000+00:00"
        }
      ],
      "prefixes": []
    }

オブジェクトのリストの表示は、サービス・ゲートウェイを使用する場合プライベート・エンドポイントを使用する場合のどちらの場合でも返ってくる情報は同じになります。
これだけでは意図した接続方法を使用しているのか分からないため、サービス・ゲートウェイをターゲットとするルート・ルールを削除して再度実施します。

  • 削除前
  • 削除後
  • サービス・ゲートウェイを使用する場合
    [opc@private-instance ~]$ oci os object list --bucket-name bucket-test --namespace xxxxxxxxxxxx
    ConnectTimeout:
    {
        "client_version": "Oracle-PythonCLI/3.56.0",
        "logging_tips": "Please run the OCI CLI command using --debug flag to find more debug information.",
        "message": "The connection to endpoint timed out",
        "target_service": "CLI",
        "timestamp": "2025-05-19T08:55:00.403698",
        "troubleshooting_tips": "It looks like a connection timeout, please check your network setting or contact your network administrator. See [https://docs.oracle.com/iaas/Content/API/SDKDocs/clitroubleshooting.htm] for more information about resolving this error. If you are unable to resolve this issue, run this CLI command with --debug option and contact Oracle support and provide them the full error message."
    }
  • プライベート・エンドポイントを使用する場合
    [opc@private-instance ~]$ oci os object list --bucket-name bucket-test --namespace xxxxxxxxxxxx --endpoint https://bucket-pe-xxxxxxxxxxxx.private.objectstorage.ap-tokyo-1.oci.customer-oci.com
    {
      "data": [
        {
          "archival-state": null,
          "etag": "688f1a09-27f2-4a98-9de5-68ccb58becf2",
          "md5": "rhw3xnmKrz/4f/Ph18Z2Uw==",
          "name": "upload_test.txt",
          "size": 20,
          "storage-tier": "Standard",
          "time-created": "2025-05-07T05:45:47.943000+00:00",
          "time-modified": "2025-05-07T05:45:47.943000+00:00"
        }
      ],
      "prefixes": []
    }
    

サービス・ゲートウェイをターゲットとするルート・ルールを削除したことにより、サービス・ゲートウェイを使用する場合は通信のタイムアウトによるエラーが返ってくるようになりました
また、プライベート・エンドポイントを使用する場合はエラーなく正常に通信可能であることが確認できました。

おわりに

いかがだったでしょうか。
今回は、オブジェクト・ストレージのプライベート・エンドポイントを利用して、プライベート・サブネットからオブジェクト・ストレージへアクセスする方法についてご紹介いたしました。

オブジェクト・ストレージへのアクセス方法の一つとしてぜひ検討してみてください。

最後までご覧いただき、ありがとうございました。

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早8年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!
最新技術情報や資格情報をチェックしたいアナタ!毎日遊びに来てください。きっとお役に立てます。