디렉터리 버킷의 보안 모범 사례
디렉터리 버킷의 보안 모범 사례 (Security best practices for directory buckets)
디렉터리 버킷을 다룰 때 고려해야 할 보안 기능이 여러 가지 있어요. 아래 모범 사례는 일반적인 지침이며 완전한 보안 솔루션을 나타내지는 않아요. 이 모범 사례가 사용자 환경에 적절하거나 충분하지 않을 수 있으므로, 강제 조항이 아닌 도움이 되는 권장 사항으로 생각해 주세요.
출처: 문서
본문
기본 Block Public Access 및 Object Ownership 설정
디렉터리 버킷은 S3 Block Public Access와 S3 Object Ownership을 지원해요. 이 S3 기능들은 버킷과 객체에 대한 접근을 감사하고 관리하는 데 사용돼요.
기본적으로 디렉터리 버킷의 모든 Block Public Access 설정이 활성화돼요. 또한 Object Ownership은 bucket owner enforced로 설정되어 액세스 제어 목록(ACL)이 비활성화돼요. 이 설정들은 수정할 수 없어요. 이 기능들에 대한 자세한 내용은 Amazon S3 스토리지에 대한 공개 접근 차단 과 버킷의 객체 소유권 제어 및 ACL 비활성화 를 참고하세요.
참고
디렉터리 버킷에 저장된 객체에는 접근 권한을 부여할 수 없어요. 디렉터리 버킷 자체에만 접근 권한을 부여할 수 있어요. S3 Express One Zone의 권한 부여 모델은 Amazon S3의 권한 부여 모델과 달라요. 자세한 내용은 CreateSession으로 Zonal 엔드포인트 API 작업 권한 부여 를 참고하세요.
인증 및 권한 부여
디렉터리 버킷의 인증 및 권한 부여 메커니즘은 Zonal 엔드포인트 API 작업에 요청을 보내는지, Regional 엔드포인트 API 작업에 보내는지에 따라 달라져요. Zonal API 작업은 객체 수준(데이터 플레인) 작업이고, Regional API 작업은 버킷 수준(제어 플레인) 작업이에요.
Zonal 엔드포인트 API 작업에 대한 요청은 가장 낮은 지연 시간을 제공하도록 최적화된 새로운 세션 기반 메커니즘으로 인증하고 권한을 부여해요. 세션 기반 인증에서 AWS SDK는 CreateSession API 작업을 사용해 디렉터리 버킷에 대한 낮은 지연 시간 접근을 제공하는 임시 자격 증명을 요청해요. 이 임시 자격 증명은 특정 디렉터리 버킷으로 범위가 지정되며 5분 후에 만료돼요. 이 임시 자격 증명으로 Zonal(객체 수준) API 호출에 서명할 수 있어요. 자세한 내용은 CreateSession으로 Zonal 엔드포인트 API 작업 권한 부여 를 참고하세요.
디렉터리 버킷 관리용 자격 증명으로 요청 서명하기
Zonal 엔드포인트(객체 수준) API 요청에는 AWS Signature Version 4로 서명하며, 서비스 이름을 s3express로 사용해요. 요청에 서명할 때는 CreateSession에서 반환된 비밀 키를 사용하고, 세션 토큰을 x-amzn-s3session-token 헤더로 함께 제공해요. 자세한 내용은 CreateSession 을 참고하세요.
지원되는 AWS SDK는 사용자를 대신해 자격 증명을 관리하고 서명해요. SDK가 자격 증명을 갱신하고 요청에 서명하도록 하는 것을 권장해요.
IAM 자격 증명으로 요청 서명하기
모든 Regional(버킷 수준) API 호출은 임시 세션 자격 증명이 아니라 AWS Identity and Access Management(IAM) 자격 증명으로 인증되고 서명되어야 해요. IAM 자격 증명은 IAM ID의 액세스 키 ID와 비밀 액세스 키로 구성돼요. 모든 CopyObject와 HeadBucket 요청도 IAM 자격 증명으로 인증되고 서명되어야 해요.
Zonal(객체 수준) 작업 호출에서 가장 낮은 지연 시간을 얻으려면 CopyObject와 HeadBucket 요청을 제외하고, CreateSession 호출로 얻은 자격 증명으로 요청에 서명하는 것을 권장해요.
AWS CloudTrail 사용하기
AWS CloudTrail은 사용자, 역할 또는 AWS 서비스가 Amazon S3에서 수행한 작업의 기록을 제공해요. CloudTrail이 수집한 정보로 다음을 파악할 수 있어요.
- Amazon S3에 보낸 요청
- 요청이 이루어진 IP 주소
- 요청을 보낸 사람
- 요청이 이루어진 시점
- 요청에 대한 추가 세부 정보
AWS 계정을 설정하면 CloudTrail 관리 이벤트가 기본으로 활성화돼요. 다음 Regional 엔드포인트 API 작업(버킷 수준, 즉 제어 플레인 API 작업)이 CloudTrail에 기록돼요.
- CreateBucket
- DeleteBucket
- DeleteBucketPolicy
- PutBucketPolicy
- GetBucketPolicy
- ListDirectoryBuckets
- ListMultipartUploads
- PutBucketEncryption
- GetBucketEncryption
- DeleteBucketEncryption
참고
ListMultipartUploads는 Zonal 엔드포인트 API 작업이에요. 하지만 CloudTrail에는 관리 이벤트로 기록돼요. 자세한 내용은 Amazon Simple Storage Service API Reference의 ListMultipartUploads 를 참고하세요.
기본적으로 CloudTrail 추적(trail)은 데이터 이벤트를 기록하지 않지만, 지정한 디렉터리 버킷 또는 AWS 계정의 모든 디렉터리 버킷에 대한 데이터 이벤트를 기록하도록 추적을 구성할 수 있어요. 다음 Zonal 엔드포인트 API 작업(객체 수준, 즉 데이터 플레인 API 작업)이 CloudTrail에 기록돼요.
- AbortMultipartUpload
- CompleteMultipartUpload
- CreateSession
- CopyObject
- CreateMultipartUpload
- DeleteObject
- DeleteObjects
- GetObject
- GetObjectAttributes
- HeadBucket
- HeadObject
- ListObjectsV2
- ListParts
- PutObject
- UploadPart
- UploadPartCopy
디렉터리 버킷과 함께 AWS CloudTrail을 사용하는 방법에 대한 자세한 내용은 디렉터리 버킷용 AWS CloudTrail 로깅 을 참고하세요.
AWS 모니터링 도구로 모니터링 구현하기
모니터링은 Amazon S3와 AWS 솔루션의 안정성, 보안, 가용성, 성능을 유지하는 데 중요한 부분이에요. AWS는 Amazon S3와 다른 AWS 서비스를 모니터링하는 데 도움이 되는 여러 도구와 서비스를 제공해요. 예를 들어 Amazon S3용 Amazon CloudWatch 지표, 특히 BucketSizeBytes와 NumberOfObjects 스토리지 지표를 모니터링할 수 있어요.
디렉터리 버킷에 저장된 객체는 Amazon S3의 BucketSizeBytes와 NumberOfObjects 스토리지 지표에 반영되지 않아요. 하지만 디렉터리 버킷에 대해 BucketSizeBytes와 NumberOfObjects 스토리지 지표는 지원돼요. 원하는 지표를 보려면 StorageType 차원을 지정해 Amazon S3 스토리지 클래스를 구분할 수 있어요. 자세한 내용은 Amazon CloudWatch로 지표 모니터링 을 참고하세요.