AWS 계정간 이전 [EC2+RDS+S3]

안녕하세요, surmin입니다.

이전에 프리티어를 사용하기 위해 필요한 준비 과정을 정리했던 것을 여러분과 공유하고자 합니다. 이 글을 통해 여러분께 조금이나마 도움이 되길 바랍니다!

EC2

1. 스냅샷을 생성

옮기고자 하는 계정으로 접속 후 EC2 > 좌측 메뉴 > 스냅샷을 클릭한다.

스냅샷 생성 클릭 후 필요한 EC2 이미지 생성하며 인스턴스 눌러줍니다.

2. 스냅샷 내용 이미지 생성

스냅샷 생성이 완료되면 해당 스냅샷을 선택 후 작업 > 이미지 생성을 클릭 > 스냅샷 뜬 이미지를 이미지 생성하는 작업을 진행합니다.

3. 다른 계정에서 해당 이미지를 사용할 수 있도록 권한을 부여

AMI 만들어졌는지 확인 합니다.

다른 계정에서 해당 이미지를 생성(복제)할 수 있도록 설정하기 위하여 생성된 이미지를 선택하고 작업 > 이미지 권한 수정을 클릭하면 아래와 같은 창이 발생합니다.

계정 공유를 하기 위하여 다른 계정의 ID를 알아야 합니다.

해당 부분은 내 계정에서 확인이 가능합니다.

4. EC2  복제

EC2 복제할 계정으로 로그인 후 EC2 대시보드 > 인스턴스 시작을 누릅니다.

*만약 기존의 키페어를 사용하고 싶으면 EC2 생성 시 키페어 없이 생성하면 사용이 가능합니다.

아래 그림과 같이 잘 만들어진 것을 알 수가 있습니다.

RDS

스냅샷 생성

원하는 DB 선택 후 스냅샷 생성을 눌러 줍니다.

공유설정

RDS > 스냅샷 > 스냅샷 권한 > DB 스냅샷 가시성 ‘Private’ 선택 > 공유할 계정 ID 등록 > 저장 누릅니다

공유확인

공유할 계정 로그인 > 스냅샷 > 나와 공유됨 > 공유 스냅샷 확인 작업의 복원을 눌러서 복원 가능합니다

암호화 되어있을경우!

보통은 데이터 보호를 위하여 RDS, S3 등 암호화가 되어 있다.

이런 경우 먼저 KMS를 생성을 해준다.

아래와 같이 고객 관리형 키 선택 후 키 생성을 한다. (생성 후 공유해 줘야 합니다.)

참조: https://muna76.tistory.com/255

키를 생성 후에 다시 RDS로 들어가서 스냅샷을 생성한다.

그 후 다시 해당 스냅샷을 선택 후 카피를 눌러서 카피한다 그런대 여기서 맨 하단에 AWS KMS 키 정보를 방금 만든

KMS 키를 선택한다.

만든 후 스냅샷 권한에서 다시 AWS 계정 ID를 추가한다.

이동하려는 계정으로 들어가서 해당 스냅샷 확인 및 해당 스냅샷을 다시 복사한다.

생성 시 키는 아래와 같이 기본값을 사용한다.

복사 후 해당 스냅샷 복원 누른다.

복원을 선택 후 DB이름 생성 및 스토리지 설정 후 복원 합니다.

아래와 같이 DB가 생성된 것을 알수가 있습니다.

S3

마이그레이션 순서 입니다.

1. S3 Objects를 옮기게 될 Destination Account의 Account Id를 가져옵니다.
2. Source Account의 S3 Bucket에 Bucket Policy를 셋팅합니다.
3. Destination Account의 S3 Bucket을 생성합니다.
4. Destination Account의 IAM user 생성
5. 생성된 IAM user를 이용해서 AWS CLI 셋팅
6. 마지막으로 AWS CLI에서 명령어를 통해서 마이그레이션

마이그레이션에 앞서 준비해야하는 것

1.AWS 계정 2개
- Source Account :기존 S3 Bucket Objects가 있는 계정

- Destination Account : 기존 S3 Bucket Objects가 옮겨질 계정

2.Destination Account 안에서 생성한 IAM user 1개

3.AWS CLI 모듈이 설치된 시스템 환경에 IAM user에서 가져온 credentials 값 셋팅

1. S3 Objects를 옮기게 될 Destination Account의 Account Id를 가져옵니다.

(해당 계정에서 -(하이폰)만 제거를 하고 해당 숫자를 기억하여 줍니다.)

(가져올 Account Id는 숫자로 된 12자리입니다.)

2. Source Account의 S3 Bucket에 Bucket Policy를 세팅합니다.

여기서 Bucket Policy를 Source Account의 S3 Bucket에 셋팅하는 이유는 다음과 같습니다.

  • 일단, 해당하는 Bucket에서 Bucket List를 가져올 수 있습니다.
  • 그리고 Bucket에 들어있는 옮기게 될 Object를 가져올 수 있습니다.

