aws-vault로 IAM Role 관리하기 – 테라폼(Terraform)

aws-vault로 IAM Role을 관리 및 리소스를 생성하는 방법에 대해서 정리해 봤습니다.
2022.06.09

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 aws-vault로 IAM Role을 관리 및 리소스를 생성하는 방법에 대해서 정리해 봤습니다.

테라폼(Terraform)으로 리소스 생성시 발생하는 문제

terraform plan
terraform apply

IAM Role 스위치를 이용하는 유저의 경우 다음과 같은 명령을 입력하면

Error: error configuring Terraform AWS Provider: loading configuration: assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.

다음과 같은 에러 메시지를 마주하게 됩니다.

MFA를 지정했을 경우 발생하는 에러로, AWS CLI에서는 6자리의 MFA 코드를 요구하지만, 테라폼(Terraform)에서는 MFA 코드를 요구하지 않기 때문에 다음과 같은 에러가 발생하게 됩니다.

aws-vault를 이용해서 문제 해결

문제는 aws-vault를 이용해서 해결할 수 있습니다.

brew install --cask aws-vault

다음 명령어를 이용해서 aws-vault를 설치합니다.

$aws-vault --version
v6.6.0

설치가 끝난 다음, 다음 명령어를 입력하고 버전이 출력되면 설치 성공입니다.

$ vi ~/.aws/config

[default]
region = ap-northeast-1

[profile jaewook]
region=ap-northeast-1
mfa_serial = arn:aws:iam::xxxxxxx:mfa/xxxxxxx
role_arn = arn:aws:iam::xxxxxxx:role/xxxxxxx
source_profile=default

config 파일을 생성하고, 다음과 같이 자격 증명을 입력하고 저장합니다.

mfa_serial은 IAM 사용자에서 보안 자격 증명 탭을 보면 mfa_serial을 확인할 수 있습니다.

role_arn은 role로 전환 한 다음, 역할에서 확인할 수 있습니다.


$ aws-vault add default (default에는 config에 적은 default 자격 증명을 의미함. 자격 증명의 이름에 따라 default 이름도 변환)

Enter Access Key ID: xxxxxxxxxxxxxxxxx
Enter Secret Access Key: xxxxxxxxxxxxxxxxx
Added credentials to profile "default" in vault

여기서 액세스 키와 비밀키를 입력해야 합니다.

액세스 키와 시크릿 키의 경우 IAM 사용자에서 액세스 키 만들기 버튼을 클릭해서 확인할 수 있습니다.

자세한 내용은 아래 블로그를 참고해 주세요.

이렇게 진행하다 보면 AWSVault에서 생성하는 키체인에 액세스하기 위한 패스워드를 입력하라는 팝업창이 뜨게 됩니다. 비밀번호를 본인이 알아볼 수 있게 입력합니다.


$ aws-vault exec jaewook -- aws s3 ls
$ aws-vault list

Profile                  Credentials              Sessions                   
=======                  ===========              ========                   
default                  default                  -                          
jaewook                  -                        sts.AssumeRole:-22h52m31s  

이제 aws-vault exec jaewook -- aws s3 ls 명령어를 입력하면 mfa 코드를 입력하라는 메시지가 뜹니다. mfa 코드를 입력하면 자연스레 S3 버킷 리스트가 출력되고, aws-vault list를 확인해 보면 다음과 같이 자격 증명들이 등록된 것을 확인할 수 있습니다.

테라폼(Terraform)으로 리소스 생성

이제 aws-vault를 이용해서 리소스를 생성해 보겠습니다.


provider.tf
provider "aws" {
    region = "ap-northeast-1"
}

vpc.tf
resource "aws_vpc" "test-vpc" {
  cidr_block = "10.0.0.0/16"
}

provider.tf, vpc.tf라는 파일을 만들어서 다음 코드를 입력합니다. (저는 Visual Studio Code를 이용했습니다.)


aws-vault exec jaewook -- terraform init
aws-vault exec jaewook -- terraform plan
aws-vault exec jaewook -- terraform apply

다음 명령어를 통해 테라폼을 초기화 하고, vpc 리소스를 생성합니다.


Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Enter a value: yes

aws_vpc.test-vpc: Creating...
aws_vpc.test-vpc: Creation complete after 2s [id=vpc-0b1542aa35c01f234]

문제 없이 생성 된 것 같으니 Management console에서 확인해 보도록 하겠습니다.

Management console에서 확인해 보면 정상적으로 VPC가 생성된 것을 확인할 수 있습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !

참고