Как эффективно настраивать и управлять несколькими профилями AWS CLI

Научитесь эффективно управлять несколькими учетными записями и средами AWS с помощью именованных профилей AWS CLI. Это руководство предоставляет пошаговые инструкции по настройке, переключению и обеспечению безопасности различных наборов учетных данных и настроек AWS. Оптимизируйте свой облачный рабочий процесс, освоив управление профилями для повышения производительности и безопасности.

Как эффективно настроить и управлять несколькими профилями AWS CLI

Профили AWS CLI позволяют разделять учетные записи, роли, регионы и форматы вывода. Если вы управляете средами dev, staging и production с одного ноутбука, профили помогают избежать выполнения команд в неправильной учетной записи AWS.

Цель проста: сделать целевую учетную запись явной, сократить использование долгоживущих учетных данных, где это возможно, и обеспечить быстрые проверки перед выполнением опасных команд.

Настройка файла конфигурации AWS CLI

AWS CLI хранит настройки профилей в двух общих файлах:

  • ~/.aws/credentials для ключей доступа и сессионных учетных данных.
  • ~/.aws/config для региона, формата вывода, настроек ролей и других параметров CLI.

В Windows эти файлы находятся в %USERPROFILE%\.aws\.

Профиль по умолчанию

Когда вы выполняете aws configure без --profile, он записывает настройки для [default]. CLI использует этот профиль, если вы не указали другой и не задали соответствующую переменную окружения.

# Пример профиля по умолчанию в ~/.aws/credentials
[default]
aws_access_key_id = YOUR_DEFAULT_ACCESS_KEY
aws_secret_access_key = YOUR_DEFAULT_SECRET_KEY
# Пример профиля по умолчанию в ~/.aws/config
[default]
region = us-east-1
output = json

Создание именованных профилей

Вы можете создавать именованные профили с помощью aws configure --profile:

aws configure --profile dev
aws configure --profile prod

Вы также можете редактировать файлы напрямую. Используйте простые имена профилей в ~/.aws/credentials:

~/.aws/credentials:

[default]
aws_access_key_id = YOUR_DEFAULT_ACCESS_KEY
aws_secret_access_key = YOUR_DEFAULT_SECRET_KEY

[prod]
aws_access_key_id = YOUR_PROD_ACCESS_KEY
aws_secret_access_key = YOUR_PROD_SECRET_KEY

[dev]
aws_access_key_id = YOUR_DEV_ACCESS_KEY
aws_secret_access_key = YOUR_DEV_SECRET_KEY

В ~/.aws/config именованные профили используют префикс profile :

~/.aws/config:

[default]
region = us-east-1
output = json

[profile prod]
region = us-west-2
output = text

[profile dev]
region = eu-central-1
output = json

Важные детали:

  • При определении профилей в ~/.aws/config необходимо добавлять префикс profile к имени профиля (например, [profile prod]). Это отличается от ~/.aws/credentials, где используется только имя профиля (например, [prod]).
  • Профиль [default] не действует автоматически как родительский для именованных профилей. Если prod нужен регион, укажите region в разделе [profile prod] или задайте его другим способом.

Переключение между профилями

После настройки именованных профилей вы можете использовать их, указывая опцию --profile в командах AWS CLI.

Пример: Чтобы вывести список корзин S3 в вашей рабочей учетной записи:

aws s3 ls --profile prod

Пример: Чтобы описать экземпляры EC2 в вашей учетной записи разработки:

aws ec2 describe-instances --profile dev

Перед выполнением опасной команды проверьте, кто вы:

aws sts get-caller-identity --profile prod

Это вернет идентификатор учетной записи и ARN для учетных данных, которые использует CLI.

Установка профиля по умолчанию для окружения

Постоянно вводить --profile может быть утомительно. Вы можете установить AWS_PROFILE для текущей сессии оболочки.

Linux/macOS:

export AWS_PROFILE=prod

# Теперь команды будут использовать профиль 'prod' по умолчанию
aws s3 ls
aws ec2 describe-instances

Чтобы сбросить:

unset AWS_PROFILE

Командная строка Windows:

set AWS_PROFILE=prod

# Теперь команды будут использовать профиль 'prod' по умолчанию
aws s3 ls

Чтобы сбросить:

