Можно ли указать шаблон для доверительных отношений роли AWS?

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

Я придумал эту политику для отношений доверия, которая должна разрешать любую роль, имя которой заканчивается на _my_suffix, но она не работает (доступ запрещен):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNT_NR_A:root"
      },
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:iam::ACCOUNT_NR_A:role/*_my_suffix"
        }
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

С другой стороны, эта политика работает, но она слишком открыта, поскольку позволяет любому пользователю / роли в учетной записи A взять на себя мою роль:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNT_NR_A:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Итак, есть ли способ разрешить только набор ролей без явного указания?


person charli    schedule 22.11.2018    source источник


Ответы (3)


Недавно я столкнулся с таким же вариантом использования. Ни один из ответов не помог мне решить эту проблему.

Чарли, ваше исходное решение действительно, но мне потребовались некоторые настройки, чтобы заставить его работать, а именно: мне нужно было заменить 'ArnLike' на 'stringLike' и переключить 'aws: SourceArn' на использование 'aws: PrincipalArn':

    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<ACCOUNT_ID>:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringLike": {
          "aws:PrincipalArn": "arn:aws:iam::<ACCOUNT_ID>:role/test-role-name-*"
        }
      }
    }
person Mark Mc    schedule 15.05.2019
comment
Это сработало? Тьфу, мне непонятно какой Condition использовать. Спасибо! - person charli; 15.05.2019
comment
Спасибо .. это сэкономило мне день .. любая идея о том, где найти список условий и переменных, которые можно использовать. - person Hitesh Garg; 14.07.2020
comment
Это спаситель! Интересно, есть ли причина не включать это в документацию AWS, но прямо заявить, что это невозможно? - person Max Lobur; 04.08.2020

В политике доверия нельзя использовать подстановочные знаки, кроме "Principal" : { "AWS" : "*" }. Причина в том, что когда вы указываете личность в качестве Принципала, вы должны использовать полный ARN, поскольку IAM преобразуется в уникальный идентификатор, например. AIDAxxx (для пользователя IAM) или AROAxxx (для роли IAM). Ниже приведен документ из :

Если ваш основной элемент в политике доверия ролей содержит ARN, который указывает на конкретного пользователя IAM, то этот ARN преобразуется в уникальный идентификатор участника при сохранении политики. Это помогает снизить риск того, что кто-то повысит свои привилегии, удалив и воссоздав пользователя. Обычно вы не видите этот идентификатор в консоли, потому что при отображении политики доверия также происходит обратное преобразование обратно в ARN пользователя.

person sudo    schedule 23.11.2018

Это похоже на проблему с делегированием доступа к доверенной учетной записи (вашей учетной записи), а не к доверенной учетной записи (_my_suffix - учетная запись AWS). Вот несколько вещей, которые вы можете проверить по следующему URL-адресу.

Ссылка: https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

Спасибо

person Amey Puranik    schedule 22.11.2018
comment
Спасибо за ваш ответ, но я не хочу полагаться ТОЛЬКО на разрешения, установленные в ролях, принадлежащих ACCOUNT_NR_A, поскольку любой пользователь может создать политику, разрешающую ему использование моей роли. Собственно, поэтому я хочу использовать скороговорку. -подобная политика. - person charli; 22.11.2018