バケットレベルのアクセス制御リスト (ACL) に加えて、Object Storage Service (OSS) はオブジェクトレベルのACLを提供します。 オブジェクトをアップロードするとき、またはアップロードされたオブジェクトのACLを変更するときに、オブジェクトのACLを設定できます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
オブジェクトのACLを設定するには、
oss:PutObjectAcl
権限が必要です。 オブジェクトACLをクエリするには、oss:GetObjectAcl
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
ACLタイプ
次の表に、オブジェクトに対して構成できるACLを示します。
オブジェクトのACLは、オブジェクトが格納されているバケットのACLよりも優先されます。 たとえば、プライベートバケット内のオブジェクトのACLがpublic-readに設定されている場合、匿名ユーザーを含むすべてのユーザーがオブジェクトを読み取ることができます。
ACLタイプ | 説明 | 値 |
バケットから継承 | オブジェクトのACLは、オブジェクトが格納されているバケットのACLと同じです。 これはオブジェクトのデフォルトACLです。 | CannedAccessControlList.Default |
プライベート | オブジェクトを読み書きできるのは、オブジェクト所有者だけです。 他のユーザーはオブジェクトにアクセスできません。 | CannedAccessControlList.Private |
公開読み取り | オブジェクト所有者のみがオブジェクトを書き込むことができます。 匿名ユーザーを含む他のユーザーは、オブジェクトのみを読み取ることができます。 警告 すべてのユーザーがインターネット経由でオブジェクトにアクセスできます。 これにより、オブジェクトへの予期しないアクセスと予期しない高い料金が発生する可能性があります。 オブジェクトACLをpublic-readに設定する場合は注意してください。 | CannedAccessControlList.PublicRead |
パブリック読み取り /書き込み | 匿名ユーザーを含むすべてのユーザーがオブジェクトを読み書きできます。 警告 オブジェクトACLをこの値に設定すると、すべてのユーザーがオブジェクトにアクセスし、インターネット経由でオブジェクトにデータを書き込むことができます。 これにより、バケット内のデータへの不正アクセスと高額の料金が発生する可能性があります。 ユーザーが禁止されているデータまたは情報をアップロードすると、正当な利益と権利が侵害される可能性があります。 したがって、特別な場合を除き、オブジェクトACLをpublic-read-writeに設定しないことをお勧めします。 | CannedAccessControlList.PublicReadWrite |
オブジェクトの ACL の設定
次のサンプルコードは、オブジェクトのACLを設定する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.CannedAccessControlListをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: testfolder/exampleobject.txt。
文字列objectName = "testfolder/exampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// オブジェクトのACLをpublic readに設定します。
ossClient.setObjectAcl(bucketName、objectName、CannedAccessControlList.PublicRead);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
オブジェクトのACLを照会する
次のサンプルコードは、オブジェクトのACLを照会する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.ObjectAclをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: testfolder/exampleobject.txt。
文字列objectName = "testfolder/exampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// オブジェクトのACLを照会します。
ObjectAcl objectAcl = ossClient.getObjectAcl(bucketName, objectName);
System.out.println(objectAcl.getPermission().toString());
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
参考資料
オブジェクトACL管理の完全なサンプルコードについては、『GitHub』をご参照ください。
オブジェクトのACLを設定するためのAPI操作の詳細については、「PutObjectACL」をご参照ください。
オブジェクトのACLを照会するためのAPI操作の詳細については、「GetObjectACL」をご参照ください。