aws 설정파일을 생성하게 되면, 사용자 디렉토리 안에 .aws 라는 디렉토리가 생성이 되고 그 속에 config & credentials 파일이 각각 생성되는 것을 확인할 수 있습니다. 테라폼에서는 해당 설정파일을 사용하여 AWS 에 접근하고 리소스를 배포할 수 있게됩니다.
단점 결국 민감정보를 평문으로 파일에 저장하는 것이기 때문에, 해당 파일이 노출되면 보안사고가 발생할 가능성이 존재
1.3. 인증관리도구 활용 (aws-vault)
세 번째 방법은 인증관리도구를 활용하여 임시 인증정보를 발급받아 Provider 에 인증하는 것입니다.
이 방법을 활용하면 aws credentials 파일 조차 생성할 필요가 없습니다. 오픈소스인 aws-vault 를 활용하여 인증관리도구를 알아보겠습니다.
aws-vault 는 AWS STS 서비스를 활용하여 AWS API 에 접근할 수 있는 임시 토큰을 발급해주는 도구입니다.
aws-vault 를 설치해봅시다.
# Mac User
brew install aws-vault
# Windows User
choco install aws-vault
# version check
aws-vault --version
aws-vault 를 설치했다면 다음과 같이 Profile 을 추가해줍니다. Profile 추가 시 Acees Key 와 Secret Key 가 필요합니다.
해당 Profile Name 은 .aws/config 의 Profile 과 연동됩니다.
aws-vault add kimalarm
이후 명령어를 통해 aws 리소스에 접근할 수 있습니다.
# 실행
aws-vault exec [profile] -- [command]
# 예시
aws-vault exec kimalarm -- aws s3 ls
아래와 같이 명령어가 잘 실행된다면 인증에 성공한 것입니다.
명령어 실행 중 다음과 같은 오류가 발생 시 ~/.aws/config 파일 안에 default region을 입력해줍니다.
aws-vault: error: exec: Failed to get credentials for [profile]: operation error STS: GetSessionToken, failed to resolve service endpoint, an AWS region is required, but was not found
aws-vault 는 OS 의 암호 관리 시스템을 활용하여 인증정보를 관리하며, 짧은 시간 동안 사용할 수 있는 인증정보를 제공합니다.
aws-vault 정보는 OS 가 Mac 이라면 macOS Keychain 에 저장 되고, Windows 라면 Windows Credential Manager 에 저장된다.
aws-vault 가 인증해주는 임시 토큰의 Access Key & Secret Key 는 사용자의 것과 전혀 다른 것임을 확인할 수 있습니다.
테라폼 명령어 또한 aws-vault 와 함께 사용 가능합니다.
1.4. IAM Role 을 부여한 CI 서버 활용
네 번째 방법은 서버에 IAM Role 을 부여한 후, 해당 서버로 테라폼 리소스를 배포하는 것입니다.
이 방법의 장점은 다음과 같습니다.
특정 사용자의 Access Key , Secret Key 를 발급하지 않아도 됨
영구적인 자격증명이 아닌 임시적인 자격증명
만약 로컬 환경에서 직접 테라폼 코드를 배포하지 않고, Jenkins 등의 도구를 활용한 CI/CD 파이프라인을 사용하여 테라폼 코드를 관리한다면 이 방법이 가장 적합할 수 있습니다. 이번에는 IAM Role 이 부여된 EC2 서버가 어떤 식으로 자격증명을 가져오는 지 확인해보겠습니다.
먼저 IAM Role 을 만들어서 EC2 에 부여해줍니다. 이번에는 테스트를 위해 S3FullAccess 권한을 부여한 후 서버에 접속합니다.
AWS 의 Metadata 접속 IP 는 169.254.169.254 입니다. 서버 내부에서 다음과 같은 명령어를 입력하여 IAM Role 이 어떻게 권한을 인증하는 지 확인해봅시다.