Вопрос или проблема
Я пытаюсь создать кластер 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
.
Рекомендуемые действия
-
Удалите пользователя из доверительных отношений роли: Оставьте только сервис
eks.amazonaws.com
в доверительных отношениях ролиeksServiceRole
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Проверьте применение политики: Убедитесь, что политика с необходимыми разрешениями действительно прикреплена к пользователю
arn:aws:iam::111111111111:user/userName
. -
Рассмотрите более широкие разрешения: Если проблема не устраняется, временно расширьте действия до
Resource: "*"
для тестирования, чтобы определить, не препятствует ли работа каким-то другим аспектам. -
Логи AWS CloudTrail: Используйте AWS CloudTrail для детальной проверки логов доступа и выявления точного источника отказа в доступе.
Следование этим шагам должно помочь устранить вашу проблему с разрешениями в AWS. Убедитесь, что каждое изменение тестируется в безопасной среде, чтобы предотвратить возможные пробелы в безопасности.