OCI Object Storageをcurlで操作してみる:基本操作編

Oracle Cloud
目次

はじめに

Oracle Cloud Infrastructure(OCI)のObject Storageは、画像、ログ、バックアップファイルなどのデータをオブジェクトとして保存できるクラウドストレージサービスです。

通常、OCIのREST APIを利用するには、リクエストへの署名などの認証処理が必要です。一方、Object Storageの事前認証済リクエスト(Pre-Authenticated Request、以下PAR)を利用すると、専用のURLを通じて、OCIの認証情報を持たないクライアントにも、指定した範囲のアクセスを許可できます。

今回は、OCIコンソールでPARを作成し、curlコマンドを使って次の操作を試します。

  • オブジェクトのアップロード
  • オブジェクトのダウンロード
  • オブジェクトの一覧取得
  • オブジェクトのメタデータ確認
  • カスタムメタデータの設定

最後に、PARの利用上の制約や、URLを安全に管理するための注意点についても説明します。

なお、PAR URL自体がアクセス権限を持つため、この記事では検証用のバケットとファイルを使用し、作業が終わったら不要なPARを削除することを前提とします。

PARの概要

PARは、OCI Object Storageのバケットまたは特定のオブジェクトに対して、期限付きのアクセスURLを発行する機能です。PARの作成時にアクセス対象やアクセス権限を指定することで、利用者にOCIのユーザー名、パスワード、API秘密鍵などを配布することなく、ファイルの受け渡しを実現できます。

注意点としては、PARのURLを知っている人は、PARで設定された範囲でアクセスできてしまいます。PARのURL自体をパスワードと同じように管理する必要があります。

公式ドキュメント:https://docs.oracle.com/ja-jp/iaas/Content/Object/Tasks/usingpreauthenticatedrequests.htm

事前準備

OCI Object Storageのバケットを作成する

OCIコンソールにログインし、対象のコンパートメントにObject Storageのバケットを作成します。

本記事では、次の名前を例として使用します。

項目 設定例
リージョン 東京(ap-tokyo-1)
バケット名 curl-demo-bucket
テストファイル sample.txt
保存するオブジェクト名 sample.txt

実際の環境では、既存のバケットを使用しても構いません。

PARを作成する

