Amazon Web Services 한국 블로그

Amazon S3 범용 버킷에 대한 속성 기반 액세스 제어 기능 출시

기업이 확장됨에 따라 스토리지 리소스에 대한 액세스 권한을 관리하는 작업은 점점 더 복잡해지고 시간이 많이 걸립니다. 새로운 팀원이 합류하고, 기존 직원의 역할이 변경되고, 새 S3 버킷이 생성되면 조직은 여러 유형의 액세스 정책을 지속적으로 업데이트하여 S3 버킷 전반의 액세스를 관리해야 합니다. 이 문제는 멀티 테넌트 S3 환경에서 특히 두드러집니다. 이러한 환경에서는 관리자가 공유 데이터세트와 수많은 사용자에 대한 액세스를 제어하기 위해 해당 정책을 자주 업데이트해야 하기 때문입니다.

오늘은 Amazon Simple Storage Service(S3) 범용 버킷에 대한 속성 기반 액세스 제어(ABAC)를 소개합니다. 이 새로운 기능을 사용하면 S3 범용 버킷에 설정된 태그를 통해 데이터 액세스를 제어함으로써 사용자와 역할의 권한을 자동으로 관리할 수 있습니다. 권한을 개별적으로 관리하는 대신 태그 기반 IAM 또는 버킷 정책을 사용하여 사용자, 역할 및 S3 범용 버킷 간의 태그를 기반으로 액세스를 자동으로 허용하거나 거부할 수 있습니다. 태그 기반 인증을 사용하면 버킷 이름 대신 프로젝트, 팀, 비용 센터, 데이터 분류 또는 기타 버킷 속성을 기반으로 S3 액세스 권한을 쉽게 부여할 수 있으므로 대규모 조직의 권한 관리를 획기적으로 단순화할 수 있습니다.

ABAC 작동 방식
일반적인 시나리오는 다음과 같습니다. 관리자로서 개발 환경에서 사용되는 모든 S3 버킷에 개발자들이 액세스할 수 있도록 허용하고 싶습니다.

ABAC를 사용하면 개발 환경용 S3 버킷에 environment:development와 같은 키-값 페어로 태그를 지정하고, 동일한 environment:development 태그를 확인하는 AWS Identity and Access Management(IAM) 위탁자에 ABAC 정책을 연결할 수 있습니다. 버킷 태그가 정책의 조건과 일치하면 위탁자에게 액세스 권한이 부여됩니다.

어떻게 작동하는지 보겠습니다.

시작하기
먼저 태그 기반 인증을 사용하려는 각 S3 범용 버킷에서 ABAC를 명시적으로 활성화해야 합니다.

Amazon S3 콘솔로 이동하여 범용 버킷을 선택한 다음 이 버킷에 ABAC를 활성화하는 옵션을 찾을 수 있는 속성으로 이동합니다.

또한 AWS Command Line Interface(AWS CLI)를 통해 새로운 PutBucketAbac API를 사용하여 프로그래밍 방식으로 활성화할 수 있습니다. 여기서는 미국 동부(오하이오) us-east-2 AWS 리전에 위치한 my-demo-development bucket이라는 버킷에서 ABAC를 활성화하고 있습니다.

aws s3api put-bucket-abac --bucket my-demo-development-bucket abac-status Status=Enabled --region us-east-2

또는 AWS CloudFormation을 사용하는 경우 템플릿에서 AbacStatus 속성을 활성화됨으로 설정하여 ABAC를 활성화할 수 있습니다.

다음으로 S3 범용 버킷에 태그를 지정해 보겠습니다. 태그 기반 권한 부여의 기준이 될 environment:development 태그를 추가합니다.

이제 S3 버킷에 태그가 지정되었으니 environment:development 태그가 일치하는지 확인하는 ABAC 정책을 생성하고 dev-env-role이라는 IAM 역할에 연결하겠습니다. 이 역할에 대한 개발자 액세스만 관리하면, 모든 개발 환경 버킷에 대한 권한을 한 곳에서 통합적으로 제어할 수 있습니다.

IAM 콘솔로 이동하여 정책을 선택한 다음 정책 생성을 선택합니다. 정책 편집기에서는 JSON 보기로 전환하여 사용자가 S3 객체를 읽고 쓰고 나열할 수 있는 정책을 생성합니다. 단, 이는 ‘environment’ 키가 연결된 태그가 있고 그 값이 S3 버킷에 선언된 값과 일치할 때만 허용하는 정책을 생성합니다. 이 정책에 s3-abac-policy라는 이름을 지정하고 저장합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/environment": "development"
                }
            }
        }
    ]
}