set AWS_PROFILE=

Windows PowerShell:

$env:AWS_PROFILE = "prod"

# Теперь команды будут использовать профиль 'prod' по умолчанию
aws s3 ls

Чтобы сбросить:

Remove-Item Env:\AWS_PROFILE

Параметры командной строки имеют более высокий приоритет, чем переменные окружения. Если установлено AWS_PROFILE=dev, но вы выполняете aws s3 ls --profile prod, команда использует prod.

Управление несколькими учетными записями AWS с помощью профилей

Профили полезны для:

  • Разработка vs. Продакшн: Разделение сред разработки и продакшн для безопасности.
  • Разные команды/проекты: Изоляция ресурсов и разрешений для разных команд или проектов.
  • Межаккаунтный доступ: Если вы администратор или разработчик, которому нужно управлять ресурсами в нескольких учетных записях.

Лучшая практика: Использование ролей IAM

Избегайте хранения долгоживущих ключей доступа для каждой учетной записи. Распространенный шаблон — хранить один исходный профиль или профиль SSO, а затем принимать роли в целевые учетные записи.

Для принятия роли настройте профиль следующим образом:

# ~/.aws/config

[profile dev-role]
role_arn = arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME
source_profile = default
region = us-east-1
output = json

Когда вы выполняете команду с --profile dev-role, CLI использует профиль default для вызова AWS STS, принимает роль и использует временные учетные данные для команды.

Если ваша организация использует IAM Identity Center, ваш профиль может использовать настройки SSO вместо ключей доступа:

[profile sandbox]
sso_start_url = https://example.awsapps.com/start
sso_region = us-east-1
sso_account_id = 123456789012
sso_role_name = DeveloperAccess
region = us-east-1
output = json

Затем аутентифицируйтесь с помощью:

aws sso login --profile sandbox

Расширенные параметры конфигурации

Помимо учетных данных и региона, профили могут указывать другие настройки AWS CLI:

  • output: json, text, table
  • region: например, us-east-1
  • s3.max_concurrent_requests: Количество параллельных запросов для операций S3.
  • s3.max_queue_size: Размер очереди для многокомпонентных загрузок S3.
  • cli_binary_format: Как интерпретируются бинарные параметры в AWS CLI v2.

Пример: Настройка параметров S3 для конкретного профиля

Используйте aws configure set, чтобы избежать ошибок отступов:

aws configure set s3.max_concurrent_requests 20 --profile s3-optimized
aws configure set s3.max_queue_size 10000 --profile s3-optimized

Это записывает настройки S3 в раздел профиля в ~/.aws/config:

# ~/.aws/config

[profile s3-optimized]
region = us-east-1
output = json
s3 =
    max_concurrent_requests = 20
    max_queue_size = 10000

Советы и лучшие практики

  • Используйте описательные имена профилей: Делайте имена профилей понятными и указывающими на учетную запись или среду, которую они представляют (например, prod-admin, dev-web, sandbox-research).
  • Защищайте свои учетные данные: Никогда не сохраняйте файл ~/.aws/credentials в системе контроля версий. По возможности используйте роли IAM для межаккаунтного доступа, чтобы избежать хранения долгоживущих ключей доступа.
  • Регулярно проверяйте ключи доступа: Если вы вынуждены использовать ключи доступа, периодически меняйте их и отключайте старые.
  • Используйте переменные окружения: Используйте AWS_PROFILE для временного переключения или в CI/CD конвейерах, где нужно нацеливаться на конкретные учетные записи.
  • Следите за переменными окружения учетных данных: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY и AWS_SESSION_TOKEN могут переопределять учетные данные из профилей. Очистите их, если CLI, кажется, использует неправильную идентификацию.
  • Называйте профили по радиусу поражения: Имена вроде prod-readonly, prod-admin и sandbox-dev безопаснее, чем расплывчатые имена вроде main или test.

Практический вывод

Используйте профили для каждой учетной записи и роли, с которыми вы часто работаете, и проверяйте aws sts get-caller-identity перед изменением ресурсов продакшн. Отдавайте предпочтение профилям на основе SSO или ролей, а не долгоживущим ключам доступа, и помните о переменных окружения, когда команда, кажется, нацелена на неправильную учетную запись.