Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OCIオブジェクト・ストレージ - S3互換APIの利用

OCIオブジェクト・ストレージ - S3互換APIの利用

Oracle Cloud Infrastructure (OCI)の Object Storage で、Amazon S3互換API を利用するための技術資料です。
OCIのオブジェクト・ストレージ・サービスは、OCIのネイティブAPIだけでなく、Amazon S3互換のAPIも利用でき、awscli、s3api、s3fs-fuse などのほか、S3互換の様々なクライアントからアクセスすることができます。
この資料では、S3互換APIを利用する上での注意点に特化して解説しています。

oracle4engineer

June 07, 2021
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Oracle Cloud Infrastructure Object Storage Amazon S3互換APIの利用 Using Amazon S3

    Compatible API Oracle Cloud Infrastructure 技術資料 2021年6月
  2. OCI の Object Storage サービスは、3種類のAPIを通じた操作をサポート • OCI ネイティブ API •

    OCIの通常のAPIと同じインタフェース、認証、クライアントツールでコールするAPI • OCI Object Storageのフル機能をサポート • AmazonS3互換API • S3を利用するクライアントツールを利用してAPIコールができるため、既存アプリを流用する際に便利 • awscli、s3api、s3fs-fuse、その他サードパーティ製ツールなど • Openstack SWIFT互換API • SWIFTを利用するクライアントツールを利用してAPIコールができるため、既存アプリを流用する際に便利 • swift command-line client • OCI Classic のオブジェクト・ストレージもSWIFT互換APIを利用するため、OCI Classicからのデータ移行にもよく利用される POINT! : どのAPIを利用しても、相互に同じバケット、オブジェクトへのアクセスが可能 Amazon S3互換API経由でOCIObject Storageを操作する [Date] Copyright © 2021 Oracle and/or its affiliates. 2 この資料の取扱範囲
  3. Amazon S3互換APIは、OCIネイティブAPIとは異な る認証方式のため、資格証明も異なるものを利用 する必要がある OCIのネイティブAPI • PEM形式の非対称暗号を利用 • 公開鍵を「ユーザー」の「APIキー」に登録 •

    秘密鍵を資格証明として提示して認証 Amazon S3互換API • OCIコンソールの「顧客秘密キー」でアクセ ス・キーを生成 • API認証時にそのアクセス・キーを資格証明と して提示 ユーザーの詳細 画面 1. Amazon S3互換APIの専用の資格証明を利用する [Date] Copyright © 2021 Oracle and/or its affiliates. 4
  4. テナンシ詳細画面 2. 利用するコンパートメントを固定する 5 S3にはそもそもOCIにあるコンパートメントの概 念が存在しないため、Amazon S3互換APIを利用す る場合、(ネイティブAPIのように)APIコール中に コンパートメントの指定ができない →

    S3互換APIが利用するコンパートメントを予め1 つに固定する必要がある • 設定できるのはテナンシー単位 • デフォルトはルート・コンパートメントに指 定 • 注意!! コンパートメントを変更する場合、(な ぜか)操作はサブスクライブしている全ての リージョンで実施する必要がある!! Copyright © 2021 Oracle and/or its affiliates.
  5. OCIのオブジェクト・ストレージは、S3のようなグロー バルに共有された名前空間(Namespace)ではなく、テナ ンシ(クラウド・アカウント)毎に独自の名前空間を持つ つまり・・・ • テナンシが異なれば、同じ名前のバケットを持つこ とができる • API利用時に、テナンシと対になる「名前空間」の 名称がURIに入ることを意識する必要がある

    • Amazon S3のアクセスURI • https://mybucket.s3-ap-northeast- 1.amazonaws.com/myobject • OCIのS3互換APIのアクセスURI • https://mynamespace.compat.objectstorage.ap- tokyo-1.oraclecloud.com/mybucket/myobject テナンシ詳細画面 3. OCIのオブジェクト・ストレージが テナンシ(クラウド・アカウント)毎の名前空間をサポートしていることを理解する 6/6/2021 6 ここの値 ※現在のテナンシでは、作成時にテナンシ名とは異なる ランダムな値が自動生成されます Copyright © 2021 Oracle and/or its affiliates.
  6. 4. エンドポイントのURIパスを指定してコールする必要がある [Date] Copyright © 2021 Oracle and/or its affiliates.

    7 OCIのオブジェクト・ストレージは、Amazon S3とは異なるエンドポイントを持つため、S3のクライアン トがawsのリージョン名(ap-northeast-1など)からエンドポイントを自動生成するような仕組みは利用でき ず、エンドポイントのURIを直接指定してコールする必要がある AWS CLIの例 • 間違ったコール方法 • 正しいコール方法 指定するエンドポイントのURIはAPIリファレンスドキュメントのこちらに掲載 $ aws s3 --region ap-tokyo-1 ls s3://mybucket Could not connect to the endpoint URL: "https://mybucket.s3.ap-tokyo-1.amazonaws.com/?list- type=2&prefix=&delimiter=%2F&encoding-type=url" $ aws s3 --endpoint-url https://mynamespace.compat.objectstorage.ap-tokyo-1.oraclecloud.com ls s3://mybucket/
  7. 5. ホームリージョン以外はリージョン識別子を明示的に指定する必要がある [Date] Copyright © 2021 Oracle and/or its affiliates.

    8 ホームリージョン以外のリージョンのバケットにアクセスする場合、エンドポイントURIに含まれるリー ジョン識別子(ap-tokyo-1など)の他にも、リージョン識別子も明示的に指定する必要がある AWS CLIの例 • ホームリージョン以外のリージョンに対する間違ったコール方法 • 正しいコール方法 S3クライアントによっては、明示的なリージョン指定がうまく動かないものがあり、そのような場合は S3互換API経由ではホームリージョンでしか利用できない場合がある(例 : Cloudberryなど) $ aws s3 --endpoint-url https://mynamespace.compat.objectstorage.ap-tokyo-1.oraclecloud.com ls s3://mybucket/ An error occurred (SignatureDoesNotMatch) when calling the ListObjectsV2 operation: The required information to complete authentication was not provided. $ aws s3 --region ap-tokyo-1 --endpoint-url https://mynamespace.compat.objectstorage.ap-tokyo- 1.oraclecloud.com ls s3://mybucket/ 2021-06-04 13:23:09 209715200 myobject
  8. アクセス制御に関してAWSユーザーが押さえておくべきいくつかのポイント • OCIは、オブジェクト・ストレージのアクセス制御を全てIAMのみで実行する • S3のACLやバケットポリシーのような単体のアクセス制御の仕組みを持たない • そのためS3互換APIのみでは完結できず、権限の制御操作はOCIのIAMのAPI(コンソール)操作も必要 • OCIのIAMは、英語によるポリシー構文を記述することで有効になる •

    allow group storage-admins to manage object-family in tenancy where bucket.name = 'mybucket' • コンソールのポリシービルダーや、ドキュメントのポリシーリファレンスを参考に構文を構築 • OCIのIAMは「基本的に全てDenyされている状態」から始まる • 必要な権限を「Allow」構文で個別に付与していく必要がある • 一括でAllowして、個別に小さい箇所をDenyしていくような指定は不可(そもそもDeny文が書けない) 6. アクセス制御にはOCIのIAM機能を利用する 6/6/2021 9 Copyright © 2021 Oracle and/or its affiliates.
  9. IAMを利用したオブジェクト・ストレージのポリシー構文の例 (参考ドキュメント) • mys3apiコンパートメントのオブジェクト・ストレージの全管理権限を付与 • allow group mybucket-admins to manage

    object-family in compartment mys3api • mybucketの中のオブジェクトの操作権限を付与(テナンシ全体) • allow group mybucket-users to use buckets in tenancy where bucket.name = 'mybucket' allow group mybucket-users to manage objects in tenancy where bucket.name = 'mybucket' • 名前が image または pic で始まるオブジェクトの読み込み権限を付与 • allow group image-readers to read objects in tenancy where any {object.name = '/image*/' and object.name = '/pic*/'} allow gropu image-readers to inspect buckets in tenancy • クライアントのIPアドレス範囲を限定するネットワークソース intranet からのアクセスのみを許可 • allow group internal-users to manage object-family in tenancy where request.networkSource.name = 'intranet' 6. アクセス制御にはOCIのIAM機能を利用する(続き) 6/6/2021 10 Copyright © 2021 Oracle and/or its affiliates.
  10. OCI IAMの参考ドキュメント • Oracle Cloud Infrastructureドキュメント • ポリシー構文 • 高度なポリシーの機能

    • ポリシー・リファレンス/オブジェクト・ストレージ、アーカイブ・ストレージおよびデータ転送の詳細 • OCI活用資料集 : IDおよびアクセス管理(IAM)概要 6. アクセス制御にはOCIのIAM機能を利用する(続き) 6/6/2021 11 Copyright © 2021 Oracle and/or its affiliates.
  11. オブジェクトのアップロード (マルチパートアップロードも可能) • aws s3 --endpoint-url https://mynamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com cp mylocalfile s3://mybucket/

    バケット内のオブジェクトのリスト • aws s3 --endpoint-url https://mynamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com ls s3://mybucket リストその2(S3APIメソッドの直接コール) • aws s3api list-objects --endpoint-url https://mynamespace.compat.objectstorage.us-ashburn- 1.oraclecloud.com --bucket mybucket キーワードに一致するオブジェクトのヘッダーを見る • aws s3api head-object --endpoint-url https://mynamespace.compat.objectstorage.us-ashburn- 1.oraclecloud.com --bucket mybucket --key myquerykeyword awscli からOCI Object StorageのS3互換APIにアクセスするコマンドの例 [Date] Copyright © 2021 Oracle and/or its affiliates. 13
  12. Amazon S3の全てのAPIを、OCIのAmazon S3互換APIがサポートしているわけではないので注意 サポートしているAPIのリストは Oracle Cloud Infrastructure Documentation : Amazon

    S3 Compatibility API Support に記載 (最新情報は英語版Documentの参照をお勧めします) Amazon S3互換APIでサポートするAPIコール [Date] Copyright © 2021 Oracle and/or its affiliates. 15
  13. バージョニング • S3のバージョニング、OCIオブジェクト・ストレージのバージョニングはよく似た機能だが、現在の ところS3互換APIを通じたOCIオブジェクト・ストレージのバージョニング操作はできない • 将来実装の計画あり バケットに対するオブジェクト・ロックの設定 • S3のオブジェクト・ロック機能に相当するものとして、OCIでは保持ルール(Retention Rule)

    というバ ケット毎に全てのオブジェクトを強制的にイミュータブルに設定する機能がある • 保持ルール機能の設定はバケット単位で実施するが、S3互換APIからは操作できない • 保持ルールが有効化されたバケットに対するS3互換APIを通じたPUTやGET操作は可能 ライフサイクル・ルールの設定 • S3のライフサイクル・ルール、OCIオブジェクト・ストレージのライフサイクル・ルールはよく似た 機能だが、現在のところS3互換APIを通じた操作はサポートしない • ライフサイクル・ルールが有効化されたバケットに対するS3互換APIを通じたPUTやGET操作は可能 Amazon S3互換APIでサポートしない操作 [Date] Copyright © 2021 Oracle and/or its affiliates. 16
  14. Amazon S3互換APIでサポートしない操作 [Date] Copyright © 2021 Oracle and/or its affiliates.

    17 CORS(Cross-Origin Resource Sharing) • CORSは、HTTPヘッダーを用いてコンテンツなどを参照できるドメインやメソッド等を限定できる機 能 • OCIネイティブAPIでは以下のCORSヘッダを返すように設定済みだが、ユーザーによる変更不可 • Access-Control-Allow-Origin: * • Access-Control-Allow-Methods: POST,PUT,GET,HEAD,DELETE,OPTIONS • Access-Control-Allow-Credentials: true • S3互換APIではレスポンスにそもそもCORSヘッダーが含まれない
  15. Our mission is to help people see data in new

    ways, discover insights, unlock endless possibilities.