IAM의 보안 모범 사례
- 임시 보안 인증을 사용하여 AWS에 액세스하려면 인간 사용자가 ID 공급자와의 페더레이션을 사용하도록 요구합니다.
- AWS에 액세스하려면 워크로드에 IAM 역할이 있는 임시 자격 증명을 사용하도록 요구합니다.
- 다중 인증(MFA) 필요
- 장기 보안 인증이 필요한 사용 사례에 필요한 경우 액세스 키 업데이트
- 모범 사례를 따라 루트 사용자 보안 인증을 보호하세요
- 최소 권한 적용
- AWS 관리형 정책으로 시작하고 최소 권한을 향해 나아갑니다.
- IAM 액세스 분석기를 사용하여 액세스 활동을 기반으로 최소 권한 정책 생성
⇒ 최소 권한 정책을 도와주는 것이 엑세스 분석기
- 사용하지 않는 사용자, 역할, 권한, 정책 및 보안 인증은 정기적으로 검토하고 제거합니다.
- IAM 정책의 조건을 사용하여 액세스 추가 제한
⇒ 특정 리소스에 대해서 특정 액션을 Allow or Deny 외 컨디션이라는 항목 추가 가능. 컨디션이란? 고난 체계 세부화해주는 항목
- IAM Access Analyzer를 사용하여 리소스에 대한 퍼블릭 및 크로스 계정 액세스 확인
- IAM Access Analyzer를 사용하여 IAM 정책을 검증하여 안전하고 기능적인 권한을 보장합니다.
⇒ 잘못된 접근이 있는지 확인 후 권한 조정
- 여러 계정에 권한 가드레일 설정
- 권한 경계를 사용하여 계정 내에서 권한 관리 위임
AWS 계정에 대한 루트 사용자 모범 사례
- 루트 사용자 보안 인증을 보호하여 무단 사용 방지
⇒ 루트 계정 공유 하지 말 것.
- 액세스를 보호하려면 강력한 루트 사용자 암호 사용
- 다중 인증(MFA)을 통한 루트 사용자 로그인 보호
- 루트 사용자에 대해 액세스 키를 생성하지 않음
⇒ 엑세스 키는 프로그램 방식으로 동작할 때도 루트 계정 사용하지 말 것.
- 가능하면 루트 사용자 로그인에 여러 사람 승인 사용
⇒ 다른 사람의 컨펌이 떨어져야 로그인할 수 있도록 할 것.
- 루트 사용자 보안 인증에 그룹 이메일 주소 사용
- 계정 복구 메커니즘에 대한 액세스 제한
⇒ 아이디/비밀번호 분실 시 사용하는 메커니즘이 계정 복구 메커니즘. 이걸로 아이디를 탈취할 수 있으므로 접근 제한둘 것.
- 조직 계정 루트 사용자 보안 인증 보호
- 액세스 및 사용 모니터링
AWS 서비스를 이용하는 방법
Management Console
로 접근
⇒ 사람 사용자가 로그인 후 사용
AWS CLI
로 접근
⇒ 사람 또는 프로그램이 Access Key를 이용해서 사용
- 각 개발 언어별
SDK
로 접근
⇒ 응용 프로그램을 이용해서 사용
설치
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
설치 확인
aws --version
사용자 목록 조회
참조
https://docs.aws.amazon.com/cli/latest/reference/iam/list-users.html
Rookies 계정에서 엑세스 키 생성
IAM > 사용자 > 계정 선택 > 엑세스 키 > 엑세스 키 만들기
aws configure
AWS Access Key ID [None]: 발급받은 액세스 키
AWS Secret Access Key [None]: 발급받은 비밀 액세스 키
Default region name [None]: 본인에게 할당된 리전 ID
Default output format [None]: json
미국 오레곤 us-west-2
list-users 명령어를 실행
aws iam list-users
{
"Users": [
{
"Path": "/",
"UserName": "CostManager",
"UserId": "AIDA25MLMKZCHDLDDMHAI",
"Arn": "arn:aws:iam::750300976708:user/CostManager",
"CreateDate": "2023-03-24T07:15:27+00:00"
},
{
"Path": "/",
"UserName": "Rookies017",
"UserId": "AIDA25MLMKZCDY7JAFV7C",
"Arn": "arn:aws:iam::750300976708:user/Rookies017",
"CreateDate": "2023-11-24T01:35:51+00:00",
"PasswordLastUsed": "2023-12-01T00:05:58+00:00"
},
{
-- More --
list-bucket
aws s3api list-buckets
{
"Buckets": [],
"Owner": {
"DisplayName": "aws18",
"ID": "746ce9a1e013440b4f3c237243c3388d924e31936cb4cd6df78ef2dcb29329a2"
}
}
VPC(Virtual Private Cloud)
VPC 란?
- AWS 사용자 계정 전용 가상 네트워크
- AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리
- 리전 단위의 서비스 ⇒ 한 AWS 리전 안에서만 존재, 다른 리전에서는 보이지 X ⇒ VPC 간 연결하려면
VPC Peering
이용
- 생성할 때 RFC 1918에 지정된 프라이빗 주소 체계 사용을 권고
VPC 구성
- 가용 영역 : 천재지변과 같은 문제로부터 피해를 최소화하기 위함
- CIDR 블록 : IP를 갖고
- DNS 옵션 :
- 인터넷 게이트웨이 : IGW(Internet Gateway)
- 이름 : VPC이름
- NAT 게이트웨이 : 인터넷 게이트웨이로 연결해 리소스를 프라이빗 서브넷에서 외부로 나갈 수 있게 도와줌.
- 라우팅테이블 : 라우팅 규칙을 설정
- 서브넷 : 퍼블릭 서브넷(인터넷 연결 O), 프라이빗 서브넷(인터넷 연결 X)
- Tenancy : VPC로 시작하는 EC2인스턴스가 다른 AWS 계정과 공유되는 하드웨어에서 실행되는지 아니면 사용자 전용 하드웨어에서 실행되는지 정의.
기본 VPC란?
- Default VPC
- 각 가용 영역의 퍼블릭 서브넷, 인터넷 게이트웨이 및 DNS 확인 활성화 설정과 함께 제공
- 준비 과정 없이 빠르게 시작하여 배포가능
기본 VPC 구성
-
IPv4 CIDR 블록의 크기가 /16인 VPC를 만듭니다 (172.31.0.0/16). 이는 최대 65,536개의 프라이빗 IPv4 주소를 제공합니다.
-
각 가용 영역에 크기 /20의 기본 서브넷을 생성합니다. 이렇게 하면 서브넷당 최대 4,096개의 주소가 제공되며, 그중 몇 개는 내부용으로 예약되어 있습니다.
-
인터넷 게이트웨이를 만들어 기본 VPC에 연결합니다.
-
기본 라우팅 테이블에 모든 트래픽(0.0.0.0/0)이 인터넷 게이트웨이로 전달되는 경로를 추가합니다.
-
기본 보안 그룹을 만들어 기본 VPC와 연결합니다.
⇒ 모든 인바운드/아웃바운드 트래픽을 허용→통제하는 것이 없다는 뜻.
-
네트워크 ACL(액세스 제어 목록)을 생성하여 기본 VPC와 연결합니다.
-
AWS 계정에서 설정된 기본 DHCP 옵션을 기본 VPC와 연결합니다.
서브넷
정의
- VPC 내 논리적인 구분
- EC2 인스턴스를 배치하는 장소 == 인스턴스는 서브넷 안에 위치
특징
- 한 번 서브넷에 인스턴스를 생성하면 다른 서브넷으로 옮길 수 없음
- 인스턴스를 종료하고 다른 서브넷에 새 인스턴스를 만들 수 있음
- 인스턴스를 서로 격리하고, 인스턴스 간의 트래픽 흐름을 제어하고, 인스턴스를 기능별로 묶을 수 있음.
- 서브넷은 하나의 가용 영역(AZ) 내에서만 존재 가능
- 서브넷의 CIDR블록
서브넷 종류
- 퍼블릭 서브넷 : 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 라우팅 테이블과 연결된 경우
- 프라이빗 서브넷 : 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 없는 라우팅 테이블과 연결된 경우
ENI(Elastic Network Interface)
정의
- 탄력적 네트워크 인터페이스
- 물리 서버의 NIC(Network Interface Card)와 같은 기능 수행
- VPC에서 가상 네트워크 카드를 나타내는 논리적 네트워킹 구성 요소
인터넷 게이트웨이(IGW)
인터넷 게이트웨이란?
- 퍼블릭 IP주소를 갖는 인스턴스가 인터넷에 연결할 수 있도록 기능을 제공하는 것
인터넷 게이트웨이의 특징
- 처음 VPC를 만들면 IGW가 연결되어 있지 않으므로, 직접 IGW를 만들고 VPC와 연결해야 한다.
- 하나의 VPC는 하나의 IGW에만 연결 가능하다.
라우팅
라우팅이란?
- VPC의 네트워크 트래픽을 전달할 위치를 결정하는데 사용되는 규칙
- 트래픽을 전달할 대상 IP주소 범위와 트래픽을 전송할 게이트웨이, 네트워크 인터페이스 또는 연결(대상)을 지정
라우팅 특징
-
VPC는 소프트웨어 함수로 IP 라우팅을 구현 ⇒ 사용자는 라우팅 테이블만 관리
-
라우팅 테이블 : 라우팅 집합으로 서브넷과 연결 가능
-
기본 라우팅 테이블 : VPC와 함께 자동으로 제공되는 라우팅 테이블
- 기본 VPC인 경우, local 및 IGW로의 라우팅을 포함
- 기본 VPC가 아닌 경우, local 라우팅만 포함
[기본 VPC인 경우]
대상주소 대상
---------------- ----------------
172.31.0.0/16 local
0.0.0.0/0 igw-xxxxxxxx
↑ 인터넷 상의 모든 호스트 IP ↑ 인터넷 게이트웨이
172.31.10.10
주소로 트래픽을 보내는 경우, 172.31.0.0/16
주소 범위에 속하므로 VPC내부에서 대상 인스턴스를 찾고, 192.100.10.10
주소로 트래픽을 보내려는 경우, 172.31.0.0/16
주소범위에는 속하지 않지만 0.0.0.0/0
주소 범위에는 속하므로 IGW로 해당 트래픽을 전달한다.
⇒ 라우팅할 위치와 가장 근접하게 일치하는 항목을 기반으로 라우팅 처리
⇒ 라우팅 테이블의 항목들 간의 순서는 중요 X
보안그룹(SG, Security Group)
보안그룹이란?
- 방화벽과 같은 기능 제공
- 인스턴스의 ENI에서 송수신하는 트래픽 제어
보안그룹 특징
- 모든 ENI는 최소 한 개 이상의 보안 그룹과 연결되어야 하고, 보안 그룹은 여러 ENI와 연결할 수 있다. ⇒ N:N 관계
- 생성할 때 보안 그룹 이름, 설명, 포함될 VPC를 지정하고, 생성 후에 인바운드, 아웃바운드 규칙 지정 ⇒ 트래픽 허용
- 상태 저장 방화벽 역할 ⇒ 보안 그룹이 트래픽을 한 방향으로 전달되도록 허용할 때 반대 방향의 응답 트개픽을 지능적으로 허용하는 것
NACL(Network Access Control List)
NACL이란?
- 보안그룹과 유사
- 원본 또는 대상 주소 CIDR, 프로토콜, 포트를 기반으로 트래픽을 인바운드, 아웃바운드 규칙으로 제어 ⇒ 방화벽과 같은 역할
- VPC에 삭제할 수 없는 기본 NACL 有
NACL 특징
- 서브넷에 연결되어 해당 서브넷과 송수신되는 트래픽을 제어
- 상태 비저장
- NACL을 통과한 연결 상태를 추적 X
- 모든 인바운드와 아웃바운드 트래픽의 허용 규칙 별도 작성
- 규칙을 적용할 때 규칙 번호의 오름차순으로 처리
보안 그룹 VS NACL
보안 그룹 | 네트워크ACL |
---|
인스턴스 레벨에서 운영 | 서브넷 레벨에서 운영 |
인스턴스와 연결된 경우에만 인스턴스에 적용 | 연결된 서브넷에서 배포된 모든 인스턴스에 적용 |
허용 규칙만 지원 | 허용 및 거부 규칙 지원 |
EC2(Elastic Compute Cloud)
EC2란?
- 안전하고 크기 조정이 가능한 컴퓨팅 파워를 제공하는 웹 서비스
- 안정적인 확장 가능한 인프라에 온디맨드로 액세스
AMI(Amazon Machine Image)
AMI란?
- 인스턴스를 시작하는데 필요한 정보를 제공하는 AWS에서 지원되고 관리되는 가상머신 이미지
인스턴스 타입의 명명 규칙
EIP(Elastic IP)
EIP란?
- 탄력적인 IP
- 정적인 IPv4주소로, AWS 계정에 할당되며, 릴리즈할 때까지 할당된 상태 유지
- EC2 인스턴스를 중지하고 다시 시작하면 퍼블릭 IP주소가 변경되나, EC2 인스턴스에 EIP주소를 연결하면 EC2 인스턴스를 다시 시작해도 동일한 IP로 접속 가능
EIP 주소 요금
- 인스턴스가 실행 중인 동안에는 이와 연결된 EIP 주소 하나에 대해서만 요금이 부과 X → 해당 인스턴스와 연결된 추가 EIP 주소에 대해서는 요금이 부과
- 연결되어 있지 않거나 중지된 인스턴스 또는 연결되지 않은 네트워크 인터페이스와 연결된 경우 시간당 요금 부과
- 2024년 2월 1일부터, 실행 중인 인스턴스와 연결된 주소를 포함하여 모든 탄력적 IP주소에 대해 요금이 부과된다.