
Хранилище для безопасного хранения и доступа к учётным данным AWS в средах разработки
[!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 для генерации временных учётных данных через вызовы API GetSessionToken или AssumeRole. Они истекают через короткий промежуток времени, что снижает риск утечки учётных данных.
Затем 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=%%%
По умолчанию используются переменные окружения, но вы можете включить локальный сервер метаданных экземпляра с помощью флага --server в команде exec.
Рекомендуемая практика — создавать роли для делегирования разрешений. Для безопасности также следует требовать, чтобы пользователи предоставляли одноразовый ключ, сгенерированный устройством многофакторной аутентификации (MFA).
Сначала вам нужно создать пользователей и роли в IAM, а также настроить устройство MFA. Затем вы можете настроить роли IAM для принудительного использования MFA.
Вот пример конфигурации с использованием ролей и 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
| Команда | Учётные данные | Кэшировано | MFA |
|---|---|---|---|
aws-vault exec jonsmith --no-session | Долгосрочные учётные данные | Нет | Нет |
aws-vault exec jonsmith | session-token | session-token | Да |
aws-vault exec foo-readonly | role | Нет | Нет |
aws-vault exec foo-admin | session-token + role | session-token | Да |
aws-vault exec foo-admin --duration=2h | role | role | Да |
aws-vault exec bar-role2 | session-token + role + role | session-token | Да |
aws-vault exec bar-role2 --no-session | role + role | role | Да |