버킷 및 객체에 대한 Amazon S3 액세스 권한 관리 - AWS SDK for Java 1.x

AWS SDK for Java 1.x는 2024년 7월 31일부터 유지 관리 모드로 전환되었으며 2025년 12월 end-of-support31일에 출시될 예정입니다. 새 기능, 가용성 개선 사항 및 AWS SDK for Java 2.x보안 업데이트를 계속 받으려면 로 마이그레이션하는 것이 좋습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

버킷 및 객체에 대한 Amazon S3 액세스 권한 관리

Amazon S3 리소스를 세부적으로 제어하려는 경우 Amazon S3 버킷 및 객체에 대한 ACL(액세스 제어 목록)을 사용할 수 있습니다.

참고

이 코드 예제에서는 사용자가 AWS SDK for Java 사용의 내용을 이해하고 개발을 위한 AWS 자격 증명 및 리전 설정의 정보를 사용하여 기본 AWS 자격 증명을 구성했다고 가정합니다.

버킷에 대한 액세스 제어 목록 가져오기

버킷에 대한 현재 ACL(액세스 제어 목록)을 가져오려면 AmazonS3의 getBucketAcl 메서드를 호출하고 쿼리할 버킷 이름을 메서드에 전달합니다. 이 메서드는 AccessControlList 객체를 반환합니다. 각 액세스 권한 부여(grant) 목록을 가져오려면 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;

코드

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 클래스를 사용하여 이메일을 통해 피부여자를 설정할 수 있습니다.

GitHub의 전체 예제를 참조하십시오.

객체에 대한 액세스 제어 목록 가져오기

객체에 대한 현재 ACL(액세스 제어 목록)을 가져오려면 AmazonS3의 getObjectAcl 메서드를 호출하고 쿼리할 버킷 이름객체 이름을 이 메서드에 전달합니다. getBucketAcl과 마찬가지로 이 메서드는 각 Grant 검사하는 데 사용할 수 있는 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;

코드

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 클래스를 사용하여 이메일을 통해 피부여자를 설정할 수 있습니다.

GitHub의 전체 예제를 참조하십시오.

추가 정보