オブジェクト・ストレージのAmazon S3 Compatibility APIのサポート
Object StorageがAmazon S3 Compatibility APIをどのようにサポートしているかをご紹介します。
Amazon S3 Compatibility APIのサポートは、バケット・レベルおよびオブジェクト・レベルで提供されます。Amazon S3 Compatibility APIはバージョンIDをサポートしています。
バケットAPI
次のバケットAPIがサポートされています:
- DeleteBucket
 - GetLocation
 - HeadBucket
 - GetService (すべてのバケットをリスト)
 - ListObjects
 - PutBucket
 
オブジェクトAPI
次のオブジェクトAPIがサポートされています:
マルチパート・アップロードAPI
次のマルチパート・アップロードAPIがサポートされています:
タグ付けAPI
次のタグ付けAPIがサポートされています:
SSE-Cのサポート
オプションのAPIヘッダーを使用すると、Object Storageとの間でアップロードおよびダウンロードされたオブジェクトの暗号化および暗号化に使用される独自の256ビットAES暗号化キーを指定できます。
サーバー側暗号化に独自のキーを使用するには、次の3つのリクエスト・ヘッダーを暗号化キー情報とともに指定します:
| ヘッダー | 説明 | サポートされるAPI | 
|---|---|---|
x-amz-server-side-encryption-customer-algorithm
 | 
暗号化アルゴリズムとしてAES256を指定します。 | |
x-amz-server-side-encryption-customer-key
 | 
データの暗号化または復号化に使用するbase64エンコードの256ビット暗号化キーを指定します。 | |
x-amz-server-side-encryption-customer-key-md5
 | 
暗号化キーのbase64エンコードの128ビットMD5ダイジェストを指定します。この値は、暗号化キーの整合性チェックに使用されます。 | 
オブジェクト・ストレージには、オブジェクトやパートをコピーするための別個のAPIが用意されています。Amazon S3は、PutObjectおよびUploadPartに次のヘッダーが存在することで、コピー操作を検索します。SSE-Cキーで暗号化されたソース・オブジェクトをコピーするには、オブジェクト・ストレージでオブジェクトを復号化できるように、これら3つのヘッダーを指定する必要があります。
| ヘッダー | 説明 | サポートされるAPI | 
|---|---|---|
x-amz-copy-source-server-side-encryption-customer-algorithm
 | 
ソース・オブジェクトの復号化に使用する暗号化アルゴリズムとしてAES256を指定します。 | |
x-amz-copy-source-server-side-encryption-customer-key
 | 
ソース・オブジェクトの復号化に使用するbase64エンコードの256ビット暗号化キーを指定します。 | |
x-amz-copy-source-server-side-encryption-customer-key-md5
 | 
ソース・オブジェクトの復号化に使用する暗号化キーのbase64エンコードの128ビットMD5ダイジェストを指定します。 | 
Vault内の独自のキーを使用した暗号化のサポート
オプションのAPIヘッダーを使用すると、Vault内の独自の暗号化キーを指定して、Object Storageにアップロードされたオブジェクトを暗号化できます。
サーバー側暗号化にVault内の独自のキーを使用するには、Vault内のキーのOCIDで次のリクエスト・ヘッダーを指定します:
| ヘッダー | 説明 | サポートされるAPI | 
|---|---|---|
x-amz-server-side-encryption-aws-kms-key-id
 | 
オブジェクトの暗号化に使用されるVault内の既存のキーのOCID。 | 
サポートされるAmazon S3クライアント
様々なクライアント・アプリケーションを構成して、オブジェクト・ストレージのAmazon S3互換エンドポイントと通信できます。このトピックでは、サポートされているAmazon S3クライアントの構成例をいくつか示します。Amazon S3 Compatibility APIの前提条件を確認してください。
AWS SDK for Java
AWS SDK for Javaのリポジトリ、ファイルのダウンロードおよびドキュメントのリンクは、GitHub (https://github.com/aws/aws-sdk-java)にあります。
オブジェクト・ストレージを使用するようにAWS SDK for Javaを構成する例を次に示します
                // Put the Access Key and Secret Key here
                
AWSCredentialsProvider credentials = new AWSStaticCredentialsProvider(new BasicAWSCredentials(
 "gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
                         "7fa22331ebe62bf4605dc9a42aaeexampleuniqueID"))));
// Your namespace
String namespace = "namespace";
// The region to connect to
String region = "us-ashburn-1";
// Create an S3 client pointing at the region
String endpoint = String.format("%s.compat.objectstorage.%s.oraclecloud.com",namespace,region);
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
AmazonS3 client = AmazonS3Client.builder()
 .standard()
 .withCredentials(credentials)
 .withEndpointConfiguration(endpointConfiguration)
 .disableChunkedEncoding()
 .enablePathStyleAccess()
 .build();AWS SDK for Javascript
