Как временно переключить профили для AWS CLI?

avatar
James Shapiro
8 апреля 2018 в 09:49
40213
8
59

Обновленный ответ (10.07.2021): Для AWS CLI v1 сделайте следующее:

export AWS_DEFAULT_PROFILE=user2

Для AWS CLI v2 будет работать следующее:

export AWS_PROFILE=user2

Полный вопрос приведен ниже для контекста:


(1.) После успешной настройки второго профиля для интерфейса командной строки AWS я безуспешно пытался установить профиль user2 в своем сеансе bash с помощью следующей команды:

export AWS_PROFILE=user2

... по совету здесь: https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html

(2.) Работает следующая команда:

aws s3 ls --profile user2

Итак, я знаю, что интерфейс командной строки AWS и профиль user2 работают на моем компьютере.

(3.) Однако, когда я впоследствии (то есть после ввода "export AWS_PROFILE=user2") пытаюсь что-то вроде:

aws s3 ls

... Ответ AWS предполагает, что я хочу запросить его как пользователя по умолчанию (НЕ user2)

(4.) Таким образом, единственный способ использовать профиль user2 из командной строки — продолжать добавлять "--profile user2" к каждой отдельной команде, что утомительно.

(5.)

echo $AWS_PROFILE

выходит:

>> user2

, как и ожидалось.

Есть идеи, что здесь происходит? Я уверен, что где-то делаю глупую ошибку.

Источник
krishna_mee2004
8 апреля 2018 в 12:39
1

То, что вы ищете, - это ожидаемое поведение. См. этот документ AWS: docs.aws.amazon.com/cli/latest/userguide/…. Можете ли вы подтвердить, что вы устанавливаете переменные среды в том же сеансе, где вы запускаете команду aws?

Grisha Levit
8 апреля 2018 в 15:23
0

Что вы получаете от AWS_PROFILE=user2 aws s3 ls? , который успешно использует user2?

hjpotter92
8 апреля 2018 в 17:16
0

какую версию aws-cli вы используете?

jarmod
8 апреля 2018 в 17:30
0

Это также поможет вам понять, что делает awscli с учетными данными: aws s3 ls --debug | grep botocore.session

James Shapiro
8 апреля 2018 в 19:52
0

Кришна, я определенно устанавливаю переменную AWS_PROFILE в том же сеансе, в котором я запускаю команду. Веб-сайт, на который вы ссылаетесь, мне не полезен.

James Shapiro
8 апреля 2018 в 19:52
0

Гриша, предложенная тобой команда не успешно использует user2.

James Shapiro
8 апреля 2018 в 19:56
0

jarmod, я выполнил эту команду, и она не прояснила мне природу проблемы.

krishna_mee2004
8 апреля 2018 в 23:13
0

Правильно сказал Гриша. Если вы запустите эту команду, она определенно должна использовать профиль user2.

James Shapiro
9 апреля 2018 в 06:14
0

Кришна. Хорошо, я только что попробовал еще раз, и это не...

Varun Chandak
9 апреля 2018 в 11:41
1

можешь попробовать AWS_DEFAULT_PROFILE=user2?

James Shapiro
10 апреля 2018 в 07:52
0

@kintuparantu Это сработало, спасибо!

Ответы (8)

avatar
James Shapiro
10 апреля 2018 в 07:54
65

Для AWS CLI v1 самое простое решение:

export AWS_DEFAULT_PROFILE=user2

После этого такие команды, как:

aws s3 ls

... обрабатываются из соответствующей учетной записи.

Для AWS CLI v2 будет работать следующее:

export AWS_PROFILE=user2
emilebaizel
21 декабря 2020 в 21:38
1

Согласно комментарию Диего ниже, это имя переменной было переименовано в AWS_PROFILE. Подробнее здесь.

James Shapiro
21 декабря 2020 в 22:25
0

@emilebaizel на самом деле «экспорт AWS_PROFILE=[profile_name]» никогда не работал ни у меня, ни у многих других, отсюда и популярность этого вопроса.

emilebaizel
23 декабря 2020 в 17:18
0

это все еще не работает для вас с последней версией интерфейса командной строки AWS?

James Shapiro
10 июля 2021 в 16:49
0

@emilebaizel «export AWS_PROFILE=user2» работает в AWS CLI v2

avatar
ox.
11 декабря 2021 в 20:26
-1

создайте или отредактируйте этот файл:

% vim ~/.aws/credentials

перечислите столько пар ключей, сколько хотите:

