Имитация основной политики с использованием предполагаемой роли

Мне было интересно, как использовать simulate-principal-policy с помощью AWS CLI для предполагаемой роли.

Чтобы обеспечить некоторый контекст, в рамках запуска моего приложения я хочу убедиться, что приложение имеет необходимые разрешения для доступа ко всем ресурсам AWS, которые ему нужны. Я делаю это, получая идентификатор вызывающего абонента с помощью aws sts get-caller-identity и использую возвращенный идентификатор вызывающего абонента в качестве источника политики arn для запроса simulate-principal-policy.

Когда наше приложение работает на EC2, оно использует предполагаемую роль. Итак, get-caller-identity возвращает предполагаемую роль arn.

Если я попытаюсь выполнить simulate-principal-policy, используя в качестве источника политики arn моего пользователя arn, команда будет работать нормально.

aws iam simulate-principal-policy --action-names "sqs:Receivemessage" --policy-source-arn "arn:aws:sts::123456789021:user/divesh"

Однако попытка выполнить указанную выше команду с использованием предполагаемой роли сообщает об ошибке.

aws iam simulate-principal-policy --action-names "sqs:Receivemessage" --policy-source-arn "arn:aws:sts::123456789021:assumed-role/development/development-session"
An error occurred (InvalidInput) when calling the SimulatePrincipalPolicy operation: Invalid Entity Arn: arn:aws:sts::123456789021:assumed-role/development/development-session does not clearly define entity type and name.

Наше приложение работает в кластере Kubernetes и использует киам для связывания ролей IAM с подами.

В вашем примере у вас есть --policy-source-arn`, установленный на arn предполагаемой роли. (...456789021:assumed-role/dev...) Вы пробовали использовать arn роли?

Daniel Farrell 23.10.2018 07:02

В этом и заключается проблема. Когда мое приложение работает на EC2, get-caller-identity возвращает предполагаемую роль arn.

divesh premdeep 23.10.2018 07:05

Даже когда я использую в команде фактическую роль arn, я получаю implicitDeny с "MissingContextValues": ["aws:username"]

divesh premdeep 23.10.2018 07:07

Возможно, стоит упомянуть, что наше приложение работает внутри кластера Kubernetes и использует kiam для привязки ролей IAM к подам.

divesh premdeep 23.10.2018 07:14

У меня отлично работает. $ aws --profile xxxx iam simulate-principal-policy --policy-source-arn arn:aws:iam::1234567890987:role/admin --action-names "sqs:ReceiveMessage"

Daniel Farrell 23.10.2018 07:15

Отсутствующие значения контекста могут иметь большее отношение к заданному вами действию и разрешению, которое его предоставляет, чем к самому siulate-principal-policy. Как я уже сказал, я мог вызвать туда с ролью arn и получить ожидаемые результаты (в моем случае это разрешено как часть политики доступа администратора)

Daniel Farrell 23.10.2018 07:16

Ах да, я не включил ресурс arns в свой запрос :-) Спасибо за это

divesh premdeep 23.10.2018 07:23

Но исходный вопрос все еще остается в силе, я все еще не могу использовать предполагаемую роль в вызове simulate-principal-policy

divesh premdeep 23.10.2018 09:57

Предполагаемое имя сеанса роли не обязательно уникально для одного сеанса, и я подозревать, который находится в корне ошибки "не ясно ...". Неясно, возможно ли это. (Также не совсем ясно, дает ли он какую-либо значимую ценность, кроме ложного чувства уверенности.)

Michael - sqlbot 23.10.2018 11:20

Я тоже столкнулся с подобной проблемой. Вы в конце концов решили это?

André Caron 09.03.2019 04:18

В конце концов я ушел из компании, в которой работал над этой проблемой, но пока я был там, мы решили использовать альтернативный подход для проверки политик, который не предполагал использования simulate-principal-policy.

divesh premdeep 29.04.2019 07:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
11
1 119
1

Ответы 1

Проблема с вашим запросом заключается в том, что вы используете «Profile ARN» вместо «Role ARN». Чтобы получить роль Арн, вы можете сделать следующее:

  1. Извлеките имя роли из Instance Profile Arn:

arn:aws:sts::123456789021:assumed-role/development/development-session становится development/development-session

  1. Получите профиль экземпляра на основе этого имени:

aws iam get-instance-profile --instance-profile-name Instance Profile Arn

  1. Найдите роль Arn в получившемся документе:
{
   "InstanceProfile":{
      "Roles":[
         {
            "Arn":"arn:aws:iam::992863558783:role/YourRole"
         }
      ]
   }
}
  1. Используйте этот ARN в simulate-Principal-policy

aws iam simulate-principal-policy --action-names "sqs:Receivemessage" --policy-source-arn "arn:aws:iam::992863558783:role/YourRole"

В Python сценарий выглядел бы так:

import boto3

iam= boto3.client('iam')

profileArn = 'arn:aws:sts::123456789021:assumed-role/development/development-session'
iamProfileName = iamInstanceProfileArn.split(':assumed-role/')[1]
profile = iam.get_instance_profile(InstanceProfileName=iamProfileName)
policySourceArns = []

for role in profile['InstanceProfile']['Roles']:
    policySourceArns.append(role['Arn'])

retval = iam.simulate_principal_policy(
    PolicySourceArn = policySourceArns[0],
    ActionNames = ['sqs:Receivemessage']
)

Другие вопросы по теме