AWS SDK for Javascriptのリポジトリ、ドキュメント・リンクおよびインストール手順は、GitHub (https://github.com/aws/aws-sdk-js)にあります。
オブジェクト・ストレージを使用するようにAWS SDK for Javascriptを構成する例を次に示します
s3 = new AWS.S3({
  region: 'us-ashburn-1',
  endpoint: 'https://' + mynamespace + '.compat.objectstorage.us-ashburn-1.oraclecloud.com',
  accessKeyId: 'gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID',
  secretAccessKey: '7fa22331ebe62bf4605dc9a42aaeexampleuniqueID',
  s3ForcePathStyle: true,
  signatureVersion: 'v4',
});AWS SDK for Python (Boto3)
AWS SDK for Python (Boto3)のリポジトリ、ドキュメント・リンクおよびインストール手順は、GitHub (https://github.com/boto/boto3)にあります。
オブジェクト・ストレージを使用するようにAWS SDK for Pythonを構成する例を次に示します
import boto3
  
s3 = boto3.resource(
    's3',
    aws_access_key_id="gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
    aws_secret_access_key="7fa22331ebe62bf4605dc9a42aaeexampleuniqueID",
    region_name="us-phoenix-1", # Region name here that matches the endpoint
    endpoint_url="https://mynamespace.compat.objectstorage.us-phoenix-1.oraclecloud.com" # Include your namespace in the URL
)
  
# Print out the bucket names
for bucket in s3.buckets.all():
    print bucket.names3fsを使用したオブジェクト・ストレージ・バケットのマウント
s3fsを使用すると、LinuxおよびmacOSでオブジェクト・ストレージをファイル・システムとしてマウントできます。s3fsのリポジトリ、ドキュメント・リンク、インストール手順および例は、GitHub (https://github.com/s3fs-fuse/s3fs-fuse)にあります。
s3fsは、すべてのアプリケーションに適しているわけではありません。次の制限事項を理解してください:
- オブジェクト・ストレージ・サービスは、ローカル・ファイル・システムと比較してレイテンシが長く、ランダムな書込みアクセス権がありません。s3fsは、大きいファイルのみを読み取るワークロードに対して最適なスループットを実現します。
 - ファイルを部分的に更新することはできないため、1バイトを変更するだけでもファイル全体をアップロードする必要があります。
 - ファイルへのランダムな書込みまたは追加を行うには、ファイル全体をリライトする必要があります。
 - s3fsは部分的なダウンロードをサポートしていないため、ファイルの1バイトを読み取るだけの場合でも、ファイル全体をダウンロードする必要があります。
 - s3fsは、サーバー側のファイル・コピーをサポートしていません。コピーしたファイルは、まずクライアントにダウンロードしてから、新しい場所にアップロードする必要があります。
 - ディレクトリのリストなどのメタデータ操作の際には、ネットワーク・レイテンシによりパフォーマンスが低下します。
 - s3fsは、ハード・リンクやファイルまたはディレクトリのアトミックな名前変更をサポートしていません。
 - s3fsは、同じバケットをマウントする複数のクライアント間の調整を行いません。
 
オブジェクト・ストレージ・バケットをファイル・システムとしてマウントするには
オブジェクト・ストレージ・バケットのマウントのトラブルシューティングを行うには
- 認可エラーが発生した場合は、IAMポリシーを確認し、バケットをファイル・システムとしてマウントできるポリシーがあることを確認します。例:
Allow group s3fsAdmins to manage object-family in compartment MyCompartment - s3fsコマンドのURLで正しいネームスペース名を使用していることを確認します。ネームスペース名を確認するには、オブジェクト・ストレージ・ネームスペースに関する項を参照してください。
 - マウントしようとしている名前付きバケットが存在し、アクセス権があるコンパートメントにあることを確認します。次のいずれかの方法を使用して、バケット名を確認します: 
- コンソールにログインし、アクセス権があるコンパートメントで名前付きバケットを見つけます。
 - CLIコマンド
oci os bucket list --namespace <object_storage_namespace> --compartment-id <target_compartment_id>を使用します。 
 - ホーム・リージョン以外のリージョンで作成されたバケットをマウントするには、
urlパラメータとendpointパラメータの両方にそのリージョンを指定する必要があります。 - バケットをルート・ユーザーとしてマウントした場合、
-o allow_otherをs3fsコマンドに追加するか、allow_otherを/etc/fstabマウント・オプションに追加しないかぎり、他のユーザーはバケット内のオブジェクトをリストまたはアクセスできません。特定のUIDおよびGIDパラメータを指定して、ユーザー・アクセスの詳細を指定することもできます。 - 
トラブルシューティング・ソリューションを確認して検証した上で、サポートに連絡する必要がある場合は、DEBUGモードでmountコマンドを再度実行して、障害の詳細を取得します。コマンドの最後に次を追加して、出力を保存します:
-o dbglevel=info -f -o curldbg 
ファイル・システムからオブジェクト・ストレージ・バケットをアンマウントするには
umount /path/to/<local_directory_name>