
개발 환경에서 AWS 자격 증명을 안전하게 저장하고 접근하기 위한 vault
[!WARNING] 이 프로젝트는 중단되었으며 더 이상 업데이트를 받지 않습니다. 계속해서 업데이트를 받거나 기여하고 싶으시다면, 다음의 활성 포크를 확인해 주세요: https://github.com/ByteNess/aws-vault
AWS Vault는 개발 환경에서 AWS 자격 증명을 안전하게 저장하고 접근하기 위한 도구입니다.
AWS Vault는 IAM 자격 증명을 운영 체제의 보안 키스토어에 저장한 다음, 그로부터 임시 자격 증명을 생성하여 셸과 애플리케이션에 노출합니다. 이는 AWS CLI 도구를 보완하도록 설계되었으며, ~/.aws/config의 프로필과 구성을 인식합니다.
자세한 내용은 발표 블로그 글을 확인해 주세요.
AWS Vault를 설치할 수 있는 방법:
brew install aws-vaultport install aws-vaultchoco install aws-vaultscoop install aws-vaultbrew install aws-vaultpacman -S aws-vaultemerge --ask app-admin/aws-vault (먼저 Guru 활성화)pkg install aws-vaultzypper install aws-vaultnix-env -i aws-vaultasdf plugin-add aws-vault https://github.com/karancode/asdf-aws-vault.git && asdf install aws-vault <version>구성, 사용법, 팁과 요령은 USAGE.md 파일에서 확인할 수 있습니다.
지원되는 보관 백엔드는 다음과 같습니다:
--backend 플래그 또는 AWS_VAULT_BACKEND 환경 변수를 사용하여 지정하세요.
# Store AWS credentials for the "jonsmith" profile
$ aws-vault add jonsmith
Enter Access Key Id: ABDCDEFDASDASF
Enter Secret Key: %%%
# Execute a command (using temporary credentials)
$ aws-vault exec jonsmith -- aws s3 ls
bucket_1
bucket_2
# open a browser window and login to the AWS Console
$ aws-vault login jonsmith
# List credentials
$ aws-vault list
Profile Credentials Sessions
======= =========== ========
jonsmith jonsmith -
# Start a subshell with temporary credentials
$ aws-vault exec jonsmith
Starting subshell /bin/zsh, use `exit` to exit the subshell
$ aws s3 ls
bucket_1
bucket_2
aws-vault는 Amazon의 STS 서비스를 사용하여 GetSessionToken 또는 AssumeRole API 호출을 통해 임시 자격 증명을 생성합니다. 이들은 짧은 기간 내에 만료되므로 자격 증명이 유출될 위험이 줄어듭니다.
그런 다음 AWS Vault는 다음 두 가지 방법 중 하나로 임시 자격 증명을 하위 프로세스에 노출합니다
$ aws-vault exec jonsmith -- env | grep AWS
AWS_VAULT=jonsmith
AWS_DEFAULT_REGION=us-east-1
AWS_REGION=us-east-1
AWS_ACCESS_KEY_ID=%%%
AWS_SECRET_ACCESS_KEY=%%%
AWS_SESSION_TOKEN=%%%
AWS_CREDENTIAL_EXPIRATION=2020-04-16T11:16:27Z
$ aws-vault exec --server jonsmith -- env | grep AWS
AWS_VAULT=jonsmith
AWS_DEFAULT_REGION=us-east-1
AWS_REGION=us-east-1
AWS_CONTAINER_CREDENTIALS_FULL_URI=%%%
AWS_CONTAINER_AUTHORIZATION_TOKEN=%%%
기본값은 환경 변수를 사용하는 것이지만, exec 명령에 --server 플래그를 사용하여 로컬 인스턴스 메타데이터 서버를 선택적으로 사용할 수 있습니다.
모범 사례는 권한을 위임하기 위해 역할을 생성하는 것입니다. 보안을 위해 사용자가 다중 인증(MFA) 장치에서 생성된 일회용 키를 제공하도록 요구해야 합니다.
먼저 IAM에서 사용자와 역할을 생성하고 MFA 장치를 설정해야 합니다. 그런 다음 MFA를 강제하도록 IAM 역할을 설정할 수 있습니다.
다음은 역할과 MFA를 사용하는 구성 예제입니다:
[default]
region = us-east-1
[profile jonsmith]
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile foo-readonly]
source_profile = jonsmith
role_arn = arn:aws:iam::22222222222:role/ReadOnly
[profile foo-admin]
source_profile = jonsmith
role_arn = arn:aws:iam::22222222222:role/Administrator
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile bar-role1]
source_profile = jonsmith
role_arn = arn:aws:iam::333333333333:role/Role1
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile bar-role2]
source_profile = bar-role1
role_arn = arn:aws:iam::333333333333:role/Role2
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
aws-vault에서 기대할 수 있는 동작은 다음과 같습니다
| Command | Credentials | Cached | MFA |
|---|---|---|---|
aws-vault exec jonsmith --no-session | Long-term credentials | No | No |
aws-vault exec jonsmith | session-token | session-token | Yes |
aws-vault exec foo-readonly | role | No | No |
aws-vault exec foo-admin | session-token + role | session-token | Yes |
aws-vault exec foo-admin --duration=2h | role | role | Yes |
aws-vault exec bar-role2 | session-token + role + role | session-token | Yes |
aws-vault exec bar-role2 --no-session | role + role | role | Yes |
macOS 릴리스 빌드는 Keychain에서 추가 프롬프트를 피하기 위해 코드 서명되어 있습니다. 다음으로 이를 확인할 수 있습니다:
$ codesign --verify --verbose $(which aws-vault)
aws-vault 바이너리를 직접 개발하거나 컴파일하는 경우, Keychain Access > Certificate Assistant > Create Certificate -> Certificate Type: Code Signing에 접근하여 자체 서명 인증서를 생성할 수 있습니다. 그런 다음 다음으로 바이너리에 서명할 수 있습니다:
$ go build .
$ codesign --sign <Name of certificate created above> ./aws-vault