2016-11-28 2 views
4

При работе с некоторыми сторонними инструментами, такими как Terraform, нелегко указать профиль AWS CLI, и мне нравится работать с переменными среды лучше, чем профили.Есть ли способ экспортировать профиль CLI AWS в переменные среды?

Есть ли способ для меня, чтобы AWS CLI просто экспортировал текущий профиль как AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_ID переменных среды на мою сессию?

ответ

11

вы можете использовать следующую команду, чтобы установить переменное окружение

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` 
+1

Это должен быть принятый ответ. Официальный CLI FTW – wilco

4

Ранее не было ранее, but there is now.

Я написал сценарий, чтобы сделать именно это, 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... 
+0

Это замечательно, и все, но, увидев, как вы ответили после того, как официальный ответ API был отправлен @Frederic, следует упомянуть, что CLI - это предлагаемый и поддерживаемый метод. – wilco

1

Я люблю идею Кея из сценария, который экспортирует нужный профиль, так что я тоже написал один:

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 

Просто поместите его в файл, а затем источник его из оболочки (.).

0

Ни одно из них не допускает предположения о роли в профилях (которые я использую в большой степени). Я сделал следующий очень короткий скрипт в 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}') 
+0

Я планирую сделать инструмент на этот раз. –

Смежные вопросы