Как передать роль команде cli "aws cloudformation deploy" или "sam deploy"? - PullRequest
1 голос
/ 26 апреля 2019

Я создаю стек облачной информации, используя шаблон SAM и интерфейс командной строки. Я успешно сделал это, используя учетную запись, которая получает все необходимые разрешения от политик, непосредственно связанных с ней. Это плохая практика безопасности, чтобы дать этой учетной записи все эти разрешения, поэтому я создал роль с теми же прикрепленными политиками и хочу использовать ее для развертывания. Однако, несмотря на то, что я передаю свою роль через параметр --role-arn, команда все еще ищет учетную запись для разрешений.

Вот команды, которые я пытался использовать:

aws cloudformation deploy --template-file TemplatePackaged.yaml --stack-name TestStack --capabilities CAPABILITY_IAM --region us-east-1 --role-arn arn:aws:iam::666488004797:role/LambdaApplicationCreateRole

или

sam deploy --template-file TemplatePackaged.yaml --stack-name TestStack --capabilities CAPABILITY_IAM --region us-east-1 --role-arn arn:aws:iam::666488004797:role/LambdaApplicationCreateRole

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

Произошла ошибка (AccessDenied) при вызове DescribeStacks операция: пользователь: arn: aws: iam :: 666488004797: пользователь / DummyUser1 не является разрешено выполнять: cloudformation: DescribeStacks на ресурсе: ARN: AWS: CloudFormation: мы-восток-1: 666488004797: стек / Melissa / ** * 1013

Как заставить команду deploy использовать роль, переданную в параметре --role-arn, для получения необходимых разрешений?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

может быть несколько подходов.

  1. Предположим роль и профиль использования для развертывания облачной информации aws

    aws cloudformation deploy --template-file TemplatePackaged.yaml --stack-name TestStack --profile xyz
    
  2. Запустите экземпляр EC2 с профилем экземпляра, у которого есть доступ к облачной информации, вам не нужно явно указывать роль arn или данные профиля

    aws cloudformation deploy --template-file TemplatePackaged.yaml --stack-name TestStack 
    
1 голос
/ 02 мая 2019

После долгих чтений, проб и ошибок я обнаружил, что ответ Маноя правильный, но хитрая часть - это аргумент, который нужно передать как xyz в своем ответе. Вот что мне нужно было для того, чтобы пройти роль:

Мне пришлось настроить роль, которую я хотел передать в файле конфигурации интерфейса командной строки AWS, в качестве профиля. Параметр --profile, о котором упоминал Маной, работает только с профилями, настроенными в этом файле (насколько мне известно). Способ настроить роль в качестве профиля с помощью команды:

aws configure --profile arbitraryName

То, что следует после профиля, это просто метка или переменная, которую вы будете использовать для ссылки на свою роль, когда хотите передать ее, вы можете дать ей любое имя, но в идеале вы должны называть ее так же, как и роль, которую он будет выполнять. Выполнение этой команды предложит вам ввести несколько полей. Насколько я знаю, у ролей нет access_key или secret_access_key, поэтому просто нажмите enter, чтобы пропустить их, а также регион и выходные данные, они вам не нужны для вашей роли. Затем вы установите поля, которые действительно нужны ролям, используя следующие команды:

aws configure set profile.arbitraryName.role_arn roleArn

aws configure set profile.arbitraryName.source_profile cliProfile

roleArn - это ароним роли, которую вы настраиваете в CLI, cliProfile - это пользователь, уже настроенный в CLI, у которого есть права для принятия роли. Как только это будет сделано, всякий раз, когда вы захотите передать сконфигурированную роль в команде, вам просто нужно добавить --profile arbitraryName в качестве последнего параметра вашей команды, и команда будет использовать разрешения для роли, которая была передана.

* Интересно знать, что передача роли таким образом делает неявным aws sts assume-role. Если вы знаете, где находится ваша папка .aws, вы можете зайти в нее и увидеть папку с именем cli, которая содержит файл json с временными учетными данными, которые создаются, когда предполагается роль.

Мне пришлось много читать, чтобы понять это, надеюсь, этот ответ спасет кого-то еще.

...