일반 목적 버킷에서 ABAC 활성화
일반 목적 버킷에서 ABAC 활성화
특성 기반 접근 제어(ABAC)는 특성, 즉 태그에 기반해 권한을 정의하는 인가 전략이에요. 기본적으로 ABAC는 모든 Amazon S3 일반 목적 버킷에서 비활성화되어 있어요. 일반 목적 버킷에 ABAC를 사용하려면 ABAC를 활성화해야 해요.
출처: 문서
본문
일반 목적 버킷에 ABAC를 활성화하기 전에 먼저 다음 주제에서 설명하는 작업을 완료할 것을 권장해요.
ABAC 활성화 전 정책 감사 (Auditing your policies before enabling ABAC)
버킷에 ABAC를 활성화하기 전에 버킷에 태그가 있다면 접근 제어 정책을 감사해, 태그 기반 조건이 버킷의 기존 태그 중 하나를 참조하는지 검토해요. 참조한다면 이 정책들이 의도대로 설정되었는지, 그리고 태그 기반 접근 제어를 활성화하는 것이 Amazon S3 워크플로우에 의도하지 않은 인가 변경을 만들지 않는지 확인해요. 이렇게 하면 버킷에서 ABAC를 활성화한 뒤에도 정책이 의도대로 작동하는지 확인할 수 있어요. 태그와 특성 기반 조건 사용 예시는 S3 일반 목적 버킷에서 태그 사용을 참고하세요.
IAM 정책에 필요한 권한 포함 (Including the required permissions in your IAM policies)
버킷에 ABAC를 활성화하려면 다음 Amazon S3 권한이 필요해요.
s3:PutBucketAbac– 일반 목적 버킷의 ABAC 상태를 업데이트해요.s3:GetBucketAbac– 일반 목적 버킷의 ABAC 상태를 확인해요.
ABAC를 활성화하면 버킷에 태그를 추가하거나 삭제할 때 이전에 사용하던 권한인 PutBucketTagging 또는 DeleteBucketTagging은 더 이상 작동하지 않아요. 대신 TagResource와 UntagResource API를 사용해 이 작업을 수행해요.
버킷에서 ABAC를 활성화하기 전에 TagResource와 UntagResource API로 태그 관리를 수행할 것을 권장해요. Amazon S3 콘솔과 CloudFormation은 이제 기본적으로 TagResource와 UntagResource API를 사용해요. PutBucketAbac API로 버킷의 ABAC를 비활성화할 수도 있어요. GetBucketTagging으로 버킷의 태그를 나열할 수 있어요. 이 API는 버킷에서 ABAC를 활성화한 후에도 계속 작동해요. 또는 ListTagsForResource로 버킷의 모든 태그를 나열할 수도 있어요.
일반 목적 버킷에 태그를 적용하고 제거하려면 다음 권한이 필요해요.
s3:TagResource– Amazon S3 일반 목적 버킷 같은 AWS 리소스에 태그를 추가해요.s3:UntagResource– Amazon S3 일반 목적 버킷 같은 AWS 리소스에서 태그를 제거해요.s3:ListTagsForResource– Amazon S3 일반 목적 버킷 같은 AWS 리소스에 적용된 태그를 확인해요.
다음 IAM 정책은 버킷에 ABAC를 활성화하고 그 상태를 확인하는 권한을 부여해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutBucketAbac",
"s3:GetBucketAbac"
],
"Resource": "arn:aws:s3:::my-s3-bucket/*"
}
]
}
일반 목적 버킷 태그 지정과 일반 목적 버킷의 ABAC 정책 예시에 대한 자세한 내용은 S3 일반 목적 버킷에서 태그 사용을 참고하세요.
단계 (Steps)
일반 목적 버킷에 s3:PutBucketAbac 권한이 있다면 Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), Amazon S3 REST API, AWS SDK로 버킷의 ABAC를 활성화할 수 있어요.
Amazon S3 콘솔로 일반 목적 버킷의 ABAC를 활성화하는 방법은 다음과 같아요.
- https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔에 로그인해요.
- 왼쪽 탐색 창에서 buckets를 선택해요.
- 버킷 이름을 선택해요.
- Properties 탭을 선택해요.
- Bucket ABAC 패널에서 Edit를 선택해요.
- Enable 토글을 선택해요.
- ABAC를 활성화한 뒤 태그를 관리하는 데 필요한 권한(
TagResource,UntagResource,ListTagsForResource)을 검토하고 확인해요. - Save changes를 선택해요.
SDK for Java 2.x — 다음 예시는 AWS SDK for Java 2.x로 일반 목적 버킷의 ABAC를 활성화하는 방법을 보여줘요. 명령을 사용하려면 user input placeholders를 자신의 정보로 바꾸세요.
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.AbacStatus;
import software.amazon.awssdk.services.s3.model.GetBucketAbacRequest;
import software.amazon.awssdk.services.s3.model.GetBucketAbacResponse;
import software.amazon.awssdk.services.s3.model.PutBucketAbacRequest;
import software.amazon.awssdk.services.s3.model.PutBucketAbacResponse;
import software.amazon.awssdk.regions.Region;
public class BucketAbac {
public static void main(String[] args) {
Region region = Region.US_EAST_1;
S3Client s3 = S3Client.builder()
.region(region)
.build();
putBucketAbac(s3, "amzn-s3-demo-bucket", "Enabled");
getBucketAbac(s3, "amzn-s3-demo-bucket");
putBucketAbac(s3, "amzn-s3-demo-bucket", "Disabled");
getBucketAbac(s3, "amzn-s3-demo-bucket");
}
/**
* Sets the ABAC (Attribute-Based Access Control) status for a specified S3 bucket.
*
* @param s3 The S3Client instance to use for the API call
* @param bucketName The name of the S3 bucket to update
* @param status The desired ABAC status ("Enabled" or "Disabled")
*/
public static void putBucketAbac(S3Client s3, String bucketName, String status) {
try {
AbacStatus abacStatus = AbacStatus.builder()
.abacStatus(status)
.build();
PutBucketAbacRequest request = PutBucketAbacRequest.builder()
.bucket(bucketName)
.abacStatus(abacStatus)
.build();
s3.putBucketAbac(request);
} catch (S3Exception e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
/**
* Retrieves the current ABAC (Attribute-Based Access Control) status for a specified S3 bucket.
*
* @param s3 The S3Client instance to use for the API call
* @param bucketName The name of the S3 bucket to query
*/
public static void getBucketAbac(S3Client s3, String bucketName) {
try {
GetBucketAbacRequest request = GetBucketAbacRequest.builder()
.bucket(bucketName)
.build();
GetBucketAbacResponse response = s3.getBucketAbac(request);
System.out.println("ABAC status: " + response.abacStatus().abacStatus());
} catch (S3Exception e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
}
일반 목적 버킷에 태그를 추가하는 Amazon S3 REST API 지원에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 다음 섹션을 참고하세요.
AWS CLI 설치는 AWS Command Line Interface User Guide의 AWS CLI 설치를 참고하세요.
다음 CLI 예시는 AWS CLI로 일반 목적 버킷의 ABAC를 활성화하는 방법을 보여줘요. 명령을 사용하려면 user input placeholders를 자신의 정보로 바꾸세요.
요청 (Request):
# Enable ABAC on a general purpose bucket
aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Enabled --region us-east-2
# Disable ABAC on a general purpose bucket
aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Disabled --region us-east-2
# Get ABAC status on a general purpose bucket
aws s3api get-bucket-abac --bucket amzn-s3-demo-bucket --region us-east-2