우선 Source account에 로그인하고, Source Account의 S3 Bucket으로 들어갑니다.

“ACCOUNT_ID”는 아까 첫 번째에서 가져온 “Account Id” 숫자 12자리 숫자입니다.

“SOURCE_BUCKET_NAME”는 Objects를 옮기려는 Bucket의 이름입니다.

Resource의 “SOURCE_BUCKET_NAME”, “SOURCE_BUCKET_NAME/*”는 Source bucket과 내용에 대해 모두 접근 가능하게 됩니다.

위 두 가지 “ACCOUNT_ID”, “SOURCE_BUCKET_NAME”를 가져와서 바꾸어주고,

다음 S3 bucket policy를 넣어주고 save 해줍니다.

아래의 양식은 제꺼를 기준으로 작성하였습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123..:user/minho-s3"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::minhoimg/*",
                "arn:aws:s3:::minhoimg"
            ]
        }
    ]
}

3. Destination Account의 S3 Bucket을 생성합니다.

4. Destination Account의 IAM user 생성

Destination Account의 IAM user를 생성하는 이유는 다음과 같습니다.

이미 Source Account의 S3 bucket에 대한 접근은 두 번째 과정에서 허용받았기 때문에, Destination Account의 S3 bucket에 IAM user로 AWS CLI에 셋팅하고, IAM user의 권한으로 Destination Account의 S3 bucket에 Objects를 마이그레이션하기 위함입니다.

사용자 이름 및 콘솔 암호는 생성된 암호를 눌러주며 만들어준 계정에 직접적으로 aws 로그인은 할게 아니라서

“사용자는 다음 로그인 시 새암호를 생성.. ” 이부분 체크 해제하여 준다.

직접 연결 정책을 눌러주고 정책 생성 합니다.

다음 Policy를 아래 과정에 넣어줍니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::SOURCE_BUCKET_NAME",
                "arn:aws:s3:::SOURCE_BUCKET_NAME/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::DESTINATION_BUCKET_NAME",
                "arn:aws:s3:::DESTINATION_BUCKET_NAME/*"
            ]
        }
    ]
}

정책 생성 후 해당 계정에 권한을 준다.

추가적으로 s3 full 권한도 줍니다.

사용자를 생성한 후 보안 자격 증명으로 갑니다.

액세스 키 만들기를 눌러주고 키를 만들어 줍니다.

그 후

“Download .csv” 클릭 > “Close”

.csv 파일로 된 IAM user의 “Access key ID”, “Secret access key”를 다운로드합니다.

  1. 생성된 IAM user를 이용해서 AWS CLI 셋팅

이제 생성된 IAM user에서 .csv 파일로 된 IAM user의 “Access key ID”, “Secret access key”를 활용해서 AWS CLI에 셋팅을 해보겠습니다.

일단은 IAM user를 셋팅하기 위한 AWS CLI를 여러분의 맥, 윈도우, EC2 등에 설치하겠습니다.

아래의 경로에서 설치하여 줍니다.

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

설치를 끝나게 되면 $ aws –version 를 통해서 확인해보시고 정상적으로 설치가 되었으면 ,

AWS CLI에 IAM user를 셋팅해보겠습니다.

CLI로 들어갑니다.

“AWS Access Key ID”, “AWS Secret Access Key”는 IAM user .csv 파일에서 확인합니다. “Default region name”은 링크를 통해 찾아서 본인에 맞는 리전을 넣습니다. “Default output format”는 json을 넣습니다.

아래 처럼 셋팅을 마무리 합니다.

// Previous IAM user setting
$ aws configure
AWS Access Key ID [None]: IAM user .csv 파일에서 확인
AWS Secret Access Key [None]: IAM user .csv 파일에서 확인
Default region name [None]: ap-northeast-2
Default output format [None]: json

6. 마지막으로 AWS CLI에서 명령어를 통해서 마이그레이션 다음 Command를 가지고, 명령어를 실행하면 ex)를 가지고 설명드리면, source-bucket에 있는 Objects를 destination-bucket으로 Objects를 옮깁니다.

$ aws s3 sync s3://SOURCE-BUCKET-PATH s3://DESTINATION-BUCKET-PATH --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
ex)
aws s3 sync s3://source-bucket s3://destination-bucket --source-region ap-northeast-2 --region ap-northeast-2

오류

fatal error: An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

이런경우는 보안상 좋지는 않지만 임시로 [AdministratorAccess] 권한을 줍니다.

권한을 준 후 원본 s3 사용자 측에서 이전 명령을 내리면 아래와 같이 복사된다.

참조 링크

=========

https://soulduse.tistory.com/83

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies_job-functions.html

https://interconnection.tistory.com/119

https://docs.aws.amazon.com/ko_kr/datasync/latest/userguide/tutorial_s3-s3-cross-account-transfer.html

=========

위로 스크롤