[AWS 03] AWS를 잘 쓰려면 알아야 하는 기본 서비스
[학습 목표]
AWS는 제공하는 서비스가 다양하기 때문에 어떤 종류가 있고 어떤 서비스를 제공하는지 파악하는 게 중요합니다. 이번 장에서는 AWS 클라우드의 기본적인 구조와 원리를 파악하고 AWS 권한을 관리하는 서비스를 알아봅시다.
[핵심 키워드]
AWS 웹 서비스 구조, AWS IAM, IAM 사용자, 루트 사용자, IAM 그룹, IAM 정책, AWS 관리형 정책, 고객 관리형 정책, 인라인 정책, IAM 역할. AWS CLI
[학습 코스]
➊ AWS 동작 원리 이해하기 ➝ ➋ 권한 관리 서비스, AWS IAM 파악하기 ➝ ➌ AWS IAM 생성하기
1. AWS에서 동작하는 웹 서비스 구조와 원리 파악하기
3장은 AWS에서 동작하는 웹 서비스의 구조와 원리를 학습합니다. AWS의 웹 서비스 구조는 기본적으로 클라우드 기반으로 구축되며, 그중심이 되는 서비스는 다음과 같은 구성 요소들이 포함됩니다.
AWS IAM : 사용자 및 AWS 리소스에 대한 액세스를 제어하는 권한 관리 서비스
아마존 EC2 : AWS에서 제공하는 가상 클라우드 서버
아마존 RDS : 다양한 데이터베이스 엔진을 제공하는 관계형 데이터베이스
아마존 S3 : 객체(파일 및 데이터)를 저장하는 객체 스토리지 서비스
4가지 서비스는 클라우드에서 웹 서비스를 구성하는 기본 서비스입니다. 클라우드 기반 서버와 스토리지, 데이터베이스, 보안 등의 다양한 기능과 옵션을 제공하여 사용자가 필요한 웹 서비스를 구축하고 운영할 수 있도록 합니다. 다음 그림을 통해 AWS의 4가지 기본 서비스를 이용한 웹 서비스의 구성을 살펴봅시다.
앞의 그림은 AWS의 4가지 기본 서비스(IAM, EC2, RDS, S3)를 이용하여 간단하게 웹 서비스를 구성한 구조입니다.
※ 지금 당장 위의 구성을 이해하지 못해도 괜찮습니다. 3장 학습을 마친 다음 확인해보세요.
➊ 사용자가 AWS 서비스인 세션 매니저Session Manager를 이용하여 EC2 인스턴스로 안전하게 접속을 시도합니다. ➋ EC2 인스턴스에서는 세션 매니저를 이용할 수 있는 권한과 아마존 S3에 대한 액세스 권한을 가진 IAM 역할을 추가합니다. ➌ 아마존 S3에서는 정적 데이터를 관리하거나, EC2 인스턴스와의 상호작용을 통해 데이터를 주고받습니다. ➍ EC2 인스턴스에서 RDS로 접근하여 데이터베이스를 관리하거나 쿼리를 관리할 수 있습니다. ➎ 사용자는 설치한 AWS CLI를 이용하여 접속하고자 하는 AWS 환경으로 세션 매니저 포트 포워딩 세션을 생성합니다. ➏ 포트 포워딩을 세션을 생성하면 사용자 환경과 AWS를 이어주는 세션 매니저 터널Session Manager Tunnel이 생성되며, 생성된 터널을 이용하여 사용자 환경에서 EC2 인스턴스 혹은 RDS로 접속할 수 있습니다.
이렇게 4가지 서비스를 이용하여 간단한 웹 서비스를 구성을 살펴봤습니다. 그 외 다양한 AWS 서비스를 통해 고가용성, 확장성, 보안 등의 기능을 제공받아 웹 서비스 구축에 도움을 받을 수 있습니다. 이제부터 AWS 4가지 기본 서비스가 제공하는 기능을 파악하고 실습을 통해 구성 및 운영하는 방법을 알아보겠습니다.
2. 권한 관리 서비스, AWS IAM 파악하기
AWS에서 권한 관리는 주로 AWS IAM을 활용하여 이루어집니다. 예외로 데이터 관리와 보안에 아마존 S3와 백업과 복원 등을 지원하는 AWS 백업AWS Backup의 백업 볼트와 같은 서비스를 이용해 자체적인 액세스 정책을 설정하여 관리할 수도 있습니다. 이번에는 AWS IAM을 중심으로 AWS 리소스에 대한 액세스 및 권한 관리 방법을 살펴보겠습니다.
2.1 AWS IAM이란?
IAM은 Identity and Access Management의 약자로 AWS 계정 내에서 각 사용자, 그룹 또는 리소스에 대한 권한을 중앙 집중적으로 관리합니다. 이를 통해 AWS 리소스에 대한 액세스를 제어하고 각 사용자에게 필요한 작업만 수행할 수 있는 권한을 부여합니다. 예를 들어 AWS IAM을 구성하는 서비스 중 하나인 IAM 정책을 사용하여 특정 작업 혹은 리소스에 대한 접근을 세부적으로 제어하고 관리할 수 있습니다. AWS IAM에서 사용자 혹은 리소스에 권한을 어떻게 할당는지 그림을 통해 살펴봅시다.
➊ A 사용자에게는 EC2 인스턴스에만 접속할 수 있고 다른 작업은 제한하는 EC2 인스턴스 접속 권한만을 부여합니다. ➋ B 사용자는 RDS에 접근할 수 있는 권한을 부여받고, 다른 작업은 할 수 없습니다. ➌ 권한은 사용자뿐 아니라 리소스에게도 부여하여 특정 작업을 허용할 수도 있습니다. 이제부터 이런 AWS IAM을 구성하는 기능을 살펴보겠습니다.
2.2 AWS IAM 살펴보기
AWS IAM을 구성하는 서비스는 크게 4가지로 나눌 수 있습니다.
IAM 사용자(IAM User) : 개별적으로 식별되는 사용자를 의미하며, AWS 리소스에 접근하는 자격증명을 보유하고 있습니다.
IAM 그룹(IAM Group) : IAM 사용자를 그룹으로 묶어서 정리하는 서비스입니다.
IAM 정책(IAM Policy) : 어떤 사용자 혹은 리소스에 대해 어떤 작업이 허용되는지를 정의하는 서비스입니다.
IAM 역할(IAM Role) : IAM 정책을 담고 있으며, AWS 서비스에 권한을 부여하는 데 사용되는 서비스입니다.
이제부터 AWS IAM의 4가지 서비스의 특징과 AWS 내에서 각각 어떤 활용 방식을 가지는지 살펴보겠습니다.
IAM 사용자
IAM 사용자는 특정 역할과 권한을 갖는 개별 사용자입니다. IAM 사용자는 개별적으로 식별되며, 부여받은 권한을 바탕으로 AWS 리소스를 제어할 수 있습니다. 일반적으로 루트 사용자에 의해 생성 및 관리되며 AWS 내에서 세분화된 권한 관리와 보안 강화에 사용되는 서비스입니다.
루트 사용자와 IAM 사용자의 관계
AWS를 이용할 수 있는 사용자는 루트 사용자와 IAM 사용자로 나눌 수 있습니다. 루트 사용자는 모든 사용자의 최상위 계층에 있으며 관리자administrator 권한을 가지고 있기 때문에 AWS의 모든 작업을 수행할 수 있습니다. 그러나 보안 목적을 위해 루트 사용자의 권한을 최소화하고자 할 때가 있습니다. 이런 루트 사용자에게서 최소한의 권한만을 부여받아 특정 리소스에 접근할 수 있는 것이 IAM 사용자입니다. 조직이나 그룹에서 AWS를 이용할 때 보안과 권한 관리에 루트 사용자를 사용하는 것은 권장하지 않습니다. 각 개별 사용자에게 필요한 권한을 부여하는 것이 일반적이기 때문에 IAM 사용자를 생성하고 해당 사용자에게 필요한 최소한의 리소스에 대한 권한을 부여하는 것이 권장됩니다.
IAM 사용자 접속 방법
그렇다면 IAM 사용자는 어떻게 AWS에 접속을 할까요?
기본적으로 AWS CLIcommand line interface 접속 방법을 지원하며, 추가적으로 AWS 관리 콘솔AWS Management Console 접속 방법을 선택할 수 있습니다.
AWS CLI와 AWS 관리 콘솔이란? AWS CLI는 명령 프롬프트(CMD)에서 AWS 리소스를 관리는 통합 도구입니다. AWS 관리 콘솔은 모든 리소스를 시각적으로 관리할 수 있는 웹 인터페이스이며, 0장에서 AWS에 가입할 때 이용했던 웹사이트가 바로AWS 관리 콘솔입니다.
IAM 그룹
여기서 같은 권한을 가진 IAM 사용자가 20명, 30명 늘어난다면 어떻게 관리해야 할까요? AWS에서는 같은 권한을 가진 사용자를 묶어 관리하는 서비스인 IAM 그룹을 제공합니다.
▼ IAM 사용자 관리를 위한 IAM 그룹 예시
➊ 개발 부서는 개발에 필요한 권한만을 부여받습니다. 이 권한은 해당 부서에 속한 모든 사용자에게 상속되며 이를 통해 개발 부서는 개발에 필요한 리소스에 접근하고 업무를 수행할 수 있습니다. ➋ 보안 부서도 마찬가지로 보안에 필요한 권한만을 부여받으며, 해당 부서에 속한 모든 사용자에게 권한이 상속됩니다. IAM 그룹 기능을 활용하면 권한에 따라 그룹으로 분리하여 효율적으로 권한 부여와 관리를 할 수 있도록 도와줍니다.
실제 운영하는 AWS 계정이라면 IAM 그룹을 만들어 IAM 유저를 관리하는 것을 권장합니다.
IAM 정책
IAM 정책을 통해 IAM 사용자 또는 IAM 그룹, 리소스에 부여할 권한을 생성할 수 있습니다. IAM 정책에서는 AWS 관리형 정책과 고객 관리형 정책, 인라인 정책 3가지로 나누어볼 수 있습니다. 각각 어떤 특징을 가지고 있는지 살펴봅시다.
AWS 관리형 정책은 AWS에서 생성 및 관리하는 정책으로 사용자가 직접 정책을 수정할 수 없으며 정해진 권한만 사용할 수 있습니다. 반면에 고객 관리형 정책은 사용자가 생성하고 관리할 수 있는 정책으로 시각적인 형식이나 JSON 형식으로 권한을 정의할 수 있습니다. 리소스에 대한 특정 액세스 권한을 부여하거나 제한하고 싶을 때 고객 관리형 정책을 사용하는 것이 유용합니다. 마지막으로 인라인 정책은 IAM 사용자, IAM 그룹, IAM 역할에 대해 일대일 관계를 유지하는 정책입니다. 즉 하나의 IAM 사용자, IAM 그룹, IAM 역할에 적용되는 기능이며 각 IAM 사용자, IAM 그룹, IAM 역할이 삭제될 때 적용된 인라인 정책도 함께 삭제됩니다.
IAM 역할
IAM 역할은 IAM 정책을 담을 수 있는 그릇 역할을 하며 IAM 정책이 IAM 사용자, IAM 그룹, IAM 역할에만 적용되는 기능이라면 IAM 역할은 AWS 리소스에 적용되는 기능입니다. 이는 다른 AWS 서비스에서 IAM 역할을 가지고 특정 작업을 수행할 수 있도록 권한을 부여하거나 제한할 때 사용됩니다. 일반적으로 복수의 IAM 정책을 생성하고 IAM 역할에 추가한 다음 해당 IAM 역할을 특정한 리소스에 추가합니다. 복수의 IAM 정책은 각 다른 권한을 정의하는 데 사용할 수 있습니다. IAM 역할이 특정한 권한을 가진 하나의 서비스에만 적용되도록 보장하기 위한 제약조건으로 IAM 역할과 AWS의 서비스는 일대일 대응 관계를 가지며, 생성된 리소스는 한 가지 IAM 역할 만을 부여받을 수 있습니다. IAM 역할이 어떻게 적용되는지 다음 그림으로 이해해봅시다.
➊ AWS에서 제공하는 객체 스토리지 서비스인 S3에 액세스할 수 있는 IAM 정책 및 다른 리소스와 상호작용할 수 있는 IAM 정책을 생성하고, IAM 역할에 추가합니다. ➋ IAM 역할을 AWS 클라우드의 가상 서버인 EC2 인스턴스에 추가합니다. ➌ EC2 인스턴스에서 S3로 액세스할 수 있게 됩니다.
IAM 사용자, IAM 역할에는 최대 20개의 정책을 연결할 수 있습니다.
3. AWS IAM 생성하기
이제 AWS 관리 콘솔을 통해 직접 IAM 사용자를 생성하여 로그인을 시도하겠습니다. IAM 사용자를 생성한 다음 사용자 보안을 위한 MFA 설정과 AWS CLI를 이용할 수 있는 환경을 차례대로 구성하겠습니다.
3.1 클라우드포메이션으로 AWS 사용자 생성하기
01 단계 IAM 사용자 생성을 위한 클라우드포메이션의 전체 코드와 해설입니다. IAM 사용자 생성을 위한 클라우드포메이션 전체 코드는 깃허브 리포지터리 [chapter3] → [IAM]폴더에서 참고하세요.
```IAM_User.yml
#IAM 사용자 파라미터
Parameters: # ➊
UserName:
Description: IAM User Name.
Type: String
UserPassword: # ➋
Description: IAM User Password.
Type: String
NoEcho: true # ➌
```
➊ 먼저 IAM 사용자의 이름과 비밀번호를 입력받을 파라미터를 준비합니다. ➋ 비밀번호의 경우 AWS 콘솔 환경에서의 노출을 피하기 위해 클라우드포메이션 코드 내에서 직접 입력하기보다는 파라미터로 입력받는 것이 좋습니다. ➌ NoEcho를 이용해서 콘솔, 명령줄 도구 또는 API에 표시되지 않도록 입력한 파라미터값을 숨길 수 있으므로 비밀번호 등을 입력할 때는 파라미터와 NoEcho를 활용하도록 합니다.
02 단계 IAM_User.yml 파일에 사용자 생성을 위한 Resources를 추가하겠습니다.
```IAM_User.yml
#IAM 사용자 생성
Resources:
IAMUser:
Type: AWS::IAM::User # ➊
Properties: # ➋
UserName: !Ref UserName # 파라미터에서 입력한 유저 이름을 참조
LoginProfile:
Password: !Ref UserPassword # 파라미터에서 입력한 비밀번호를 참조
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess # IAM 사용자에게 관리자 권한을 할당
```
➊ IAM 사용자 생성을 위해 Type에는 AWS::IAM::User를 입력합니다. ➋ Properties에 사용자 이름과 비밀번호, 할당할 권한을 지정합니다. 여기서 진행하는 실습은 개인 환경에서의 테스트이기 때문에 관리자 권한을 선택합니다. 개인 환경이 아니라면 작업을 수행할 수 있는 최소한의 권한만을 선택합니다.
03 단계 AWS CLI 환경을 구축하기 위해 IAM 사용자의 액세스 키와 시크릿 키가 필요합니다. AWS 계정에 접근하기 위한 인증 정보로 액세스 키와 시크릿 키가 있습니다. 액세스 키와 시크릿 키는 AWS CLI를 활용하거나 AWS 리소스에 접근, API를 호출할 때 사용합니다. 먼저 IAM 사용자의 액세스 키를 생성하겠습니다.
```IAM_User.yml
#IAM 사용자의 액세스 키와 시크릿 키 생성
IAMUserAccessKey:
Type: AWS::IAM::AccessKey # ➊
Properties:
UserName: !Ref IAMUser
```
➊ Type에 AWS::iam::AccessKey를 넣어 액세스 키를 생성합니다. 액세스 키를 생성하면 ‘.SecretAccessKey’ 형태로 시크릿 키를 불러올 수 있습니다. 그 외 방법으로 클라우드포메이션에서 Outputs를 활용하여 AWS 콘솔에서도 액세스 키와 시크릿 키를 출력할 수 있습니다. 그러나 액세스 키와 시크릿 키는 IAM 사용자의 로그인과 직결되는 정보이므로 유출된다면 불법적인 액세스와 보안 문제가 발생할 수 있습니다. 이런 이유로 액세스 키와 시크릿 키는 Outputs이 아닌 AWS 시크릿 매니저Secrets Manager에 저장하여 관리합니다.
04 단계 생성한 액세스 키와 시크릿 키는 AWS 시크릿 매니저로 관리하고 보관합니다. AWS 시크릿 매니저는 데이터베이스, 애플리케이션의 보안 인증 및 암호를 관리하는 서비스로 AWS는 시크릿 매니저에 보안 암호를 생성하여 암호를 저장하고 관리할 수 있습니다. 보안 암호는 액세스 키와 시크릿 키를 키Key와 값Value 형태로 저장합니다.
```IAM_User.yml
#AWS 시크릿 매니저에 액세스 키와 시크릿 키 저장
AccessKeySecretManager:
Type: AWS::SecretsManager::Secret # ➊
Properties: # ➋
Name: !Sub ${IAMUser}-credentials
SecretString: !Sub "{\"accessKeyId\":\"${IAMUserAccessKey}\",\"secretKeyId\":\"${IAMUserAccessKey.SecretAccessKey}\"}"
```
➊ AWS 시크릿 매니저의 보안 암호를 생성하기 위해 Type에 AWS::SecretsManager::Secret을 넣습니다. ➋ Properties에는 생성할 보안 암호의 이름과 저장할 암호를 입력합니다. 보안 암호는 키Key와 값Value를 가지며, {“Key”:“Value”} 형태로 저장합니다.
3.2 UI로 불러와 AWS 사용자 리소스 생성하기
다음은 AWS IAM 사용자 생성을 어떻게 하는지 UI를 통해 확인해봅시다.
01 단계 우선 클라우드포메이션 스택을 생성합니다. ➊ 클라우드포메이션 스택 이름을 입력합니다. ➋ 파라미터 부분의 사용자 이름과 비밀번호를 입력합니다. 본인이 설정하고자 하는 IAM 사용자의 이름과 비밀번호를 입력합니다. ➌ IAM 리소스를 생성하려면 해당 항목을 체크할 필요가 있습니다. 해당 항목을 체크하고 클라우드포메이션 스택 생성을 진행합니다.
02 단계 IAM 사용자 생성 및 권한을 확인합니다. ➊ IAM 콘솔 화면에서 [사용자]를 클릭합니다. ➋ 생성된 IAM 사용자를 확인할 수 있습니다. ➌ IAM 사용자를 클릭하고 권한 탭에서 IAM 사용자에게 부여한 권한을 확인할 수 있습니다.
03 단계 IAM 사용자의 액세스 키 및 시크릿 키를 확인합니다. ➊ AWS 시크릿 매니저 콘솔 화면으로 접속하면, IAM 사용자와 같은 이름의 보안 암호가 생성되어 있으며, 이를 확인하면 IAM 사용자의 액세스 키와 시크릿 키를 확인할 수 있습니다.
04 단계 로그인을 위한 계정 ID를 확인합니다.
➊ 오른쪽 상단에 있는 아이디를 클릭합니다. ➋ 계정 ID를 확인하고 복사합니다.
05 단계 AWS에 로그인을 시도합니다. ➊ 로그인 화면에서 [IAM 사용자]를 클릭합니다. ➋ 조금 전 확인한 계정 ID를 입력합니다. ➌ 사용자 이름과 암호를 입력하고 로그인을 시도합니다. ➍ 생성한 IAM 사용자로 로그인에 성공한 것을 확인할 수 있습니다.
이제 IAM 사용자를 생성할 수 있는 기능을 활용할 수 있게 되었습니다. 더 나아가 IAM 사용자의 역할 및 권한 설정을 통해 AWS 리소스에 대한 효율적이고 안전한 접근을 구성하는 방법을 익힐 수 있습니다. 정책 생성과 역할 및 권한 설정에 대해서는 04장 ‘가상 클라우드 서버 파악하기’에서 중점적으로 다루겠습니다.
3.3 AWS CLI 환경 구성하기
이번에는 루트 사용자를 이용해 맥OS와 윈도우에서 AWS CLI 환경을 구성해보는 시간을 갖겠습니다. 현재 맥OS을 이용합니다. ‘맥OS에서의 AWS CLI 환경 구성’을 참고하고 윈도우를 이용합니다. ‘윈도우에서의 CLI 환경 구성’을 참고 바랍니다.
맥OS에서의 AWS CLI 환경 구성
AWS CLI 환경을 구성하기에 앞서 먼저 터미널을 이용해 AWS CLI를 로컬 환경에 설치해야 합니다.
01 단계 AWS CLI 설치 명령어를 맥OS 터미널에 입력해줍니다.
▼AWS CLI 설치 명령어
```
// ➊ AWS CLI 패키지 파일 다운로드
curl “https://awscli.amazonaws.com/AWSCLIV2.pkg” -o “AWSCLIV2.pkg”
// ➋ AWS CLI 설치
sudo installer -pkg AWSCLIV2.pkg -target /
// ➍ AWS CLI 버전 확인
aws --version
```
➊ AWS CLI 설치 파일은 AWS에서 공식적으로 제공하고 있기 때문에 ‘curl’ 명령을 사용하여 패키지 파일을 다운로드합니다. ‘-o’ 옵션은 내려받은 패키지 파일 이름을 지정하는 옵션입니다. ➋ 맥OS의 설치 프로그램을 이용하여 내려받은 AWS CLI 패키지 파일을 설치합니다. ‘-target’은 패키지를 설치할 경로를 의미합니다. ➌ 마지막으로 ‘aws –version’ 명령으로 AWS CLI가 로컬 환경에 설치되었는지 확인합니다.
AWS CLI가 잘 설치된 것을 확인한 다음 AWS 관리 콘솔에서 액세스 키와 시크릿 키를 확인합니다. IAM 사용자를 이용한다면 AWS 시크릿 매니저 콘솔 화면의 보안 암호에 저장되어 있는 액세스 키와 시크릿 키를 이용합니다. 루트 사용자를 이용한다면 액세스 키와 시크릿 키를 AWS 관리 콘솔에서 생성할 필요가 있습니다. 생성 과정은 다음을 참고 바랍니다.
02 단계 AWS 콘솔 화면에서 액세스 키를 생성합니다. ➊ AWS 관리 콘솔에서 [보안 자격증명]을 누르고 [AWS IAM 자격증명] 탭을 클릭하면 액세스 키 만들기 화면이 나옵니다. ➋ 액세스 키와 시크릿 키를 생성하기 위해 [액세스 키 만들기] 버튼을 누릅니다.
03 단계 AWS CLI 사용을 위한 액세스 키를 설정합니다. ➊ ‘사용 사례’에서 CLI를 선택하면 간단하게 액세스 키와 시크릿 키를 생성할 수 있습니다. 생성한 액세스 키와 시크릿 키는 별도로 보관하거나 시크릿 매니저에 저장하여 관리하며 외부에 공개하지 않도록 주의합니다.
04 단계 액세스 키 및 시크릿 키를 생성했다면 이제 구성 및 자격증명 파일을 설정합니다.
▼AWS Configure 설정
```
// ➊ AWS 설정 확인
aws configure list
// ➋ AWS 구성 설정 진행
aws configure
// ➌ 액세스 키, 시크릿 키, 리전, 포맷 형식 입력
AWS Access Key ID [None]: 액세스 키
AWS Secret Access Key [None]: 시크릿 키
Default region name [None]: ap-northeast-2
Default output format [None]: json
// ➍ AWS 구성 설정 확인
aws configure list
```
먼저 터미널에서 ➊ ‘aws configure list’ 명령어를 입력하면 아무것도 설정되어 있지 않은 것을 확인할 수 있습니다. ➋ ‘aws configure’ 명령어를 통해 구성 설정을 진행합니다. ➌ 구성 설정에는 액세스 키, 시크릿 키, 리전(ap-northeast-2는 서울 리전), 포맷 형식을 입력합니다. ➍ ‘aws configure list’를 한 번 더 입력하여 구성이 설정된 것을 확인할 수 있습니다.
▼자격증명 파일 설정
```
// ➊ 자격증명 확인(액세스 키와 시크릿 키)
vi ~/.aws/credentials
// ➋ 자격증명 확인(리전과 포맷 형식)
vi ~/.aws/config
// ➌ AWS 사용자 정보 요청
aws sts get-caller-identity
```
구성 설정이 끝났다면, 맥OS의 ‘~/.aws/’ 경로에 자격증명 파일이 만들어지게 됩니다. 자격증명 파일은 credentials 파일과 config 파일로 나눠지는데 ➊ credentials 파일은 민감한 정보를 저장하는 파일로 액세스 키, 시크릿 키에 대한 정보를 저장합니다. ➋ config 파일은 중요하지 않은 정보 즉 리전, 포맷과 같은 정보를 저장합니다. 각 파일에 대한 정보는 ‘aws configure’ 명령어를 통해 자동으로 설정되었기 때문에 별다른 설정은 불필요합니다. ➌ 마지막으로 ‘aws sts get-caller-identity’ 명령어를 입력해 AWS 사용자 정보를 요청하고, 반환된 정보를 확인합니다. 반환된 정보가 있으면, 맥OS 환경에서의 AWS CLI 환경 구성이 완료됩니다.
윈도우에서의 CLI 환경 구성
이번에는 윈도우에서 AWS CLI 환경을 구성해봅시다.
01 단계 다음 ’설치 URL’을 이용하여 AWS에서 제공하는 AWS CLI 설치 파일을 다운로드합니다. AWS CLI 설치 과정은 별다른 설정 없이 Next를 눌러 진행하면 됩니다.
설치 URL : https://awscli.amazonaws.com/AWSCLIV2.msi
▼AWS CLI 버전 확인
```
aws --version
```
AWS CLI 설치가 끝났다면, powershell에서 CLI 버전을 확인하여 AWS CLI가 설치되었는지 확인합니다.
AWS CLI가 잘 설치된 것을 확인한 다음 AWS 관리 콘솔에서 액세스 키와 시크릿 키를 확인합니다. IAM 사용자를 이용한다면 AWS 시크릿 매니저 콘솔 화면의 보안 암호에 저장되어 있는 액세스 키와 시크릿 키를 이용합니다. 루트 사용자를 이용한다면 액세스 키와 시크릿 키를 AWS 관리 콘솔에서 생성할 필요가 있습니다. 생성 과정은 다음을 참고 바랍니다.
02 단계 AWS 콘솔 화면에서 액세스 키를 생성합니다. ➊ AWS 관리 콘솔에서 [보안 자격증명]을 누르고 [보안 자격증명] 탭을 클릭하면 액세스 키 만들기 화면이 나옵니다. ➋ 액세스 키와 시크릿 키를 생성하기 위해 [액세스 키 만들기] 버튼을 누릅니다.
03 단계 AWS CLI 사용을 위한 액세스 키를 설정합니다. ➊ 사용 사례에는CLI를 선택하면 간단하게 액세스 키와 시크릿 키를 생성할 수 있습니다. 생성한 액세스 키와 시크릿 키는 별도로 보관하거나 시크릿 매니저에 저장하여 관리하며 외부에 공개하지 않도록 주의합니다.
04 단계 액세스 키 및 시크릿 키를 생성했다면 이제 구성 및 자격증명 파일을 설정합니다.
▼AWS Configure 설정
```
// ➊ AWS 설정 확인
aws configure list
// ➋ AWS 구성 설정 진행
aws configure
// ➌ 액세스 키, 시크릿 키, 리전, 포맷 형식 입력
AWS Access Key ID [None]: 액세스 키
AWS Secret Access Key [None]: 시크릿 키
Default region name [None]: ap-northeast-2
Default output format [None]: json
// ➍ AWS 구성 설정 확인
aws configure list
```
액세스 키 및 시크릿 키를 생성했다면 이제 구성 및 자격증명 파일을 설정해야 합니다. ➊ powershell에서 aws configure list’ 명령어를 입력하면 아무것도 설정되어 있지 않은 것을 확인할 수 있습니다. ➋ ’aws configure’ 명령어를 통해 구성 설정을 진행합니다. ➌ 구성 설정에는 액세스 키, 시크릿 키, 리전(ap-northeast-2는 서울 리전), 포맷 형식을 입력합니다. ➍ ‘aws configure list’를 한 번 더 입력하여 구성이 설정된 것을 확인할 수 있습니다.
▼AWS 사용자 정보 요청
```
aws sts get-caller-identity
```
구성 설정이 끝났다면, 윈도우는 ‘C:\Users\Administrator\.aws’ 혹은 ‘C:\Users\사용자 명\.aws’ 경로에 자격증명 파일이 만들어지게 됩니다. 자격증명 파일은 credentials 파일과 config 파일로 나눠지는데 credentials 파일은 민감한 정보를 저장하는 파일로 액세스 키, 시크릿 키에 대한 정보를 저장합니다. config 파일은 중요하지 않은 정보 즉 리전, 포맷과 같은 정보를 저장합니다. 각 파일에 대한 정보는 ‘aws configure’ 명령어를 통해 자동으로 설정되었기 때문에 별다른 설정은 불필요합니다. 마지막으로 파워셸에서 ‘aws sts get-caller-identity’ 명령어를 입력해 AWS 사용자 정보를 요청하고, 반환된 정보를 확인합니다. 반환된 정보가 있으면, 윈도우 환경에서의 AWS CLI 환경 구성이 완료됩니다.
3.3.4 AWS MFA 설정하기
01 단계 AWS에서는 루트 사용자 또는 IAM 사용자를 이용할 때 보안을 고려해 MFA 설정이 필수입니다. 조금 전 실습을 통해 AWS CLI 환경을 구성했으며, 이를 이용하여 MFA를 설정하겠습니다. 아직 AWS CLI 환경 구성이 되지 않았다면 ‘맥OS에서의 AWS CLI 환경 구성’ 혹은 ‘윈도우에서의 CLI 환경 구성’을 참고하여 AWS CLI 환경을 구성을 진행합니다.
▼AWS 사용자 정보 요청
```
aws sts get-caller-identity
```
AWS CLI로 MFA를 설정하기 위해 AWS 사용자를 호출합니다.
02 단계 가상 MFA 디바이스를 생성합니다.
▼가상 MFA 디바이스 생성
```
aws iam create-virtual-mfa-device --virtual-mfa-device-name jaewook-kim-mfa --bootstrap-method QRCodePNG --outfile C:\Users\user\Desktop\jaewook-kim-mfa.png
```
‘aws iam create-virtual-mfa-device’ 명령어로 가상 MFA 디바이스를 생성합니다. ‘--virtual-mfa-device-name’ 옵션을 통해 가상 디바이스의 이름을 지정합니다. ‘--bootstrap-method QRCodePNG’ 옵션으로 가상 디바이스의 QR 코드의 이미지를 다운로드합니다. 마지막으로 ‘--outfile’ 옵션으로 내려받을 QR 코드 이미지의 경로를 지정합니다.
03 단계 가상 MFA 디바이스의 시리얼 넘버를 확인합니다.
▼가상 MFA 디바이스 시리얼 넘버 확인
```
"VirtualMFxDevice": {
"SerialNumber": "arn:aws:iam::xxxxxxxxxxxx:mfa/jaewook-kim-mfa"
}
```
가상 MFA 디바이스를 생성하면 시리얼 넘버가 표시됩니다. 다음 단계에 필요하므로 시리얼 넘버를 복사합니다. 그리고 지정한 경로에 QR 코드 이미지가 다운로드되었으며, 해당 QR 코드를 이용해 MFA 디바이스 설정을 진행합니다.
04 단계 가상 MFA 디바이스의 시리얼 넘버를 확인했다면, IAM 사용자에게 MFA 디바이스를 설정합니다.
▼사용자에게 MFA 디바이스 설정
```
aws iam enable-mfa-device --user-name jaewook-kim --serial-number arn:aws:iam::xxxxxxxxxxxx:mfa/jaewook-kim-mfa --authentication-code1 123456 --authentication-code2 789012
```
‘aws iam enable-mfa-device’ 명령어를 이용하여 사용자에게 MFA 디바이스를 설정합니다. ‘--user-name’ 옵션에 MFA 디바이스를 설정할 사용자 이름을 지정합니다. ‘--serial-number’ 옵션은 조금 전 복사한 시리얼 넘버를 지정하고, code1과 code2는 내려받은 QR 코드 이미지를 이용해, 약 30초마다 갱신되는 MFA 코드를 연속 두 번 입력합니다.
Google Authenticator 앱을 이용하면 더 편리하게 QR 코드 스캔 및 MFA 코드를 관리할 수 있습니다.
05 단계 AWS에 로그인을 시도하여 MFA 코드를 요구하는지 확인합니다. MFA 설정 이후 로그인을 시도하면, MFA 코드를 요구하는 것을 확인할 수 있습니다. MFA 코드는 QR 코드를 스캔한 구글 인증 도구 Google Authenticator와 같은 앱을 통해 일회용 MFA 코드를 입력합니다.
06 단계 로그인한 사용자 정보를 확인하면, MFA가 설정되어 있습니다. 이로써 더 안전하게 AWS 계정을 보호할 수 있습니다. 지금까지 AWS IAM에 대한 기본적인 구성과 실습을 다루어보았습니다.
