[AWS S3] S3 데이터 계정간 이동 및 복원하기

2024. 6. 8. 19:28·개발 ━━━━━/Dev
반응형

 

프로젝트 서버를 이사하면서 다른건 다 옮겼는데 S3 를 팀원의 계정으로 사용하고 있어서 그것마저 옮기려고 한다.

 

준비

1. 기존 S3 데이터가 존재하는 AWS 계정

2. 타겟 AWS 계정

3. 타겟 AWS 계정의 EC2

 

를 준비해준다.

 

과정

1. 기존 AWS 계정 S3 Bucket 에 Policy 등록

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "DelegateS3Access",
			"Action": [
				"s3:GetObject",
				"s3:ListBucket",
				"s3:GetObjectTagging"
			],
			"Effect": "Allow",
			"Resource": [
				"arn:aws:s3:::{기존 버킷 이름}",
				"arn:aws:s3:::{기존 버킷 이름}/*"
			],
			"Principal": {
				"AWS": [
					"{타겟 AWS 계정 ID}"
				]
			}
		}
	]
}

 

* AWS 계정 ID 는 AWS 의 아무 페이지의 우측 상단에 계정을 눌러보면 나온다.

 

2. 타겟 계정 IAM Policy 등록

IAM 사용자를 하나 만들어주고 새로운 정책을 등록하여 적용시켜 준다.

 

이름은 S3SyncPolicy 등으로 설정한다.

 

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "DestinationBucketAccess",
			"Action": [
				"s3:ListBucket",
				"s3:PutObject",
				"s3:DeleteObject",
				"s3:GetObjectAcl"
			],
			"Effect": "Allow",
			"Resource": [
			"arn:aws:s3:::{타겟 버킷 이름}",
			"arn:aws:s3:::{타겟 버킷 이름}/*"
			]
		},
		{
			"Sid": "SourceBucketAccess",
			"Action": [
				"s3:ListBucket",
				"s3:GetObject"
			],
			"Effect": "Allow",
			"Resource": [
			"arn:aws:s3:::{기존 버킷 이름}",
			"arn:aws:s3:::{기존 버킷 이름}/*"
			]
		}
	]
}

 

3. S3 Sync 명령어 실행

타겟 EC2 에 접속해

aws s3 sync s3://{기존 버킷 이름} s3://{타겟 버킷 이름} --region ap-northeast-2 --dryrun

 

명령어를 실행시켜준다.

 

Troubleshoot

위 명령어를 실행했더니

 

fatal error: Unable to locate credentials

 

에러가 뜬다.

 

AWS CLI 가 필요한 자격 증명을 찾을 수 없기 때문인데

 

처음에 EC2 를 생성할 때 EC2 (Amazon Linux AMI) 로 생성하였다면 별도로 설정할 필요가 없지만

필자는 기본 ubuntu 로 생성을 하였기 때문에 aws cli 도 설치해야하고 credentials 도 따로 설정해야 했다.

 

 

해결

 

sudo apt install awscli

 

우선 awscli 를 설치해주고

 

aws configure

 

를 통해 요구하는 IAM 정보를 입력해준다.

 

AWS Access Key ID : IAM 계정 액세스 키
AWS Secret Access Key : IAM 계정 Secret 액세스 키
Default region name : EC2 리전 (서울 : ap-northeast-2a)
Default output format : json

 

Secret Access 키는 IAM 계정 생성 당시 .csv 형태로 저장 가능했을 것이다.

저장을 안했다면 새로운 액세스 키를 생성하면 된다.

 

설정을 다했다면

--dryrun 옵션을 추가한 상태로

aws s3 sync s3://{기존 버킷 이름} s3://{타겟 버킷 이름} --region ap-northeast-2 --dryrun

 

을 실행시켜주면

 

정상적으로 테스트 run 이 가능하다.

 

정상 실행이 되는 것을 확인했으니

aws s3 sync s3://{기존 버킷 이름} s3://{타겟 버킷 이름} --region ap-northeast-2

 

명령어로 데이터를 sync 시켜준다.

 

 

새로 만든 버킷에 데이터가 정상적으로 들어왔다!

 

+)

새로 만든 버킷을 Spring 프로젝트에 적용하려면 새 버킷에도 정책을 추가로 설정해줘야 하고

퍼블릭 엑세스 차단을 해제 시켜놔야 한다.

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "DelegateS3Access",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::{타겟 AWS 계정 ID}:root"
			},
			"Action": [
				"s3:GetObject",
				"s3:ListBucket",
				"s3:GetObjectTagging"
			],
			"Resource": [
				"arn:aws:s3:::{타겟 버킷 이름}",
				"arn:aws:s3:::{타겟 버킷 이름}/*"
			]
		}
	]
}

 

 

 

출처

https://sh-t.tistory.com/141?category=983899

반응형

'개발 ━━━━━ > Dev' 카테고리의 다른 글

[Nginx] Blue / Green 배포 전략으로 Spring 프로젝트 EC2 에 무중단 배포하기  (0) 2024.02.20
[Docker] Docker Volume 을 이용한 MySQL 데이터 백업  (0) 2024.01.11
[Docker] MySQL 컨테이너를 이미지화 하여 Docker Hub 에 push 하기  (0) 2023.12.04
Github Actions 를 이용하여 AWS EC2 에 SpringBoot 애플리케이션 CI/CD 구축  (0) 2023.09.27
Github Actions  (0) 2023.09.25
'개발 ━━━━━/Dev' 카테고리의 다른 글
  • [Nginx] Blue / Green 배포 전략으로 Spring 프로젝트 EC2 에 무중단 배포하기
  • [Docker] Docker Volume 을 이용한 MySQL 데이터 백업
  • [Docker] MySQL 컨테이너를 이미지화 하여 Docker Hub 에 push 하기
  • Github Actions 를 이용하여 AWS EC2 에 SpringBoot 애플리케이션 CI/CD 구축
GukJang
GukJang
•  ⌘ ⌥ •
    반응형
  • GukJang
    SPACE
    GukJang
  • 전체
    오늘
    어제
    • Blog (73)
      • 개발 ━━━━━ (68)
        • Java (14)
        • C++ (1)
        • HTML (1)
        • Spring(boot) (7)
        • Dev (9)
        • SQL (1)
        • CS (2)
        • Git (1)
        • Troubleshoot (14)
        • Algorithm (2)
        • Definition (1)
        • Dev Life (2)
        • TIL (7)
        • 항해 (6)
      • 공돌 ━━━━━ (4)
        • 플젝 (2)
        • 장비 (1)
        • 부품 (1)
      • 독서 ━━━━━ (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    오픈소스 기여
    CI CD
    사전 스터디
    Java
    docker
    spring
    알고리즘
    자바
    Python
    micropython
    docker volume
    항해99
    mysql
    백준
    EC2
    AWS
    SpringBoot
    마이크로파이썬
    github actions
    electron-builder
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
GukJang
[AWS S3] S3 데이터 계정간 이동 및 복원하기
상단으로

티스토리툴바