Как назначить политику adhoc-пользователю?

Фон:

С ролью перекрестной учетной записи someaccountrole у меня есть доступ к учетной записи aws xyz.


Случай 1

Чтобы создать стек в учетной записи xyz, мы загружаем файл Cloudformation через консоль.

При создании стека на вкладке Events мы видим самое первое событие, как показано ниже:

введите здесь описание изображения


Случай 2

Создаем экземпляр EC2 в xyz аккаунте.

Использование sam deploy, где sam deploy - это оболочка aws cloudformation deploy, мы запускаем следующую команду из EC2 для создания стека:

aws cloudformation deploy --template-file cfntemplate.yml --stack-name somestack-test --region us-east-1

Во время создания стека мы видим создание аналогичного события (как показано ниже):

введите здесь описание изображения


В случае 2 пользователь: arn:aws:sts::${AccountId}:assumed-role/Autodeploy/i-0000000cc4, где мы создали роль Autodeploy и назначили ее EC2. Этот пользователь исчезает после завершения создания стека.


Но в случае 2 пользователю (i-0000000cc4) требуется разрешение на выполнение следующих операций, в отличие от случая 1:

     {
            "Action": [
                "cloudformation:CreateStack",
                "cloudformation:CreateChangeSet",
                "cloudformation:CreateUploadBucket",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:DeleteStack",
                "cloudformation:Describe*",
                "cloudformation:UpdateStack"
            ],
            "Resource": [
                "arn:aws:cloudformation:us-east-1:${AccountId}:stack/somestack*”
            ],
            "Effect": "Allow"
        }

в противном случае вкладка Events дает ошибку ниже в случае 2:

User: arn:aws:sts::${AccountId}:assumed-role/Autodeploy/i-0000000cc4 
is not authorized to perform: cloudformation:CreateChangeSet on resource:
arn:aws:cloudformation:us-east-1:${AccountId}:stack/somestack-test

1) В случае 1 разрешения задаются как someaccountrole для создания стека. но в случае 2, почему для создания стека с помощью интерфейса командной строки AWS требуется разрешение на создание стека?

2) Как назначить встроенную политику (недолговечность) такому временному ресурсу сеанса (i-0000000cc4) вместо EC2 ??


person overexchange    schedule 04.08.2019    source источник
comment
Я не могу найти что-либо о роли Autodeploy в Интернете. Есть у кого-нибудь идеи, где это создается?   -  person Martin Löper    schedule 04.08.2019


Ответы (1)


1) В случае 1 разрешения задаются как someaccountrole для создания стека. но в случае 2, почему для создания стека с помощью интерфейса командной строки AWS требуется разрешение на создание стека?

Стек в случае 1 создается ролью, указанной вами с помощью параметра стека Permissions, см. [1]. Эта роль службы AWS Identity and Access Management (IAM) обычно имеет необходимые cloudformation:... разрешения, указанные вами выше.

2) Как назначить встроенную политику (недолговечность) такому временному ресурсу сеанса (i-0000000cc4) вместо EC2 ??

Назначение политики профилю экземпляра EC2 правильно!

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

Для получения дополнительной информации о службе метаданных экземпляра см. [2] [3]. Неофициальный, но подробный пост в блоге, который хорошо объясняет концепции, см. В [4].

использованная литература

[1] https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html
[2] https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-metadata.html
[3] https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#instance-metadata-security-credentials
[4] https://blog.gruntwork.io/authenticating-to-aws-with-instance-metadata-b6d812a86b40

person Martin Löper    schedule 04.08.2019
comment
К вашему сведению: политика для профиля экземпляра EC2 верна! Я блокирую этот EC2, чтобы просто запустить эту конкретную задачу (_1 _). Вместо этого я думаю применить политику к пользователю. - person overexchange; 04.08.2019
comment
Есть ли другой подход к запуску команды sam deploy? кроме запуска из EC2 .... для распределения ресурсов из шаблона SAM. - person overexchange; 04.08.2019
comment
comment
Я не понимаю, что вам нужно от экземпляра EC2, чего вы не можете получить с локального компьютера. Не могли бы вы подробнее рассказать об этом? - person Martin Löper; 04.08.2019
comment
Мне нужны права администратора, как указано в указанной вами ссылке: Шаг 2. Создайте пользователя IAM с правами администратора. Это непрактично. Для работы с учетной записью необходимо соблюдать некоторые правила политики. Шаблоны SAM написаны разработчиками NodeJS, Java, Python, а не мной. Мы не можем просто так дать им права администратора. Мы извлекаем созданный ими файл шаблона, а затем запускаем в EC2 ... - person overexchange; 04.08.2019
comment
На самом деле в настоящее время это открытый вопрос для внедрения AWS SAM: github.com/awslabs/ aws-sam-cli / issues / 420. Можно указать минимальное разрешение для вызова sam deploy, но никто точно не знает, какие разрешения необходимы, потому что это плохо документировано. Однако я не вижу, как вы могли бы дополнительно повысить безопасность в сценарии EC2 ... Вы могли бы просто сделать еще один шаг: удалить профиль экземпляра из экземпляра EC2 после выполнения команды на экземпляре EC2. Это фактически отнимет у экземпляра разрешения для будущих вызовов. - person Martin Löper; 04.08.2019
comment
Экземпляр EC2 является частью конвейера Jenkins. Команда sam deploy работает круглосуточно для нескольких приложений. На ваш вопрос ... какие разрешения требуются? Я знаю список всех необходимых разрешений, потому что мы отладили эту проблему. После отладки этот список разрешений помещается в политику и помещается как часть Autodeploy роли - person overexchange; 04.08.2019
comment
Если вы знаете точные разрешения, вы можете создать пользователя с этими разрешениями и пройти аутентификацию на вашем локальном компьютере в качестве этого пользователя и использовать cli. Но, как вы писали, развертывание sam выполняется как часть конвейера, что невозможно. Другой подход, который вы могли бы использовать для ограничения времени жизни ваших учетных данных EC2, - это передать учетные данные экземпляру перед выполнением команды sam deploy. Вы можете использовать токен get-session (docs.aws.amazon.com/cli/latest/reference/sts/), чтобы получить временные учетные данные. Вы можете передать их экземпляру E2. - person Martin Löper; 04.08.2019
comment
Не могли бы вы подробнее рассказать о создании пользователя? Дайте мне посмотреть, смогу ли я вписать этот подход в конвейер ... - person overexchange; 04.08.2019
comment
Я имею в виду создание стандартного пользователя IAM: docs.aws.amazon.com/ IAM / latest / UserGuide / id_users_create.html ИЛИ с использованием роли вашего экземпляра Jenkins (если это экземпляр EC2). - person Martin Löper; 04.08.2019
comment
Единственное, что вам нужно сделать, это аутентифицировать свой интерфейс командной строки. Вы можете сделать это, установив переменные среды, получая учетные данные с помощью внешнего процесса или файла учетных данных cli (см. docs.aws.amazon.com/cli/latest/userguide/)! На той же странице также упоминается, как получить ключи доступа и секретный ключ доступа для пользователя IAM в разделе Создание ключей доступа для пользователя IAM. Теперь суть в следующем: вы можете снабдить свой сервер Jenkins этими долгоживущими кредитами и использовать их для получения краткосрочных кредитов и передачи их экземпляру EC2. - person Martin Löper; 04.08.2019