今回の検証では、オブジェクトのアップロード、ダウンロード、一覧取得を行うため、読み取りと書き込みを許可するPARを使用します。
OCIコンソールで対象のバケットを開き、次の手順でPARを作成します。
PARの作成者には、付与するアクセス権限に応じたIAM権限も必要です。

  1. バケットの詳細画面を開く
  2. 「管理」から「事前認証済みリクエスト」を開く

    「事前認証済みリクエストの作成」を選択
    PAR
    1. 作成する事前認証済みリクエストのオプションの指定
      PARオブションの指定
        • PARの名前を入力
        • 対象をバケット内のオブジェクトに設定 (上記ではバケットに設定)
        • 必要なアクセス権限を選択 (上記では読取りと書込みを許可)
        • 有効期限を設定
        • バケット・リストの有効化を有効に設定(一覧取得を行うための権限)
        • 「事前認証済リクエストの作成」を押します

        3.発行されたPAR URLの保存 

          1. 事前認証済みリクエストの詳細画面が表示されます

        PARの詳細

        4.事前認証済みリクエストのURLを記録用にコピーします。
           これ以降、このURLは再表示・再取得できないので、忘れずにコピーしてください。

        5.機密情報として扱うため、安全な場所に保存します。
         PAR URLは次のような形式です。
         https://objectstorage.ap-tokyo-1.oraclecloud.com/p/<PAR_TOKEN>/n/<NAMESPACE>/b/<バケット名>/o/
        <PAR_TOKEN>、<NAMESPACE>、<バケット名>を含め、実際に発行されたURLをそのまま使用してください。

        ファイル操作の準備

        準備(1) テストファイルの作成

        ターミナルで、アップロードするファイルを作成します。

        echo "Hello OCI Object Storage!" > sample.txt

        ファイルの内容を確認します。

        cat sample.txt

        実行結果:

        Hello OCI Object Storage!

        準備(2) PAR URLを環境変数に設定する

        PAR URLをコマンドに直接記述することを避けるため、環境変数に設定します。ただし、環境変数も秘密情報を保護する仕組みではありません。シェルの設定ファイルやログ、デバッグ出力、公開リポジトリなどにPAR URLが残らないよう注意してください。

        export PAR_URL='<PARのURL>'

        export PAR_URL='https://objectstorage.ap-tokyo-1.oraclecloud.com/p/...../n/...../b/bkt-pdd2026/o/'

        検証が終了したら、不要になったPARをOCIコンソールから削除してください。

        ファイル操作の実施

        オブジェクトをアップロードする

        まず、ローカルにあるsample.txtをObject Storageへアップロードします。

        curl -fS -X PUT --data-binary @sample.txt ${PAR_URL}sample.txt

        • -f:HTTPエラーが発生した場合に失敗として扱う
        • -S:失敗時にエラーメッセージを表示する
        • -X PUT:オブジェクトを作成・更新するHTTPメソッド
        • –data-binary:ファイルの内容をそのまま送信する
        • PAR_URL の末尾が /o/ であることを前提としており、オブジェクト名(ここではsample.txt)がURLの末尾に追加される

        同じ名前のオブジェクトが存在する場合、アップロードによって既存の内容が上書きされる可能性があります。重要なデータを扱う場合は、オブジェクト名やアクセス権限を事前にご確認ください。

        成功すると、HTTPステータス200 OKが返ります。以下はステータスコードを出力させた実行例です。

        $ curl -sS -f -X PUT --data-binary @sample.txt -o /dev/null -w '%{http_code}' ${PAR_URL}sample.txt

        • -f:HTTPエラーが発生した場合に失敗として扱う
        • -sS は進捗表示を抑えつつ、失敗時のエラーを表示します。
        • -w はステータスコードなどを出力します。

        成功時の出力例

        200

        オブジェクトをダウンロードする

        次に、アップロードしたオブジェクトをローカルファイルへダウンロードします。

        curl -fS -L ${PAR_URL}sample.txt -o downloaded.txt

        各オプションの意味は次のとおりです。

        • -f:HTTPエラーを失敗として扱う
        • -S:失敗時のエラーを表示する
        • -L:リダイレクトに追従する
        • -o downloaded.txt:取得した内容を指定したファイルに保存する

        $ curl -fS -L ${PAR_URL}sample.txt -o downloaded.txt

        ダウンロードしたファイルの内容を確認します。

        cat downloaded.txt

        実行結果:

        Hello OCI Object Storage!

        アップロードしたファイルとダウンロードしたファイルが同じ内容であることを確認しました。

        必要に応じて、ハッシュ値の比較もできます。

        sha256sum sample.txt downloaded.txt

        同じファイルであれば、両方のSHA-256ハッシュ値が一致します。

        c0af560c18c00e3f086a5bbccef58ca7f2ee8eda967a5ec95b542b6bc5f6587e sample.txt c0af560c18c00e3f086a5bbccef58ca7f2ee8eda967a5ec95b542b6bc5f6587e downloaded.txt

        オブジェクトの一覧を取得する

        バケット内のオブジェクト一覧を取得するには、バケット全体を対象としたPARのURLを使用します。

        curl -fS -G ${PAR_URL} --data-urlencode 'fields=name,size,etag,timeCreated,timeModified'

        –data-urlencodeは、クエリパラメータをURLエンコードして送信するために使用します。

        レスポンスはJSON形式です。例えば、次のような結果が返ります。

        {
          "objects": [
            {
              "name": "sample.txt",
              "size": 26,
              "timeCreated": "2026-10-30T00:10:00.005Z",
              "timeModified": "2026-10-30T00:10:00.005Z",
              "etag": "aaaaaaaa-bbbb-cccc-dddd-75a148571b7b"
            }
          ]
        }

        上記はレスポンス形式を示すサンプルであり、実際のETagや日時は環境によって異なります。

        fieldsパラメータを省略すると、基本的にはオブジェクト名が返されます。必要な項目だけを指定することで、サイズや更新日時なども取得できます。

        注意点

        バケット内のオブジェクト一覧を取得するには、PAR作成時に一覧取得を許可する設定が必要です。

        また、一覧取得のレスポンスには件数制限があり、オブジェクト数が多い場合は

        • 一度のレスポンスですべてのオブジェクトが返るとは限らない。
        • 続きがある場合は、レスポンスの nextStartWith を確認します。
        • 続きの一覧を取得したい場合、次のリクエスト、その値を start パラメータに指定します。例えば、前回のレスポンスで nextStartWith が sample-next.txt だった場合、次のように指定します。

        curl -fS -G "${PAR_URL}" --data-urlencode 'fields=name,size,etag,timeCreated,timeModified' --data-urlencode 'start=sample-next.txt'

        ページネーションへの対応が必要になります。大量のファイルを扱う場合は、nextStartWithなどのページネーション情報を確認しながら取得してください。

        オブジェクトのメタデータを確認する

        オブジェクトの内容をダウンロードせずに、HTTPヘッダーからメタデータを確認します。

        curl -fS -I "${PAR_URL}sample.txt"

        -IはHEADリクエストを送信し、レスポンスヘッダーを取得するオプションです。

        成功すると、ヘッダーが返ります。

        環境やレスポンス形式によって表示されるヘッダー名・値は異なるため、実際のレスポンスをご確認ください。

        以下は説明用の出力例です。実際の環境やオブジェクトの設定によって異なります。

        HTTP/1.1 200 OK
        Content-Length: 26
        Last-Modified: Fri, 30 Oct 2026 01:10:00 GMT
        ETag: "aaaaaaaa-bbbb-cccc-dddd-75a148571b7b"
        Content-Type: application/x-www-form-urlencoded

         

        各項目の意味は次のとおりです。

        項目 内容
        Content-Length オブジェクトのサイズ(バイト)
        Last-Modified オブジェクトの最終更新日時
        ETag オブジェクトの識別・変更確認に利用できる値
        Content-Type オブジェクトのコンテンツタイプ

        環境やレスポンス形式によって表示されるヘッダー名・値は異なります。筆者の環境では、17項目出力されました。

        アップロード時の応用

        カスタムメタデータの設定

        アップロード時に、独自のメタデータを設定できます。

        curl -fS -X PUT -H 'opc-meta-purpose: curl-demo' -H 'opc-meta-environment: test' --data-binary '@sample.txt' ${PAR_URL}sample.txt

        この例では、opc-meta-で始まるヘッダーを使用して、独自のメタデータを設定しています。

        最新のメタデータを確認します。(前述のコマンド)

        curl -fS -I   "${PAR_URL}sample.txt"

        指定したヘッダーが追加されたことが確認できます。

        項目 内容
        opc-meta-purpose curl-demo
        opc-meta-environment test

        例では同じオブジェクト名への再アップロードを行うため、既存の内容を更新します。

        マルチパートアップロードの利用

        大きなオブジェクトのアップロードには、マルチパートアップロードが利用できます。

        ネットワークや環境の制約があり、大きなサイズのファイルをアップロードできない場合、もしくは並行処理で高速化したい場合に有用です。
        テスト用の5GBのファイル(5G-File.txt)を作成します。

        dd if=/dev/zero of=5G-File.txt bs=1024k count=5000

        ファイルの分割

        splitコマンドを使ってファイルを分割します。

        例: 5G-File.txtを1GiB単位でファイル名divNN(数字)に分割する例。

         split -b 1G -d 5G-File.txt div

        1GiB単位で分割するため、5GiBちょうどのファイルなら5個、最後のパートが小さくなる場合もあります。
        出力されたファイルを確認します。

         ls -l

        total 10240000
        
        -rw-r--r--. 1 opc opc 5242880000 Oct 30 01:00 5G-File.txt
        -rw-r--r--. 1 opc opc 1073741824 Oct 30 02:00 div00
        -rw-r--r--. 1 opc opc 1073741824 Oct 30 02:00 div01
        -rw-r--r--. 1 opc opc 1073741824 Oct 30 02:00 div02
        -rw-r--r--. 1 opc opc 1073741824 Oct 30 02:00 div03
        -rw-r--r--. 1 opc opc 947912704 Oct 30 02:00 div04

         

        1GB以下に分割された5つのファイル(div00~div04)が存在していることを確認しました。

        マルチパートアップロード先を取得

        マルチパートアップロードの開始は、PARの対象オブジェクトURLに対して opc-multipart: true を付けます。
        レスポンスで返される accessUri を使って後続処理を行います。

        curl -X PUT -H “opc-multipart:true” ${PAR_URL}<オブジェクト名>{“namespace”:”xxxxxxxxxxxxx”,”bucket”:”bkt-pdd2026“,”object”:”5G-File.txt”,”uploadId”:”<uploadId(返答)>”,”timeCreated”:”2026-10-30T03:00:00.000Z”,”storageTier”:”Standard”,”accessUri”:”<accessUri(返答)>”}
        マルチパートアップロードのアクセスURLは、accessUriをターゲット・リージョンのオブジェクト・ストレージ・ホスト名とともに使用します。このURLを環境変数 MPU_URL に保管しておきます。

        export MPU_URL='<マルチパートアップロードのアクセスURL>'

        分割されたファイルのアップロード

        前のステップで分割された5つのファイル(div00~div04)全てをアップロードします。
        その際、アクセスURLの最後にパート番号を指定します。今回は5つのパートに分けてアップロードしているので、次のPUTコマンドを発行します。
        例:

        curl -X PUT --data-binary @div00 ${MPU_URL}1
        curl -X PUT --data-binary @div01 ${MPU_URL}2
        curl -X PUT --data-binary @div02 ${MPU_URL}3
        curl -X PUT --data-binary @div03 ${MPU_URL}4
        curl -X PUT --data-binary @div04 ${MPU_URL}5

        コミット

        マルチパートアップロードのアクセスURLを指定したPOSTを実行することで、マルチパートアップロードをコミットします。

        例:

        curl -X POST ${MPU_URL}

        管理コンソールを使い、対応するバケットの内容を確認して、マルチパートアップロードで宣言したオブジェクトが適切なサイズで存在することを確認できます。

        注意点

        オブジェクトの削除

        OCI Object StorageのPARは、オブジェクトの削除には対応していないため、次のようなリクエストをPAR URLに対して実行しても、オブジェクト削除の方法としては利用できません。
        curl -X DELETE "${PAR_URL}sample.txt"

        オブジェクトを削除するには、OCIコンソールやOCI CLIなど、適切な認証と権限を持つ別の方法を使用します。

        代替策: OCI CLIを使用したオブジェクト削除

        OCI CLIが設定済みで、対象のバケットとオブジェクトを削除する権限がある場合は、OCI CLIで削除できます。

        実行例 (バケット「bkt-pdd2026」にあるオブジェクト「sample.txt」の削除)

        oci os object delete --bucket-name bkt-pdd2026 --name sample.txt --force

        –force は確認プロンプトを省略するため、実行前に対象バケットとオブジェクト名をご確認ください

        PARの無効化

        オブジェクトを削除する代わりに、発行済みのPARを無効化できます。

        OCIコンソールの対象バケットから「事前認証済みリクエスト」を開き、対象のPARを削除します。

        PARを削除すると、そのURLを利用したアクセスはできなくなります。ただし、これはアクセスURLを無効化する操作であり、バケット内のオブジェクトを削除する操作ではありません。

        セキュリティ上の注意点

        PAR URLをそのまま共有してしまうと、設定された権限の範囲で第三者がアクセスできてしまいます。PARのURLは、秘密鍵やパスワードに準じて管理するという説明は維持すべきです。次の点に注意してください。

        • 必要最小限のアクセス権限を付与する
        • 有効期限を必要な期間に限定する
        • PAR URLを公開リポジトリやログに出力しない
        • 用途が終了したPARは削除する
        • アップロード先やオブジェクト名を十分に確認する
        • 本番環境では、誤操作による上書きを防ぐ運用を設ける

        まとめ

        今回は、OCI Object StorageのPARを利用して、curlコマンドからオブジェクトを操作する方法を紹介しました。

        PARを利用すると、OCIのAPI秘密鍵などをクライアントに配布せずに、指定した範囲のオブジェクトへのアクセスを許可できます。curlを使うことで、アップロード、ダウンロード、一覧取得、メタデータ確認などの操作を簡潔なHTTPリクエストで実行できます。

        一方、利用にあたっては、次の点に注意が必要です。

        • PAR URLは、知っている人が設定された権限の範囲でアクセスできるため、機密情報として管理する
        • アクセス範囲と有効期限を必要最小限に設定する
        • 用途が終了したPARは削除し、不要なアクセスを無効化することを推奨
        • 既存オブジェクトへのアップロードでは、内容が上書きされる可能性がある
        • オブジェクトの削除には、OCI CLIなど、適切な認証と権限を持つ別の手段が必要
        • 大容量オブジェクトのアップロードには、マルチパートアップロードが効果的

        PARは手軽に利用できる一方、URLの管理とアクセス権限の設計が重要です。用途に応じて適切な方法を選択し、安全にObject Storageを活用しましょう。セキュリティを強化する場合、API署名認証を実装する等の対応が考えられます。機会があれば別記事でお伝えするしようと思います。

        公式参考資料:

         

        よかったらシェアしてね!
        • URLをコピーしました!
        目次