バケットおよびオブジェクトの Amazon S3 アクセス許可の管理 - AWS SDK for Java 1.x

AWS SDK for Java 1.x は 2024 年 7 月 31 日にメンテナンスモードに入り、2025 年 12 月 31 日にサポート終了となります。新しい機能、可用性の向上、セキュリティ更新のために、AWS SDK for Java 2.x に移行することをお勧めします。

バケットおよびオブジェクトの Amazon S3 アクセス許可の管理

Amazon S3 バケットとオブジェクトのアクセスコントロールリスト (ACL) を使用して、Amazon S3 リソースをきめ細かく制御することができます。

注記

これらのコード例では、ユーザーが AWS SDK for Java の使用の内容を理解し、開発用の AWS 認証情報とリージョンのセットアップの情報を使用してデフォルトの AWS 認証情報を設定していることを前提としています。

バケットのアクセスコントロールリストの取得

バケットの現在の ACL を取得するには、AmazonS3 の getBucketAcl メソッドを呼び出して、それにクエリを実行するバケット名を渡します。このメソッドは、AccessControlList オブジェクトを返します。リスト内の各アクセス権を取得するには、その getGrantsAsList メソッドを呼び出します。これにより、Grant オブジェクトの標準 Java リストが返されます。

インポート

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.Grant;

Code

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { AccessControlList acl = s3.getBucketAcl(bucket_name); List<Grant> grants = acl.getGrantsAsList(); for (Grant grant : grants) { System.out.format(" %s: %s\n", grant.getGrantee().getIdentifier(), grant.getPermission().toString()); } } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。

バケットのアクセスコントロールリストの設定

バケットの ACL に許可の追加や変更をするには、AmazonS3 の setBucketAcl メソッドを呼び出します。設定する被付与者やアクセスレベルのリストを含む AccessControlList オブジェクトが使用されます。

インポート

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.EmailAddressGrantee;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { // get the current ACL AccessControlList acl = s3.getBucketAcl(bucket_name); // set access for the grantee EmailAddressGrantee grantee = new EmailAddressGrantee(email); Permission permission = Permission.valueOf(access); acl.grantPermission(grantee, permission); s3.setBucketAcl(bucket_name, acl); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
注記

Grantee クラスを使用して直接被付与者の一意の識別子を提供するか、ここで行ったように、EmailAddressGrantee クラスを使用して被付与者を E メールで設定することができます。

GitHub で完全な例をご覧ください。

オブジェクトのアクセスコントロールリストの取得

オブジェクトの現在の ACL を取得するには、AmazonS3 の getObjectAcl メソッドを呼び出して、それにクエリを実行するバケット名およびオブジェクト名を渡します。getBucketAcl と同様に、このメソッドは各権限を調べるのに使用できる AccessControlList オブジェクトを返します。

インポート

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.Grant;

Code

try { AccessControlList acl = s3.getObjectAcl(bucket_name, object_key); List<Grant> grants = acl.getGrantsAsList(); for (Grant grant : grants) { System.out.format(" %s: %s\n", grant.getGrantee().getIdentifier(), grant.getPermission().toString()); } } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。

オブジェクトのアクセスコントロールリストの設定

オブジェクトの ACL に許可の追加や変更をするには、AmazonS3 の setObjectAcl メソッドを呼び出します。設定する被付与者やアクセスレベルのリストを含む AccessControlList オブジェクトが使用されます。

インポート

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.EmailAddressGrantee;

コード

try { // get the current ACL AccessControlList acl = s3.getObjectAcl(bucket_name, object_key); // set access for the grantee EmailAddressGrantee grantee = new EmailAddressGrantee(email); Permission permission = Permission.valueOf(access); acl.grantPermission(grantee, permission); s3.setObjectAcl(bucket_name, object_key, acl); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } }
注記

Grantee クラスを使用して直接被付与者の一意の識別子を提供するか、ここで行ったように、EmailAddressGrantee クラスを使用して被付与者を E メールで設定することができます。

GitHub で完全な例をご覧ください。

詳細情報