[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

включите --profile user1, чтобы выбрать профиль и делать то, что вам нравится:

aws s3api list-buckets --profile user1
# any aws cli command now using user1 pair of keys

.... ИЛИ ....

установите локальную переменную для выбора пары ключей, которые вы хотите использовать:

% export AWS_PROFILE=user1

затем делайте что хотите:

aws s3api list-buckets  # any aws cli command now using user1 pair of keys

подробнее: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html

James Shapiro
12 декабря 2021 в 00:53
0

Этот вариант указан как неоптимальный в исходном описании проблемы. Это не очень хорошо, потому что включает в себя добавление "--profile [пользователь]" к каждой отдельной команде CLI, которую вы запускаете.

James Shapiro
12 декабря 2021 в 03:36
0

Я бы предложил удалить, в вашем ответе нет ничего, что прямо не указано в ответах выше.

avatar
Mac Ignacio
11 августа 2021 в 07:24
4

Принятый ответ предполагает, что вы используете терминал Linux или Mac. Я добавил команду для обеих ОС.

Windows

set AWS_PROFILE=profile_name

Linux или Mac

export AWS_PROFILE=profile_name

Они установят ваш профиль aws, который вы будете использовать каждый раз, когда выполняете команду aws. Но если вы просто хотите временно переключить профиль для одной команды aws.

aws [command] [sub-command] --profile [profile-name]

DollarAkshay
31 декабря 2021 в 14:52
0

Ответ Windows здесь для cmd. Для powershell это $env:AWS_PROFILE = 'profile_name'

avatar
kapil nagar
26 января 2021 в 12:53
1

Для windows используйте

set AWS_DEFAULT_PROFILE=user2
Pascal Lamers
26 января 2021 в 13:11
0

Привет и добро пожаловать в SO! Пожалуйста, прочтите Как написать хороший ответ. Попробуйте включить то, что ваш ответ делает лучше и/или отличается от уже принятого!

avatar
hestellezg
13 января 2021 в 17:40
0

Вы можете добавить флаг profile

aws s3 ls --profile marketingadmin
avatar
Jonathan Murray
1 декабря 2020 в 15:38
1
user@machine:~/.aws$ aws --version
aws-cli/2.1.2 Python/3.7.3 Linux/5.4.0-53-generic exe/x86_64.linuxmint.20

Я добавляю псевдонимы в свой .bashrc, если у меня много именованных профилей.

например:

alias harry-tuttle='export AWS_PROFILE=harry-tuttle'

Тогда переключение профилей становится одной командой с меньшим количеством ввода.

Чтобы просмотреть все свои профили:

aws configure list-profiles`
avatar
Jimmy MG Lim
11 марта 2019 в 14:43
1

клиент AWS имеет 3 уровня способов чтения переменных

  • переменные среды key_id / key_secret
  • профиль через cred/config (обычно в ~/.aws/cre...)
  • значение, указанное вручную

см.: https://docs.aws.amazon.com/cli/latest/topic/config-vars.html#credentials

один путь будет перезаписан другим. на основе OP может случиться так, что, хотя DEFAULT_PROFILE установлен как userX, для переменных среды AWS_ACCESS_KEY_ID и/или AWS_SECRET_ACCESS_KEY установлено что-то другое.

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

"export AWS_ACCESS_KEY_ID=XXXXXXX;"... and more

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

"export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id --profile XXXX)"... and more

Экспортируйте все ключи/секреты доступа и т. д., а затем проверьте, загружены ли в память правильные учетные данные через

aws configure list

наконец... сделайте сброс переменной до значения "по умолчанию"... как хорошую привычку, чтобы убедиться, что вы делаете то, что вам нужно в качестве роли AWS; особенно при использовании нескольких профилей. надеюсь, это поможет.

avatar
Diego Torres Milano
8 апреля 2018 в 23:23
7

Вы можете увидеть, как это работает

$ export AWS_PROFILE=myprofile
$ aws s3 ls --debug 2>&1 | grep profile
2018-04-08 19:19:17,990 - MainThread - botocore.session - DEBUG - Loading variable profile from environment with value 'myprofile'.

Сомневаюсь, что у вас это работает иначе.

Вы также можете убедиться, что

$ AWS_PROFILE=myprofile aws s3 ls --debug 2>&1 | grep profile

и

$ aws s3 ls --profile myprofile --debug 2>&1 | grep profile

все дают один и тот же результат.

James Shapiro
9 апреля 2018 в 06:12
0

Эти команды НЕ дают мне того же результата. Первые два не производят никакого вывода. Последний выдает следующий вывод: «2018-04-08 23:11:33,683 — MainThread — awscli.clidriver — DEBUG — Аргументы, введенные в CLI: ['s3', 'ls', '--profile', 'myprofile ', '--debug'] 2018-04-08 23:11:33,683 — MainThread — botocore.credentials — DEBUG — Пропуск проверки учетных данных переменной среды, поскольку имя профиля было задано явно.

Diego Torres Milano
9 апреля 2018 в 15:26
0

@JamesShapiro удалите | grep profile из первых команд и посмотрите, что там