그런 다음 이 s3-abac 정책을 dev-env-role에 연결합니다.

이제 끝났습니다! 이제 dev-role을 가정한 사용자는 my-demo-development-bucket과 같이 environment:development 태그가 지정된 모든 ABAC 활성화 버킷에 액세스할 수 있습니다.

기존 태그 사용
ABAC에 기존 태그를 사용할 수 있지만 이러한 태그는 이제 액세스 제어에 사용되므로 기능을 활성화하기 전에 현재 태그 설정을 검토하는 것이 좋습니다. 여기에는 의도치 않은 액세스를 방지하기 위해 기존 버킷 태그와 태그 기반 정책을 검토하는 작업, 그리고 태깅 워크플로를 표준 TagResource API로 업데이트하는 작업이 포함됩니다. ABAC를 버킷에 활성화하면 PutBucketTagging API 사용이 차단되기 때문입니다. AWS Config를 사용하면 어떤 버킷에 ABAC가 활성화되어 있는지 확인하고 AWS Cloudtrail 관리 이벤트를 사용하여 애플리케이션에서 PutBucketTagging API가 사용된 내역을 검토할 수 있습니다.

또한 ABAC에 사용하는 것과 동일한 태그를 S3 버킷의 비용 할당 태그로도 사용할 수 있습니다. AWS Billing Console에서 또는 API를 통해 비용 할당 태그로 활성화하면 AWS Cost Explorer비용 및 사용 보고서에서 이러한 태그를 기반으로 지출 데이터를 자동으로 정리합니다.

생성 시 태그 적용
조직 전반의 액세스 제어를 표준화하기 위해, 이제 서비스 제어 정책(SCP)나 IAM 정책에서 aws:TagKeysaws:RequestTag 조건 키를 사용하여 버킷 생성 시 태그 요구 사항을 적용할 수 있습니다. 그런 다음 이러한 버킷에서 ABAC를 활성화하여 조직 전체에 일관된 액세스 제어 패턴을 제공할 수 있습니다. 버킷을 생성할 때 태그를 지정하려면, CloudFormation 템플릿에 태그를 추가하거나 기존 S3 CreateBucket API를 직접적으로 호출할 때 요청 본문에 태그를 넣으면 됩니다. 예를 들어, 개발자들이 버킷을 생성할 때 environment=development 태그를 반드시 사용하도록 정책을 적용할 수 있으며, 이렇게 하면 비용 배분을 위해 모든 버킷이 정확하게 태깅되도록 할 수 있습니다. 액세스 제어에 동일한 태그를 사용하려는 경우 이러한 버킷에 대해 ABAC를 활성화할 수 있습니다.

알아야 할 사항

Amazon S3에 ABAC를 사용하여 이제 S3 버킷 전체에 확장 가능한 태그 기반 액세스 제어를 구현할 수 있습니다. 이 기능은 액세스 제어 정책을 더 간단하게 작성할 수 있게 해주며, 위탁자와 리소스가 추가되거나 제거될 때 정책을 반복해서 업데이트해야 하는 필요성을 줄여줍니다. 이를 통해 관리 오버헤드를 줄이는 동시에 규모 조정 시 강력한 보안 거버넌스를 유지할 수 있습니다.

Amazon S3 범용 버킷에 대한 속성 기반 액세스 제어는 이제 AWS Management Console, API, AWS SDK, AWS CLI 및 AWS CloudFormation을 통해 추가 비용 없이 사용할 수 있습니다. 표준 API 요청 요금은 Amazon S3 요금에 따라 적용됩니다. S3 리소스의 태그 스토리지에는 추가 요금이 부과되지 않습니다.

AWS CloudTrail을 사용하여 액세스 요청을 감사하고, 어떤 정책이 리소스에 대한 액세스를 허용하거나 거부했는지 확인할 수 있습니다.

또한 ABAC를 S3 디렉터리 버킷, S3 액세스 포인트, S3 Tables 버킷 및 테이블과 같은 다른 S3 리소스와 함께 사용할 수 있습니다. S3 버킷의 ABAC에 대해 자세히 알아보려면 Amazon S3 사용 설명서를 참조하세요.

액세스 제어에 사용하는 태그를 비용 배분에도 동일하게 사용할 수 있습니다. AWS Billing Console 또는 API를 통해 비용 할당 태그로 활성화할 수 있습니다. 비용 할당 태그를 사용하는 방법에 대한 자세한 내용은 설명서를 참조하세요.