Пользователь не имеет полномочий для выполнения: iam:PassRole на ресурсе

Вопрос или проблема

Я пытаюсь создать кластер EKS через AWS CLI с помощью следующих команд:

aws eks create-cluster --name ekCsluster --role-arn arn:aws:iam::111111111111:role/eksServiceRole --resources-vpc-config subnetIds=subnet-1,subnet-2,subnet-3,subnet-4,subnet-5,subnet-6,securityGroupIds=sg-1

И получаю следующую ошибку:

An error occurred (AccessDeniedException) when calling the CreateCluster operation: User: arn:aws:iam::111111111111:user/userName is not authorized to perform: iam:PassRole on resource: arn:aws:iam::111111111111:role/eksServiceRole

Однако я создал политику разрешений, AssumeEksServiceRole и прикрепил её непосредственно к пользователю, arn:aws:iam::111111111111:user/userName:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::111111111111:role/eksServiceRole"
        }
    ]
}

В роли eksServiceRole я определил доверительные отношения следующим образом:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:user/userName"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Чего мне не хватает? Как я могу устранить эту ошибку? Спасибо за любую помощь.

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

В вашем случае, вы можете просто использовать:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::111111111111:role/eksServiceRole"
        }
    ]
}

Я использую это:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CustomEditor",
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": "*"
        }
    ]
}

Ваша запись в роли eksServiceRole не нужна.

Ответ или решение

Конечно, давайте рассмотрим проблему, с которой вы столкнулись, при попытке создать кластер Amazon EKS через AWS CLI. Ошибка "User is not authorized to perform: iam:PassRole on resource" часто возникает из-за неправильной настройки разрешений в AWS Identity and Access Management (IAM).

Проблемное заявление

Вы получаете сообщение об ошибке:

An error occurred (AccessDeniedException) when calling the CreateCluster operation: User: arn:aws:iam::111111111111:user/userName is not authorized to perform: iam:PassRole on resource: arn:aws:iam::111111111111:role/eksServiceRole

Это указывает на то, что у пользователя недостаточно прав для выполнения операции iam:PassRole на указанном ресурсе.

Анализ проблемы

1. Разрешения IAM

Вы правильно создали политику, которая позволяет действия iam:GetRole и iam:PassRole для ресурса arn:aws:iam::111111111111:role/eksServiceRole.

Политика:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::111111111111:role/eksServiceRole"
        }
    ]
}

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

2. Доверительные отношения

В доверительных отношениях вашей роли eksServiceRole вы добавили пользователя:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:user/userName"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Здесь добавление пользователя в доверительные отношения, скорее всего, излишне и может быть причиной конфликтов. EKS требует, чтобы доверительные отношения были настроены только для eks.amazonaws.com.

Рекомендуемые действия

  1. Удалите пользователя из доверительных отношений роли: Оставьте только сервис eks.amazonaws.com в доверительных отношениях роли eksServiceRole.

    {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "eks.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
    }
  2. Проверьте применение политики: Убедитесь, что политика с необходимыми разрешениями действительно прикреплена к пользователю arn:aws:iam::111111111111:user/userName.

  3. Рассмотрите более широкие разрешения: Если проблема не устраняется, временно расширьте действия до Resource: "*" для тестирования, чтобы определить, не препятствует ли работа каким-то другим аспектам.

  4. Логи AWS CloudTrail: Используйте AWS CloudTrail для детальной проверки логов доступа и выявления точного источника отказа в доступе.

Следование этим шагам должно помочь устранить вашу проблему с разрешениями в AWS. Убедитесь, что каждое изменение тестируется в безопасной среде, чтобы предотвратить возможные пробелы в безопасности.

Оцените материал
Добавить комментарий

Капча загружается...