AWS - EFS, NAT Gateway, S3
1. EFS(Elastic File System)
1.1. 보안그룹 생성
- 이름 : my-sg-efs
- vpc : my-vpc
- 인바운드 규칙 : NFS, web-sg
1.2. EFS(Elastic File System)
- 이름 : my-efs
- vpc : my-vpc
- 서브넷이 라우팅 테이블로 다 연결되어 있기 때문에 서브넷이 뒤죽박죽이지만 신경 쓰지 말것 ?
- EFS는 위에서 설정한 서브넷 4곳에 분산되어 있어서 4개의 서브넷에 각각 efs가 존재하며
- 서로 연결되어 있어서 파일이 공유된다. -> 중복저장이라고 볼 수 있다.
1.3. wordpress 인스턴스 생성
- template을 활용해서 인스턴스를 활용하려 했지만 문제발생
- AMI를 활용해서 인스턴스를 만들어본다.
- 서브넷을 프라이빗으로 설정했지만 문제가 발생했다.
- 사용자데이터에서 필요한 모듈들을 인터넷을 통해서 해야하지만
- 프라이빗에서는 인터넷이 되지 않기 때문에 문제점이 있다
- 하지만 설치를 포기하고 서브넷을 프라이빗으로 셋팅 후 진행해본다.
- 퍼블릭 IP 자동 할당을 비활성화로 설정한다.
- 파일 시스템을 EFS로 설정하고 이전에 생성한 my-efs를 선택한다.
- 보안 그룹은 이전에 생성했기 때문에 "보안 그룹을 자동으로 생성 및 연결"을 선택하지 않는다.
- "필요한 사용자 데이터 스크립트를 연결하여 공유 파일 시스템을 자동으로 탑재" 이 부분을 선택하면 사용자 데이터가 자동으로 생성된다.
- 사용자 데이터가 자동으로 생성되는걸 확인할 수 있다.
- 이 부분에서 설치 부분의 bash 명령어들은 인터넷이 안되기 때문에 실행이 안된다.
- basiton host를 통해서 인스턴스에 접근한다.
- efs 경로를 만들고 dns주소로 마운트한다.
- df -h 명령어를 입력하면 EFS가 마운트 된걸 볼 수 있다.
- 사용자 인스턴스 설정에서 자동으로 마운트가 되야하지만 그렇지 못했기 때문에 수동으로 마운트 했다.
- Amazon Linux의 경우는 nfs4 utility가 자동으로 활성화 되어 있었기 때문에 마운트 구문을 사용자 데이터에 넣어주면 인터넷과는 상관없이 마운트가 가능했다.
* 점심시간에 앞서서 이 인스턴스를 지우고 똑같이 다시 만들었다. 그랬더니 인터넷 연결이 없이도(Natgateway가 없이도) 마운트가 되었다. 추축해보건데, 사용자 데이터 안에서 설치부분 명령어를 실행시키는데 인터넷이 없어서 Latency가 발생했고 시간이지나 마지막 마운트 명령어가 시작되어 결과적으로 Natgateway 없이 마운트가 실행된거 같다. 즉, 인터넷 연결 없이도 마운트가 가능하다.
* 하지만 Ubuntu server는 NatGateway가 있어야 efs 마운트가 가능했다.
- wp01 인스턴스를 만드는 것처럼 똑같이 wp02를 만들고
- bastion host를 통해서 wp02에 접근한 다음 마운트 목록을 확인하였다.
- NAT Gateway를 통해서 인터넷이 연결 됐기 때문에 EFS 파일이 마운트 된 것을 확인할 수 있었다.
- wp02에서 마운트된 경로에 임의로 test.txt. 파일을 만들고 wp01에서 마운트 된 EFS 경로를 확인 결과 test.txt.파일이 존재했다.
2. NAT Gateway( = IP 공유기)
NAT(네트워크 주소 변환) 게이트웨이를 사용하여 프라이빗 서브넷의 인스턴스를 인터넷 또는 기타 AWS 서비스에 연결하는 한편, 인터넷에서 해당 인스턴스와의 연결을 시작하지 못하도록 할 수 있다. 계정에서 NAT 게이트웨이 생성 및 사용에 대한 요금이 청구 된다. NAT 게이트웨이 시간당 사용 요금 및 데이터 처리 요금이 적용된다.
- 탄력적 IP 할당을 통해서 public IP를 하나 부여한다.
- private 영역의 라우팅 테이블을 위에 처럼 수정한다.
- 프라이빗에 있는 인스턴스들은 NGW를 거치고 인터넷 게이트웨이를 통해서 외부와 통신이 가능해진다.
3.S3(Simple Storage Service)
확장성과 데이터 가용성 및 보안과 성능을 제공하는 객체 스토리지 서비스. 어떤 규모 어떤 산업의 고객이든 이 서비스를 사용하여 웹 사이트,모바일 애플리케이션, 백업 빛 복원, 아카이브, 엔터프라지 애플리케이션, IoT 디바이스, 빅 데이터 분석 등과 같은 다양한 사용 사례에서 원하는 만큼의 데이터를 저장하고보호할 수 있다. Amazon S3는 사용하기 쉬운 관리 기능을 제공하므로 특정 비즈니스, 조직 및 규정 준수 요구 사항에 따라 데이트를 조직화하고 세부적인 엑세스 제어를 구성할 수 있다.
3.1. S3 서비스 만들기
- 검색 창에 S3검색 후 버킷 만들기 버튼을 클릭한다.
- S3 버킷의 이름과 리전을 선택한다.
- ACL을 활성화하지 않으면서 정말 권한을 가진 사용자만 S3를 이용할 수 있도록 만든다.
- S3의 퍼블릭 접근(외부 접근)을 막기 위한 설정
- Rollback 기능(과거의 S3 버전으로 되돌아 갈 수 있는 기능)
- 사진에는 비활성화에 표시 했지만 활성화를 클릭한다.
- 아무나 S3안에 데이터를 쉽게 볼 수 없도록 키로 암호화하는 장치
3.2. S3 CLI 서비스 아용
- 구글에 aws CLI 를 검색하고 해당 웹 페이지로 들어간다.
- windows 항목에서 해당 주소로 접근하여 프로그램을 다운 받는다.
- aws --version명령어로 CLI 프로그램 버전 확인
- aws s3 ls로 s3 목록을 보려했지만 권한이 없기 때문에 확인이 불가능 하다.
- s3만 다루는 사용자를 만들고 S3에 대한 모든 접근 권한을 준다.
- AmaonS3FullAccess
- 보안 자격 증명에서 엑세스키를 만든다.
- 이 키로 S3 bucket에 접근한다.
- 엑세스 키가 만들어지면 .csv파일을 내려받는다.
- 이 키는 절대 외부로 노출되면 안된다.
- aws configure을 입력한다
- access Key ID와 access key를 입력해서 자격 증명을 마친다.
- 다시 한번 aws s3 ls 명령어를 입력해서 s3 bucket 목록을 확인한다.
- users 경로에 index.html파일과 two-rabbit.jpg 파일을 올린다.
- cmd 창에서 두 파일을 확인한다.
- cp는 업로드하는 명령어
- COM 경로에 있는 index.html 파일을 s3버킷에 올린다.
- two-rabbit 파일을 S3안에 /images라는 경로를 만들어 넣어줄 수 있다.
- sync라는 명령어를 활용해서 windows 서버안에 backup이라는 폴더를 s3 버킷에 /backup/ 경로를 만들어서 올린다.
- aws s3 ls s3://hyeongyun-seoul이라는 명령어를 입력하면 확인 가능하다.
- rm 명령어를 활용해서 폴더나 파일을 지울 수 있다.
- 폴더 안에 내용이 있으면 안지워 진다.
- recursive 를 명령어를 활용하면 폴더 안에 내용이 있어도 지울 수 있다.
3.3. 역할 생성
- 역할을 사용하여 일반적으로 AWS 리소스에 액세스할 수 없는 사용자, 애플리케이션 또는 서비스에 액세스 권한을 위임할 수 있다.
- S3 권한을 bastion_host 서버에 위임하는게 목표다
- AmazonS3FullAccess 권한을 역할에 추가한다.
- 다음으로 역할이름을 지어준다.
- bastion_host 인스턴스에 보안 항목에서 역할 관련 탭을 선택 후 방금 만든 s3-role 역할을 부여한다.
- bastion_host CLI에서 정상적으로 S3 버킷에 접근하는 것을 볼 수 있다.
- cp 명령어를 이용하여 s3에 있는 파일들을 bastion_host root 경로로 가져온다.