서비스, 보안, 데이터 등 어느정도 규모 있는 회사의 경우 AWS 계정을 나눠서 사용한다.
계정을 분리하면 계정간의 데이터를 공유해야 하는 일이 생기는데 이때 S3의 객체 소유권 설정/업로드할 때의 파라미터에 따라 읽기에 제한이 생긴다!!
CrossAccount S3 버킷 정책
기본적으로 계정이 다르면 서로의 S3에 업로드가 불가하다.
하지만 S3 버킷에 아래와 같이 다른 계정의 ARN에 대해 설정한다면 CrossAccount의 S3 Object가 가능하며 필요에 따라서 Action, Resource를 제한하는것도 좋은 방법이다.
아래와 같이 설정하게 되면 Deny 정책이 먼저 적용되기 때문에 test-cross-account의 게정은 test 버킷에 test.txt의 이름을 제외하고 모두 업로드가 가능하다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "deny",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxx:role/test-cross-account"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3::test/test.txt"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxx:role/test-cross-account"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3::test/*"
}
]
}
S3 객체 소유권
S3 버킷에서 권한 탭을 들어가면 아래와 같이 객체 소유권을 편집할 수 있다.
기본적으로는 ACL 활성화 + 객체 라이터가 기본값이다. 각 옵션이 가지는 의미에 대해서 알아보자
- ACL 비활성화(권장) : 버킷에 있는 모든 Object의 소유자를 본래의 계정의 소유자로 한다.
- 즉, Cross Account에서 Object를 업로드 했더라도 해당 오브젝트는 본래 계정의 소유자가 된다.
- 그렇기때문에 해당 Object는 S3 정책에 따라 접근제한이 통제된다.
- ACL 활성화 : 버킷의 Object의 소유자가 다른 계정일수도 있다.
- 그렇기 때문에 각 Object에 접근제한을 설정해줘야하며, 경우에 따라서는 접근을 할 수가 없고 보관만 된다.
- ACL 활성화의 경우 아래 2가지 옵션이 존재하며 각 옵션에 따라 Object 접근제한이 된다.
- 객체 라이터 : Object의 업로드 계정이 소유자가 된다.
- 쉽게 말하면 내가 버킷에 접근권한이 있더라도, Object에 접근권한이 없는 문제가 발생한다.
- Cross Account에서 Object를 업로드했는데 객체 라이터로 지정되어 있으면 Cross Account의 접근권한이 있어야한다.
예) A 계정에서 B 계정으로 Object를 업로드했다면 B 계정에 있는 Object를 읽기 위해서는 A 계정의 권한이 있어야한다.
- 버킷 소유자 선호 : ACL 비활성화와 유사하다. 하지만 이는 Object가 업로드 할 때 아래와 같이 "bucket-owner-full-control" 옵션을 줘야한다.
- ACL 옵션을 별도로 주지 않으면, 객체 라이터와 동일하게 동작한다.
- 객체 라이터 : Object의 업로드 계정이 소유자가 된다.
s3.put_object(
Bucket=cross-account,
Key="test/test.txt",
ACL="bucket-owner-full-control",
)
결론을 다시 정리하면,
CrossAccount에서 Object를 업로드하고 본래의 계정에서 해당 Object에 접근을 하고자 할 때는 객체 소유권 설정을 봐야한다.
객체 소유권이 ACL 비활성화일때는 업로드할 때 별도 옵션이 없어도 Object 소유권이 버킷 소유자로 되기 때문에 본래 계정에서 권한만 있으면 접근이 되는 반면에
객체 소유권이 ACL 비활성화(+버킷 소유자 선호)가 될 때에는 업로드 시에 ACL=bucket-owner-full-control 옵션을 주면 Object 소유권이 버킷 소유자로 되기 때문에 본래 계정에서만 권한이 있으면 접근이 가능하다.
- ACL 비활성화(+객체 라이터)로 설정된 경우 업로드 계정에 대해서 권한이 있어야 접근이 가능하다.
CrossAccount에서 Object를 업로드할 때 접근이 안된다고 당황하지말고, 객체 소유권 설정과 업로드할 때 ACL 옵션을 주는지 살펴보면 된다!!
끝!!
'기술 이모저모 > [AWS] Workshop' 카테고리의 다른 글
[AWS] ECS vs EKS, 비교/분석 (0) | 2023.12.25 |
---|---|
[AWS] Workspace, Local PC 자료교환 방법 (0) | 2022.12.10 |
[AWS] Fortigate를 이용한 Outbound traffic 통제, 방화벽 기능[2/2] (0) | 2022.09.17 |
[AWS] Fortigate를 이용한 Outbound traffic 통제, 구성[1/2] (0) | 2022.09.17 |
[AWS] NetworkFirewall 기능 정리 (0) | 2022.09.17 |