범용 버킷에서 ABAC 활성화 - Amazon Simple Storage Service

범용 버킷에서 ABAC 활성화

속성 기반 액세스 제어(ABAC)는 속성, 즉 태그를 기반으로 권한을 정의하는 데 사용하는 권한 부여 전략입니다. 기본적으로 모든 Amazon S3 범용 버킷에서 ABAC가 비활성화됩니다. 범용 버킷에 ABAC를 사용하려면 ABAC를 활성화해야 합니다.

범용 버킷에 대해 ABAC를 활성화하기 전에 먼저 다음 주제에 설명된 작업을 완료하는 것이 좋습니다.

ABAC를 활성화하기 전에 정책 감사

버킷에 대해 ABAC를 활성화하기 전에 버킷에 태그가 있는 경우, 액세스 제어 정책을 감사하여 태그 기반 조건이 버킷의 기존 태그를 참조하는지 검토합니다. 이 경우 이러한 정책이 의도한 대로 설정되어 있고 태그 기반 액세스 제어를 활성화해도 Amazon S3 워크플로에 의도하지 않은 권한 부여 변경이 발생하지 않는지 확인합니다. 이렇게 하면 버킷에서 ABAC가 활성화된 후 정책이 의도한 대로 작동하는지 확인하는 데 도움이 됩니다. 태그와 함께 속성 기반 조건을 사용하는 예제는 S3 범용 버킷과 함께 태그 사용 섹션을 참조하세요.

IAM 정책에 필요한 권한 포함

버킷에 ABAC를 활성화하려면 다음 Amazon S3 권한이 필요합니다.

  • s3:PutBucketAbac - 범용 버킷의 ABAC 상태를 업데이트합니다.

  • s3:GetBucketAbac - 범용 버킷의 ABAC 상태를 봅니다.

ABAC를 활성화하면 이전에 버킷에 태그를 추가하거나 버킷 PutBucketTagging 또는 DeleteBucketTagging에서 태그를 삭제하는 데 사용한 권한이 더 이상 작동하지 않습니다. 대신 TagResourceUntagResource API를 사용하여 이러한 작업을 수행합니다.

버킷에서 ABAC를 활성화하기 전에 TagResourceUntagResource API를 사용하여 태그 지정을 관리하는 것이 좋습니다. Amazon S3 콘솔 및 CloudFormation은 이제 기본적으로 TagResourceUntagResource 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 범용 버킷과 함께 태그 사용 섹션을 참조하세요.

단계

범용 버킷에 대한 s3:PutBucketAbac 권한이 있는 경우 Amazon S3 콘솔, AWS 명령줄 인터페이스(AWS CLI), Amazon S3 REST API 및 AWS SDK를 사용하여 버킷에 ABAC를 활성화할 수 있습니다.

Amazon S3 콘솔을 사용하여 범용 버킷에 대해 ABAC를 활성화하려면 다음을 수행합니다.

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔에 로그인합니다.

  2. 왼쪽 탐색 창에서 버킷을 선택합니다.

  3. 버킷 이름을 선택합니다.

  4. 속성 탭을 선택합니다.

  5. 버킷 ABAC 패널에서 편집을 선택합니다.

  6. 활성화 토글을 선택합니다.

  7. ABAC를 활성화한 후 태그를 관리하는 데 필요한 권한인 TagResource, UntagResource, ListTagsForResource를 검토하고 확인합니다.

  8. 변경 사항 저장을 선택합니다.

SDK for Java 2.x

이 예제에서는 AWS SDK for Java 2.x를 사용하여 범용 버킷에 대한 활성화 ABAC를 추가하는 방법을 보여줍니다. 명령을 사용하려면 사용자 입력 자리 표시자를 사용자의 정보로 대체합니다.

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(); PutBucketAbacReqquest 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 { GetBucketAbacReqquest request = GetBucketAbacRequest.builder() .bucket(bucketName) .build(); GetBucketAbacResponse response = s3.getBucketAbac(request); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }

이 예제에서는 AWS SDK for Java 2.x를 사용하여 범용 버킷에 대한 활성화 ABAC를 추가하는 방법을 보여줍니다. 이 명령을 사용하려면 user input placeholders를 실제 정보로 바꾸세요.

범용 버킷에 태그를 추가하기 위한 Amazon S3 REST API 지원에 대한 자세한 내용은 Amazon Simple Storage Service API 참조의 다음 섹션을 참조하세요.

AWS CLI를 설치하려면 AWS Command Line Interface 사용 설명서에서 AWS 설치를 참조하세요.

다음 CLI 예제에서는 AWS CLI를 사용하여 범용 버킷에 대한 활성화 ABAC를 활성화하는 방법을 보여줍니다. 명령을 사용하려면 사용자 입력 자리 표시자를 사용자의 정보로 대체합니다.

요청

# 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