AWS CLI를 사용하여 EC2 인스턴스 구성
AWS Command Line Interface(AWS CLI)를 사용하여 GitLab 설치용 EC2 인스턴스 구성
사전 조건
- AWS CLI 설치 및 보안 자격 증명 구성이 되어 있어야 한다.
Amazon EC2 키 페어
Amazon EC2 인스턴스를 생성할 때 Amazon EC2에 키 페어를 제공한 다음, 인스턴스에 연결할 때 해당 키 페 어를 사용하여 인증해야 한다.
키 페어 생성
키 페어를 생성하려면 create-key-pair 명령과 함께 --query 옵션 및 --output text 옵션을 사용하여 프라이빗 키를 직접 파일에 파이프한다.
aws ec2 create-key-pair --key-name gitlab-poc --query 'KeyMaterial' --output text > gitlab-poc.pem
결과로 나온 gitlab-poc.pem 파일은 아래와 유사하다.
-----BEGIN RSA PRIVATE KEY-----
EXAMPLEKEYKCAQEAy7WZhaDsrA1W3mRlQtvhwyORRX8gnxgDAfRt/gx42kWXsT4rXE/b5CpSgie/
...
oMo7yykABY7Ozd5wQewBQ4AdSlWSX4nGDtsiFxWiI5sKuAAeOCbTosy1s8w8fxoJ5Tz1sdoxNeGs
...
...
NWUH38v/nDCgEpIXD5Hn3qAEcju1IjmbwlvtW+nY2jVhv7UGd8MjwUTNGItdb6nsYqM2asrnF3qS
VRkAKKKYeGjkpUfVTrW0YFjXkfcrR/V+QFL5OndHAKJXjW7a4ejJLncTzmZSpYzwApc=
-----END RSA PRIVATE KEY-----
프라이빗 키는 AWS에 저장되지 않고 키가 생성될 때만 검색할 수 있다. 나중에 복구할 수 없으므로 잘 보관해야 한다. 프라이빗 키를 잃어버리면 새 키 페어를 생성해야 한다.
키 페어 표시
키 페어에서 "지문(Fingerprint)"이 생성되고 이 지문을 사용하여 로컬 시스템에 있는 프라이빗 키가 AWS에 저장된 퍼블릭 키와 일치하는지 확인할 수 있다. 지문은 프라이빗 키의 DER 인코딩된 사본에서 가져온 SHA1 해시이다. 이 값은 키 페어가 생성될 때 캡처되어 퍼블릭 키와 함께 AWS에 저장된다. 지문은 Amazon EC2 콘솔에서 보거나 AWS CLI 명령 aws ec2 describe-key-pairs를 실행하여 볼 수 있다.
명령을 실행하면 아래와 유사하다.
$ aws ec2 describe-key-pairs --key-name gitlab-poc
{
"KeyPairs": [
{
"KeyPairId": "key-example59cedd99xx",
"KeyFingerprint": "1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f",
"KeyName": "gitlab-poc",
"Tags": []
}
]
}
Amazon EC2 보안 그룹
기본적으로 방화벽 역할을 하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 대한 보안 그룹과 함께, 들어오고 나가는 네트워크 트래픽을 결정하는 규칙(Inbound/Outbound rules)을 생성할 수 있다.
보안 그룹 생성
AWS 계정의 기본값 VPC(가상 사설 클라우드)와 연결된 보안 그룹을 만든다.
$ aws ec2 create-security-group --group-name gitlab-poc-sg --description "GitLab PoC security group" --vpc-id [Default VPC ID]
{
"GroupId": "sg-903004f8"
}
보안 그룹에 대한 초기 정보를 보려면 describe-security-groups 명령을 실행한다.
$ aws ec2 describe-security-groups --group-ids [Security Group ID]
{
"SecurityGroups": [
{
"Description": "GitLab PoC security group",
"GroupName": "gitlab-poc-sg",
"IpPermissions": [],
"OwnerId": "123456789012",
"GroupId": "sg-903004f8",
"IpPermissionsEgress": [
{
"IpProtocol": "-1",
"IpRanges": [
{
"CidrIp": "0.0.0.0/0"
}
],
"Ipv6Ranges": [],
"PrefixListIds": [],
"UserIdGroupPairs": []
}
],
"VpcId": "vpc-1a2b3c4d"
}
]
}