Недавно я и некоторые из членов моей команды начали работать над проектами из другой команды, которая принадлежит другой учетной записи 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»