보통 개발 초기에는 AWS 계정을 통합하여 사용하다가 운영 단계에서는 개발, 운영, 테스트 등 여러개의 계정으로 나누어 사용한다. 이런 경우 통합 계정에서 사용하던 버킷을 운영 계정에서 접근해야하거나, 개발 계정에서 운영 계정으로 접근 등 다양한 상황이 생기기 마련이다.
AWS는 계정 A에서 다른 계정 B의 버킷 및 객체와 같은 리소스에 대한 권한을 부여할 수 있는 기능을 제공한다. 계정 B는 해당 권한을 자신의 계정에 속한 사용자에게 위임할 수 있다.
💡 계정 B에서 A의 버킷에 접근하려는 상황{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::example.bucket",
"arn:aws:s3:::example.bucket/*"
]
}
]
}
arn:aws:iam::AccountB-ID:user/app.miniplatform
와 같이 입력한다.I AM 콘솔에서 사용자 app.miniplatform을 만든다.
사용자 권한에 S3 정책을 연결한다.
사용자 app.miniplatform에 대한 인라인 정책을 만든다. 버킷 이름을 제공하여 정책을 업데이트해야 한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::example.bucket",
"arn:aws:s3:::example.bucket/*"
]
}
]
}
import { S3 } from 'aws-sdk';
const s3 = new S3({ ... });
const params = {
Bucket: 'example.bucket',
Key: 'pdf/account-test.pdf'
};
try {
await s3.getObject(params).promise();
} catch(err) {
console.log('S3 연결 에러');
}
버킷 또는 사용자 정책을 통해 설정된 명시적 거부가 있을 경우, 명시적 거부가 다른 권한보다 우선 적용된다. Effect: Allow
로 권한을 부여할 수도 있지만, Effect: Deny
로 권한을 거부할 수도 있다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::example.bucket",
"arn:aws:s3:::example.bucket/*"
]
},
{
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::test.bucket",
"arn:aws:s3:::test.bucket/*"
]
}
]
}
[ 1 ] 버킷 소유자가 교차 계정 버킷 권한 부여
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html
[ 2 ] Amazon S3 버킷에 있는 객체에 대한 교차 계정 액세스 권한을 제공하려면 어떻게 해야 하나요?
https://aws.amazon.com/ko/premiumsupport/knowledge-center/cross-account-access-s3/
[ 3 ] S3 Bucket - Cross Account Access 해보기
https://medium.com/@labcloud/s3-bucket-cross-account-access-해보기-81f1bbb8d5db