Source / Target 으로 분리해서 구축
서로 다른 계정을 가진 S3끼리 CLI로 쉽게 개체를 복사하는 방법을 소개하려고 한다.
우선, Target에 있는 계정에서 정책을 생성한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:<source-s3-arn>",
"arn:aws:<source-s3-arn>/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:<target-s3-arn>",
"arn:aws:<target-s3-arn>/*"
]
}
]
}
위의 정책을 생성하는데, 간략하게 설명하자면, source의 버킷을 조회하고 target의 s3에서 조회, 그리고 source의 개체들을 target에 put한다는 정책을 만드는 것이다. 즉 소스의 파일들을 복사 및 이동할 수 있다는 이야기이다.
위의 정책은 역할에 부여할 수도 있지만 사용자에 붙여서 사용할 수 있다.
Target 보안자격증명
Target의 보안자격증명에서 액세스키와 시크릿키를 부여받은 후 terminal에서 aws configure --profile tmp-s3-test로 다중 프로필을 등록하여 멀티 프로필로 cli를 관리한다.
그 후, 아래의 Source 버킷에 권한을 허용하는 과정이 필요하다. target의 accout를 허락하고, 소스의 버킷을 조회한다는 등의 권한을 허락한다는 내용이다.
Source S3 버킷 권한
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<target-accout>:user/<user-name>"
},
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:<source-bucket>/*",
"arn:aws:<source-bucket>"
]
}
]
}
CLI profile
cat ~/.aws/credentials
위의 명령어로 현재 aws configure에 mapping 되어있는 프로필들을 확인한다.
Target의 보안자격증명을 통해 다운로드 받았던 키들을 입력하기 위해
aws configure --profile tmp-s3-test
액세스, 시크릿키, 리전, format 입력한 다음, 프로필을 아래의 명령어로 설정한다
export AWS_PROFILE=tmp-s3-test
echo $AWS_PROFILE
위의 명령어로 환경변수 확인할 수 있다.
vim ~/.aws/credentials
만약 오타가 있거나 하면 vim으로 열어서 수정하면 된다. (화자는 Mac)
sync로 동기화 하거나 cp로 복사
aws s3 sync s3://source-bucket s3://target-bucket
교차 계정에서 잘 복사해왔다는것을 똑같은 시간대로 확인할 수 있다.
[AWS 참고링크]
반응형