Есть ли способ экспортировать профиль AWS CLI в переменные среды?
При работе с некоторыми сторонними инструментами, такими как Terraform, нелегко указать профиль CLI AWS, и мне нравится работать с переменными среды лучше, чем с профилями.
Есть ли способ для меня, чтобы AWS CLI просто экспортировал текущий профиль как переменные среды AWS_ACCESS_KEY_ID
и AWS_SECRET_KEY
в мой сеанс?
Ответы
Ответ 1
Раньше не было никакого пути, , но теперь есть.
Я написал скрипт для этого, aws-env
:
usage: aws-env [-h] [-n] profile
Extract AWS credentials for a given profile as environment variables.
positional arguments:
profile The profile in ~/.aws/credentials to extract credentials
for.
optional arguments:
-h, --help show this help message and exit
-n, --no-export Do not use export on the variables.
Если вы доверяете выводу этой программы, вы можете использовать его в своей сессии оболочки для экспорта переменных данного профиля:
$ aws-env profile-name
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
$ aws-env -n profile-name
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
Чтобы экспортировать переменные в текущие переменные среды, выполните вывод в виде команды (опять же, после того, как вы проверили исходный код;]):
$ echo $AWS_ACCESS_KEY_ID
$ $(aws-env profile-name)
$ echo $AWS_ACCESS_KEY_ID
AKJHC...
Ответ 2
вы можете использовать следующую команду для установки переменной среды
aws configure get default.aws_access_key_id
aws configure get default.aws_secret_access_key
Если у вас есть другой профиль, который вы можете изменить, другой способ записи -
aws configure get aws_access_key_id --profile <new_profile>
aws configure get aws_secret_access_key --profile <new_profile>
так, например, это было бы
export TF_VAR_access_key=`aws configure get default.aws_access_key_id`
Ответ 3
В Терраформе
Terraform фактически напрямую поддерживает профили CLI AWS: просто установите соответствующий атрибут profile
в блоке провайдера aws
.
Нечто подобное должно сработать:
provider "aws" {
profile = "my_profile"
}
Переменные среды
Если вы вместо этого находитесь в ситуации, когда вам нужно использовать переменные окружения, совет Фредерика можно использовать следующим образом:
export AWS_ACCESS_KEY_ID=$(aws configure get my_profile.aws_access_key_id)
export AWS_SECRET_ACCESS_KEY=$(aws configure get my_profile.aws_secret_access_key)
Если вы хотите передать переменные среды в сценарий, используйте:
AWS_ACCESS_KEY_ID=$(aws configure get my_profile.aws_access_key_id) \
AWS_SECRET_ACCESS_KEY=$(aws configure get my_profile.aws_secret_access_key) \
./script.sh
Переменные среды с "предположить роль"
Если вы используете профили для принятия роли, указанной в поле конфигурации role_arn
, то все становится немного сложнее, поскольку учетные данные генерируются на лету (и истекают через некоторое время).
Но это все еще возможно:
read AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN <<< \
$(aws sts assume-role \
--role-arn $(aws configure get my_profile.role_arn) \
--role-session-name my_profile_session --output text | \
awk '/^CREDENTIALS/ { print $2, $4, $5 }')
Ответ 4
Мне нравятся идеи Kay script, которые экспортируют желаемый профиль, поэтому я тоже написал:
PROFILES=$(awk -F"\\\]|\\\[" '/^\[/{print $2}' ~/.aws/credentials)
select PROFILE in $PROFILES; do
export AWS_ACCESS_KEY_ID="$(aws configure get aws_access_key_id --profile $PROFILE)"
export AWS_SECRET_ACCESS_KEY="$(aws configure get aws_secret_access_key --profile $PROFILE)"
export AWS_DEFAULT_REGION="$(aws configure get region --profile $PROFILE)"
break
done
echo AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
echo AWS_SECRET_ACCESS_KEY=$(echo $AWS_SECRET_ACCESS_KEY|tr '[:print:]' '*')
echo AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION
Просто поместите его в файл, а затем source (.) из его оболочки.
Ответ 5
Ни одно из них не допускает предположения о роли в профилях (которые я использую сильно). Я сделал следующий очень короткий script в python3, который использует boto3, чтобы сделать тяжелый подъем предположения о роли и тому подобное. Это может быть полезно.
#!/usr/bin/env python3
# export the AWS environment for a given profile
import boto3
import argparse
parser = argparse.ArgumentParser(prog="exportaws",
description="Extract AWS credentials for a profile as env variables.")
parser.add_argument("profile", help="profile name in ~/.aws/config.")
args = parser.parse_args()
creds = boto3.session.Session(profile_name=args.profile).get_credentials()
print(f'export AWS_ACCESS_KEY={creds.access_key}')
print(f'export AWS_SECRET_ACCESS_KEY={creds.secret_key}')
print(f'export AWS_SESSION_TOKEN={creds.token}')