web-dev-qa-db-ja.com

AWS EKS「実行する権限がありません:iam:CreateServiceLinkedRole」

私は、特定のポリシーでサービスロールを作成するように指示するEKSクラスターを起動するためのドキュメントに従いました。

https://docs.aws.Amazon.com/eks/latest/userguide/eks-ug.pdf

To create your Amazon EKS service role
1. Open the IAM console at https://console.aws.Amazon.com/iam/.
2. Choose Roles, then Create role.
3. Choose EKS from the list of services, then Allows Amazon EKS to manage your clusters on your behalf for your use case, then Next: Permissions.
4. Choose Next: Review.
5. For Role name, enter a unique name for your role, such as eksServiceRole, then choose Create role.

基本的なHello Worldアプリを作成すると、AccessDeniedエラーがスローされます。

Error creating load balancer (will retry): failed to ensure load balancer for service default/nginx:
AccessDenied: User: arn:aws:sts::*************:assumed-role/eks-service-role/************* is not authorized to perform: iam:CreateServiceLinkedRole on resource: arn:aws:iam::*************:role/aws-service-role/elasticloadbalancing.amazonaws.com/AWSServiceRoleForElasticLoadBalancing

追加された2つのポリシー(AmazonEKSClusterPolicy、AmazonEKSServicePolicy)には、iam:CreateServiceLinkedRoleアクションが許可されていません。ガイドで定義されているポリシーの外にこれを追加することになっていますか?それとも、EKSポリシーに含める必要があるのでしょうか?

EKSユーザーガイドでは、EKSクラスターを作成する前にAWSアカウントにロードバランサーを作成しているため、既存のAWSServiceRoleForElasticLoadBalancingサービスロールがAWS IAM。

https://docs.aws.Amazon.com/elasticloadbalancing/latest/userguide/elb-service-linked-roles.html#create-service-linked-role で説明されています

You don't need to manually create the AWSServiceRoleForElasticLoadBalancing role. Elastic Load Balancing creates this role for you when you create a load balancer.

EKSがこれを試みているため、デフォルトのポリシーを使用してアクセス拒否の例外が発生します。

EKSクラスターの作成前にサービスにリンクされたロールを明示的に作成するその他のオプションには、次のものがあります。

AWS CLI

aws iam create-service-linked-role --aws-service-name "elasticloadbalancing.amazonaws.com"

テラフォーム

resource "aws_iam_service_linked_role" "elasticloadbalancing" {
  aws_service_name = "elasticloadbalancing.amazonaws.com"
}

または、UIコンソールからロードバランサーを手動で作成します。

プロビジョニングオプションに関係なく、AWS IAMで次のロールが表示されたときに機能することを知っておく必要があります

arn:aws:iam::<ACCOUNT_ID>:role/aws-service-role/elasticloadbalancing.amazonaws.com/AWSServiceRoleForElasticLoadBalancing
10
MMC

このポリシーをEKSロールに追加することで機能しました。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "iam:CreateServiceLinkedRole",
                "Resource": "arn:aws:iam::*:role/aws-service-role/*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:DescribeAccountAttributes"
                ],
                "Resource": "*"
            }
        ]
    }
3
Andrej Maya