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

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

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

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

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

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 и использует kiam для связывания ролей IAM с модулями.


person divesh premdeep    schedule 23.10.2018    source источник
comment
В вашем примере у вас есть параметр --policy-source-arn`, равный арну предполагаемой роли. (...456789021:assumed-role/dev...) Вы пробовали использовать арн роли?   -  person Daniel Farrell    schedule 23.10.2018
comment
Это именно то, в чем проблема. Когда мое приложение работает на EC2, get-caller-identity возвращает предполагаемую роль arn.   -  person divesh premdeep    schedule 23.10.2018
comment
Даже когда я использую фактический номер роли в команде, я получаю implicitDeny с "MissingContextValues": ["aws:username"]   -  person divesh premdeep    schedule 23.10.2018
comment
Возможно, стоит упомянуть, что наше приложение работает внутри кластера Kubernetes и использует kiam для связывания ролей IAM с модулями.   -  person divesh premdeep    schedule 23.10.2018
comment
Отлично работает для меня. $ aws --profile xxxx iam simulate-principal-policy --policy-source-arn arn:aws:iam::1234567890987:role/admin --action-names "sqs:ReceiveMessage"   -  person Daniel Farrell    schedule 23.10.2018
comment
Отсутствующие значения контекста могут иметь больше отношения к указываемому вами действию и разрешению, которое его предоставляет, чем к самому siulate-principal-policy. Как я уже сказал, я смог вызвать taht с ролью arn и получить ожидаемые результаты (в моем случае это разрешено как часть политики доступа администратора).   -  person Daniel Farrell    schedule 23.10.2018
comment
Ах да, я не включил арнс ресурсов в свой запрос :-) Спасибо за это   -  person divesh premdeep    schedule 23.10.2018
comment
Но исходный вопрос остается в силе, я все еще не могу использовать предполагаемую роль в вызове simulate-principal-policy   -  person divesh premdeep    schedule 23.10.2018
comment
Имя сеанса предполагаемой роли не обязательно уникально для одного сеанса, и я подозреваю, что оно лежит в основе ошибки не ясно.... Не ясно, возможно ли это. (Также не совсем ясно, обеспечивает ли он какую-либо значимую ценность, кроме ложного чувства уверенности.)   -  person Michael - sqlbot    schedule 23.10.2018
comment
Я также столкнулся с подобной проблемой. Вы в конце концов решили это?   -  person André Caron    schedule 09.03.2019
comment
В конце концов я ушел из компании, где занимался этой проблемой, но пока я был там, мы решили использовать альтернативный подход для проверки политик, не связанный с использованием simulate-principal-policy   -  person divesh premdeep    schedule 29.04.2019


Ответы (1)


Проблема с вашим запросом заключается в том, что вы используете ARN профиля вместо 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 в политике имитации принципала.

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']
)
person Disciple153    schedule 29.04.2021