https://seongduck.tistory.com/445
AWS EC2, VM, 서버에서 AWS S3 Bucket에 파일 업로드하기
시나리오VM 서버에서 AWS S3에 특정 파일을 업로드 해야한다. (혹은 온프레미스 서버, AWS EC2 등등..) 해당 작업을 수행하려면 몇가지 권한 부여를 해야합니다.1. AWS IAM 계정 생성 후 AcceessKey, SecretKey
seongduck.tistory.com
S3 Bucket에 업로드하는 방법은 위의 게시글을 참고하여 세팅하면 되겠습니다.
시나리오
S3에 업로드된 OS 파일을 AWS EC2로 부팅해야 한다.
해당 작업을 수행하기 위해서 아래 작업을 진행해야 합니다.
1) S3 Bucket에서 Raw 데이터를 EBS Snapshot으로 변환하는 권한 (vm import role)
2) S3 Bucekt 권한 수정
3) S3 Bucket 업로드 권한
4) AWS Configure를 통해 리소스에 접근할 수 있는 권한
OS파일 S3 업로드는 위의 게시글을 통해 진행합니다.
1) S3 Bucket에서 raw 데이터를 EBS Snapshot으로 변환할 수 있는 권한 부여
1-1) vmimport 라는 Role을 생성하고, 적용할 Policy 생성
S3의 Raw Data를 이용해서 EBS Snapshot을 생성하려면 vmimport role이 필요합니다.
1) IAM -> Policy -> 생성
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::S3_버킷명",
"arn:aws:s3:::S3_버킷명/해당버킷_폴더명/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:ImportImage",
"ec2:DescribeImportImageTasks",
"ec2:CancelImportTask",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::S3_버킷명/해당버킷_폴더명/*"
},
{
"Effect": "Allow",
"Action": [
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}
1-2) vmimport Role 생성
1) IAM -> Role 생성
2) 신뢰할 수 있는 엔터티 선택
- AWS 서비스
- 사용 사례 : EC2
3) 권한 추가
- 위에서 만든 Policy 선택
4) 이름 지정
- vmimport
1-3) vmimport Role에 신뢰 정책 부여
1) 방금 만든 IAM Role 선택
2) 신뢰 관계 -> 편집
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "vmie.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "vmimport"
}
}
}
]
}
vmimport role 생성 완료
2) AWS Configure에 등록할 AWS IAM User 생성
1) IAM -> User -> 생성
2) 다음 권한 부여 #적절한 권한 부여해도 됨
3) 다음 권한 부여
- administratorAccess
- AmazonS3FullAccess
- ???? 추가해야하는지 확인 여부
2-1) IAM User AccessKey, SecretKey 생성
1) IAM -> 사용자 -> 방금 생성한 사용자 선택
2) 보안 자격 증명 -> 액세스 키 만들기 선택
3) 액세스 키 모범 사례 및 대안
- 사용 사례 : Command Line Interface(CLI) 선택
4) 설명 태그 설정
- 설명 적기 -> 액세스 키 만들기
5) 액세스 키 검색
- 액세스 키와 비밀 액세스 키 (AccessKey & SecretKey) CSV 파일 다운로드
3) S3 Bucket 권한 설정
vmimport의 접근 권한을 부여해야 합니다.
1) S3 Bucket 생성
2) 버킷 정책 수정
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::본인AWS_Account_8자리:role/vmimport"
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::S3_버킷명",
"arn:aws:s3:::S3_버킷명/S3_하위폴더명/*"
]
}
]
}
4) VM 서버 (Bastion 혹은 S3의 OS를 EBS로 만들 수 있는 서버) 에서 AWS-CLI 설치
AWS EC2 생성 작업을 진행하기 위해서는 AWS-CLI 툴을 설치합니다.
물론 AWS EC2의 경우 자동으로 설치되어 있지만, 외부 서버에서는 설치해야합니다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
ls -lh awscliv2.zip #설치 확인
sudo apt install -y unzip #unzip 설치
unzip awscliv2.zip #압축 해제
cd aws
sudo ./install #insatll 설치
PATH 설정
find / -name aws -type f 2>/dev/null #설치된 위치 찾기
ls -l /usr/local/bin/aws #설치 여부 확인
export PATH=$PATH:/usr/local/bin #경로 설정
aws --version #확인
5) VM (서버)에서 AWS Configure 등록하기
AWS S3에 직접 접근하고 AWS-CLI를 사용하기 위해서는 AWS Configure을 진행합니다.
#VM 서버 접속
aws configure
- 위에 기록해둔 AK
- 위에 기록해둔 SK
- ap-northeast-2
- json
6) VM (서버)에서 OS 파일(qcow2 형식)을 raw로 변경하기
만일, ios 형태면 => qcow2 => raw 혹은 iso => raw로 변경해줍니다.
필자는 qcow2 Type을 raw로 변경하겠습니다.
6-1) qemu-img 설치
qcow2 형식을 raw로 바꾸려면 qemu Package가 필요합니다.
# Debian / Ubuntu OS
sudo apt-get install qemu-system
# Arch OS
sudo pacman -S qemu
# Fedora
dnf install @virtualization
# Gentoo
emerge --ask app-emulation/qemu
# RHEL / CentOLS
yum install qemu-kvm
# SUSE
zypper install qemu
6-2) qcow2 이미지를 raw 이미지로 변환하기
qemu 라이브러리를 통해 변환시켜 줍니다.
qemu-img convert -f qcow2 -O raw ./파일명.qcow2 ./변경할명.raw
7) 변환한 raw 이미지 파일을 AWS S3에 적제
aws s3 cp ./변경명.raw s3://S3_bucket명/S3_폴더명/
8) S3에 적재된 OS로 AWS EBS SnapShot 생성
import snapshot을 사용해서 EBS Snapshot을 생성해야 합니다.
AWS CLI를 통해 해당 작업을 진행하려면 S3 Bucket과 파일 위치를 지정하는 JSON 파일이 필요합니다.
8-1) json 파일 생성
vi containers.json
{
"Description": "My Raw OS",
"Format": "RAW",
"UserBucket": {
"S3Bucket": "본인_파일이있는_S3_버킷명",
"S3Key": "S3_폴더명/S3에_적제된_이미지파일명.raw"
}
}
8-2) EBS Snapshot으로 변환
import-snapshot을 통해 S3 Bucket에 있는 raw 데이터를 EBS Snapshot으로 변환합니다.
aws ec2 import-snapshot --description "My OS IMG" --disk-container file://containers.json
다음과 같이 생성 과정이 나옵니다.
{
"Description": "Test",
"ImportTaskId": "import-snap-12381249fweklf",
"SnapshotTaskDetail": {
"DiskImageSize": 0.0,
"Format": "RAW",
"Progress": "0",
"Status": "active",
"StatusMessage": "pending",
"UserBucket": {
"S3Bucket": "본인_S3_버킷명",
"S3Key": "S3_Bucket_폴더명/rhel.raw"
}
}
}
그러면 생성 정보가 나오는데 이때 ImportTaskID를 복사합니다. (생성까지는 최대 10분)
Snapshot 변환 상태 혹은 진행 사항을 확인합니다.
aws ec2 describe-import-snapshot-tasks --import-task-ids import-snap-위에서_복사한_번호
완료가 되면 Status : Compeleted가 됩니다.
9) AWS EBS SnapShot을 AMI로 생성
1) EC2 검색 -> EBS : 스냅샷 선택
2) 선택 -> 작업 -> 스냅샷에서 이미지 생성
10) AWS AMI를 AWS EC2로 생성
1) EC2 검색
2) 이미지 -> AMI 클릭
3) 만든거 선택 -> AMI로 인스턴스 시작
이 과정을 거치면, OS를 S3로 올려 AWS EC2를 만들 수 있게 됩니다.