Amazon S3에서는 객체를 업로드한 사용자 또는 계정이 그 객체의 소유자(owner)가 된다. 즉, 외부 계정이 내 버킷에 객체를 업로드하면, 그 객체는 기본적으로 외부 계정의 소유가 된다. 이때 버킷 소유자는 그 객체에 대해 자동으로 접근 권한을 갖지 않는다.
IAM 정책 만으로는 객체에 접근할 수 없다. 그 이유는, IAM 정책은 주체(사용자나 역할)에게 권한을 부여하는데, 하지만 객체에 대한 최종 접근 권한은 다음과 같이 결정된다:
최종 권한 = IAM 정책 + 버킷 정책 + 객체 ACL + 소유권 구조
즉, IAM 정책에서 s3:GetObject 권한이 있더라도, 객체가 다른 계정의 소유이거나, ACL에서 허용되지 않았거나, 버킷 정책에서 막았다면
➡️ 객체에 접근할 수 없다.
이 문제를 해결하기 위해 AWS는 bucket-owner-full-control이라는 ACL 옵션을 제공한다. 외부 사용자가 객체를 업로드할 때 이 ACL을 설정하면, 버킷 소유자에게 그 객체에 대한 전체 권한을 위임할 수 있다. 하지만 사용자가 이 ACL을 설정하지 않으면? 버킷 소유자는 여전히 객체를 소유하지 않게 된다.
버킷 소유자는 아래와 같이 버킷 정책에서 특정 ACL이 포함되지 않은 업로드를 거부할 수 있다:
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::example-bucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
이 정책은 bucket-owner-full-control ACL이 포함되지 않은 객체 업로드를 자동으로 차단한다.
'AWS' 카테고리의 다른 글
VPC 내부 EC2 인스턴스 간 통신 구조와 보안 설정 이해하기 (0) | 2025.05.22 |
---|---|
AWS KMS와 S3 서버 측 암호화 방식 정리 (0) | 2025.05.21 |
DMS 흐름으로 본 계층 보안의 이유 (0) | 2025.05.19 |
AWS WAF를 활용한 국가 기반 요청 차단 및 예외 IP 허용 (0) | 2025.05.18 |
SQS를 이용한 사용자 우선순위 처리 아키텍처 설계 (0) | 2025.05.17 |