Рубрики
Uncategorized

Как вы можете получить доступ к ресурсам AWS с разных учетных записей? Используйте разные профили.

IAM роли и разрешение легко объяснили получить доступ к ресурсам AWS из другой команды / учетной записи. Помечено с AWS, облаком, идентификацияминагенением, дежоптом.

Недавно я и некоторые из членов моей команды начали работать над проектами из другой команды, которая принадлежит другой учетной записи AWS, как наше. Это не первый раз, когда мне нужно получить доступ к ресурсам (Lambdas или S3 ведра не имеет значения) из других команд AWS AWS.

Пользователи или профили

В прошлом, хотя у меня был Пользователь создан Ad Hoc для себя под этой учетной записью команды.

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

Команда создана Роль — TeambCrossaccountAccess — и определил Teamb clothid как Доверенный сущность Отказ Под этой ролью Политика разрешений были добавлены для определения гранулярно, к которым могут получить доступ к команде члены команды B.

Затем под командой b a Политика был создан, чтобы позволить пользователям команды B до Предположим, роль создан командой A

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::TEAM_A_ACCOUNT_ID:role/TeamBCrossAccountAccess"
        }
    ]
}

И эта роль затем присоединилась к некоторым пользователям команды B (не все пользователи команды B должны были работать над проектами и доступа к ресурсам команды A)

Делая это, вы можете переключать профили через консоль UI и, конечно, через CLI.

Поскольку у вас нет нового пользователя для другой учетной записи, Вам не нужны новые учетные данные — Проверьте AWS Документация Если вы хотите понять различия между счетами, пользователями и ролями — и вам не нужно подписывать и войти в систему с другим паролем, и вам нужен новый AccessiD и токены для вашего CLI. Просто выберите Поменяться ролями Из меню консоли вашего интерфейса пользовательского интерфейса, а затем введите CLOTID другой команды и SELCT правильной роли.

CLI Configuration

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

В консоли пользовательской интерфейсии действительно это просто, просто выберите другой профиль в меню (но мы никогда не используем CLI, чтобы построить нашу инфраструктуру, верно?!? Инфраструктура как код кого-нибудь? Несомненно Но внутри терминала нам нужно сказать AWS CLI, чтобы использовать другой профиль, поэтому нам нужно добавить его в нашу конфигурацию.

Внутри вашего ~/.aws/config Добавьте профиль для новой роли (аналогично, поскольку вы будете делать с полной новой учетной записью/пользователем)

[profile TEAM_A]
role_arn = arn:aws:iam::TEAM_A_ACCOUNT_ID:role:role/TeamBCrossAccountAccess
source_profile = default.  <-- THIS POINTS TO THE CURRENT DEFAULT OF YOUR CONFIG which in my case is TeamB//

Затем, чтобы использовать CLI, вы можете просто вызвать любую команду, указав, какой профиль использовать.

aws secretsmanager get-secret-value --secret-id a_secret_from_team_a --profile TEAM_A

Приятно, но не так удобно, когда у вас есть CDK или безвесочный или любой другой куча скрипта оболочки, используя много команд, и вы не хотите редактировать их все, чтобы добавить - Профиль К каждому из них (особенно если вы не работаете над Teama Repo напрямую, вы не хотите добавлять Teama Teama на своих сценариях!)

Поэтому вы можете Экспорт и установить другой профиль по умолчанию для всех следующих вызовов CLI (на вкладке Tine Temxer)

BTW: (поскольку у меня есть некоторые другие переменные, наш трубопровод CI/CD требует для метки и других вещей, я создал метод псевдонима в My .zhrc (Bashrc также будет работать) для быстрого переключения среди двух профилей

set_TeamA() {
export AWS_DEFAULT_PROFILE=TEAM_A
export SOME_OTHER_VARIABLE=some value FOR_TEAM_A
}

set_TeamB{
export AWS_DEFAULT_PROFILE=default
export SOME_OTHER_VARIABLE=some value FOR_TEAM_B
}

Кто я?

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

Я обычно проверяю это через Эта команда :

aws sts get-caller-identity

что вернет что-то вроде этого, если вы используете предполагаемую роль с другой учетной записи:

{
    "Account": "TEAM_A_ACCOUNT_ID",
     "Arn": "arn:aws:sts::TEAM_A_ACCOUNT_ID:assumed-role/TeamBCrossAccountAccess/botocore-session-....."
}

или это Если вы в настоящее время используете основной пользователь/учетную запись

{
    "Account": "TEAM_B_ACCOUNT_ID",
    "Arn": "arn:aws:iam::TEAM_B_ACCOUNT_ID:user/YOUR_SURNAME"
}

Реконструировать

Итак, если у вас есть учетная запись AWS, чтобы управлять ресурсами вашей команды, и Затем вы начинаете работать над новым проектом с ресурсами другой команды, самый простой и более безопасный подход — Получение профиля и предположить роль, которая дает вам доступ к на другие ресурсы аккаунта.

Для устранения неполадок вы всегда можете проверить любой AWS CLI Command Указание профиля, который вы хотите использовать и посмотреть, если у вас есть доступ, то используйте STS Получить идентичность звонящего Чтобы убедиться, что у вас есть правильная настройка на вашем компьютере.

Надеюсь, поможет.

Оригинал: «https://dev.to/dvddpl/how-can-you-access-aws-resources-from-different-accounts-use-different-profiles-1gb9»