버킷 정책을 사용한 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 버킷에 대한 액세스를 관리할 수 있습니다.

버킷 정책 설정

다음과 같은 방법으로 특정 S3 버킷에 대한 버킷 정책을 설정할 수 있습니다.

  • AmazonS3 클라이언트의 setBucketPolicy를 호출하고 이 메서드에 SetBucketPolicyRequest 지정

  • 버킷 이름과 정책 텍스트(JSON 형식)를 사용하는 setBucketPolicy 오버로드를 사용하여 정책을 직접 설정

가져옵니다.

import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.policy.Policy; import com.amazonaws.auth.policy.Principal;

코드

s3.setBucketPolicy(bucket_name, policy_text); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Policy 클래스를 사용하여 정책 생성 또는 검사

setBucketPolicy에 버킷 정책을 제공하려는 경우 다음을 수행합니다.

  • 정책을 JSON 형식 텍스트 문자열로 직접 지정

  • Policy 클래스를 사용하여 정책 빌드

Policy 클래스를 사용하면 텍스트 문자열에 대한 올바른 형식 지정에 대해 걱정할 필요가 없습니다. Policy 클래스에서 JSON 정책 텍스트를 가져오려면 toJson 메서드를 사용합니다.

가져옵니다.

import com.amazonaws.auth.policy.Resource; import com.amazonaws.auth.policy.Statement; import com.amazonaws.auth.policy.actions.S3Actions; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder;

코드

new Statement(Statement.Effect.Allow) .withPrincipals(Principal.AllUsers) .withActions(S3Actions.GetObject) .withResources(new Resource( "{region-arn}s3:::" + bucket_name + "/*"))); return bucket_policy.toJson();

Policy 클래스는 전달된 JSON 문자열을 사용하여 정책을 빌드할 수 있는 fromJson 메서드도 제공합니다. 이 메서드는 해당 텍스트를 유효한 정책 구조로 변환할 수 있는지 검사하며, 정책 텍스트가 유효하지 않은 경우 실패하고 IllegalArgumentException가 발생합니다.

Policy bucket_policy = null; try { bucket_policy = Policy.fromJson(file_text.toString()); } catch (IllegalArgumentException e) { System.out.format("Invalid policy text in file: \"%s\"", policy_file); System.out.println(e.getMessage()); }

이 기술을 사용하여 파일이나 기타 수단에서 읽어온 정책을 사전 검사할 수 있습니다.

GitHub의 전체 예제를 참조하세요.

버킷 정책 가져오기

Amazon S3 버킷에 대한 정책을 가져오려면 AmazonS3 클라이언트의 getBucketPolicy 메서드를 호출하고 정책을 가져올 버킷의 이름을 이 메서드에 전달합니다.

가져옵니다.

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

코드

try { BucketPolicy bucket_policy = s3.getBucketPolicy(bucket_name); policy_text = bucket_policy.getPolicyText(); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

이름이 지정된 버킷이 없거나, 해당 버킷에 대한 액세스 권한이 없거나, 버킷 정책이 없는 경우 AmazonServiceException이 발생합니다.

GitHub의 전체 예제를 참조하세요.

버킷 정책 삭제

버킷 정책을 삭제하려면 AmazonS3 클라이언트의 deleteBucketPolicy를 호출하고 이 메서드에 버킷 이름을 제공합니다.

가져옵니다.

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

코드

try { s3.deleteBucketPolicy(bucket_name); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

버킷에 정책이 아직 없더라도 이 메서드는 성공합니다. 존재하지 않는 버킷 이름을 지정하거나 해당 버킷에 대한 액세스 권한이 없는 경우 AmazonServiceException이 발생합니다.

GitHub의 전체 예제를 참조하세요.

추가 정보