Print
카테고리: [ Amazon Web Services ]
조회수: 4671
일부 프라이빗 시스템을 구축할 때, 외부 인터넷에 대한 연결을 차단해야 하는 경우가 있다. 이 때, EC2에서 다른 서비스를 사용하지 못하는 문제가 함께 발생하는데, 이를 위해 AWS에서는 VPC에 엔드포인트 연결 기능을 제공하여 다른 AWS 서비스의 엔드포인트에 대한 연결이 가능하도록 돕고 있다. 그런데 AWS에서는 여기에 한 술 더 떠 EC2에서 모든 유입을 차단시켜 bastion 서버를 경유하여 들어오지 못하게 하면서도 접속을 할 수 있는 방법을 제공하고 있는데, Systems Manager 서비스의 Session Manager(ssm)가 그 예이다.
 
이번 글에서는 EC2에 대해 Session Manager로만 접속을 허용하고, 다른 AWS 서비스 엔드포인트를 함께 추가하여 이용하는 방법을 기술한다.
 
1. 기본 프라이빗 네트워크 구성
VPC, Subnet, Route Table을 구성한다. Route Table의 경우에는 Vpc를 만들면 기본적으로 함께 생성되므로, VPC와 Subent을 생성한다.
- VPC CIDR : 10.0.0.0/16
- Subnet CIDR : 10.0.0.0/24
- Route Table : Subnet을 Route Table의 association 대상에 추가한다.
 
2. 엔드포인트 연결
ssm 관련 엔드포인트 추가를 위해 dns 옵션을 활성화해야 하는데, VPC에서 다음 항목의 dns 옵션을 enable한다.
- dns hostnames
- dns support (=dns resolution)
 
3. 엔드포인트 Security Group 생성 
ssm 관련 엔드포인트 추가를 위해 Security Group이 필요한데, 엔드포인트와 HTTPS 통신이 이루어지므로 443포트에 대한 개방이 필요하다. Source IP는 EC2 Security Group에 대해 설정이 가능한데, 우선은 생성해두지 않았으므로 전체 개방한다.
- Inboud Rule : 443포트(HTTPS) 개방 
- Source IP : 0.0.0.0/0
 
4. ssm 엔드포인트 추가
ssm 사용을 위한 엔드포인트를 추가한다. ssm 외에 ssmmessages, ec2messages에 대한 엔드포인트 추가가 함께 필요하다.
- VPC -> Endpoint 메뉴에서 엔드포인트 추가(ssm, ssmmessages, ec2messages)
- VPC, Subnet, Security Group 선택, 추가로 Enable DNS name 옵션에서 Enable for this endpoint 체크
 
5. S3 엔드포인트 추가
S3 액세스를 위해 다시 S3에 대한 엔드포인트를 추가한다. 
- VPC 및 Route Table 지정
 
6. EC2 Role 생성
- IAM에서 EC2에서 사용할 Role을 생성한다.
- Policy : AmazonSSMManagedInstanceCore, AmazonS3FullAccess 선택 
 
※ EC2에서 Credential을 사용하거나 엔드포인트 서비스에서 별도의 접근 허용 Policy를 생성하여 액세스할 예정이라면 AmazonSSMManagedInstanceCore만 선택하도록 한다.
 
7. EC2 생성 
- AMI는 가능하면 ssm 에이전트가 기본적으로 설치되어있는 이미지(Amazon Linux 등)를 선택하도록 한다. ssm 에이전트가 없는 이미지를 선택할 경우, 직접 액세스하여 별도로 에이전트를 구성하는 과정이 필요하다.
- 세부 항목에서 VPC, Subnet을 지정하고, Auto-assign Public IP 항목은 disable로 선택하여 Private IP만 할당받도록 한다. 
- Security Group은 어떠한 inbound 정책도 할당하지 않는다.
- Key Pair의 경우 Session Manager를 통해 EC2에 접근할 경우 필요없으나 우선은 ssh 접속이 필요한 경우를 고려하여 사용하도록 한다.
 
8. EC2 접속
Systems Manager 서비스에서 Session Manager로 이동하여 생성한 EC2로 접속해본다.
 
※ 혹시 위의 순서와 다르게 EC2를 먼저 생성하고 엔드포인트를 할당했다면 ec2 내의 ssm 에이전트가 ssm 엔드포인트에 액세스하지 못하여 처음 기동시 제대로 실행되지 않았을 수 있다. 이 때는 잠시 EC2에 Public IP를 할당하고 라우팅 테이블에 IGW를 연결한 뒤 임시로 접속하여 ssm 에이전트를 재기동 하거나 EC2를 reboot하여 에이전트가 다시 정상적으로 기동될 수 있도록 해야 한다.
 
9. S3 액세스
aws cli를 이용하여 S3에 대한 테스트를 해본다.
- [aws s3 ls --region ap-northeast-2] 또는 [aws s3 ls --endpoint-url https://s3.ap-northeast-2.amazonaws.com]을 입력하여 S3 Bucket 목록이 확인되는지 테스트
 
※ 여기서 주의할 점은, region이나 endpoint-url 옵션의 파라미터로 리전 코드가 들어가게 되는데, 이는 5번에서 VPC 엔트포인트를 선택할 때 url을 보면 알 수 있는 과정으로서 엔드포인트는 cross region이 지원되지 않는다. 따라서 네트워크를 서울 리전에서 구성했다면 리전코드 또한 마찬가지로 ap-northeast-2밖에 사용할 수 없다는 것을 인지해야 한다.