Amazon EKS で AWS ロードバランサーコントローラーを使用しているときに「webidentityerr」エラーが表示される理由

所要時間2分
0

Amazon Elastic Kubernetes Service (Amazon EKS) で AWS ロードバランサーコントローラーを使用しようとすると、「WebIdentityErr」というエラーメッセージが表示されます。

簡単な説明

Amazon EKS で AWS Load Balancer Controller を使用すると、次のエラーが表示される場合があります。

「failed to find existing LoadBalancer due to WebIdentityErr: failed to retrieve credentials\ncaused by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity\n\tstatus code: 403」

このエラーは、以下の原因で発生します。

  • サービスアカウントの設定が正しくない。
  • サービスアカウントで使用している AWS Identity and Access Management (IAM) ロールの信頼関係が正しくない。

AWS Load Balancer Controller では、ワーカーノードがタスクを実行します。IAM アクセス許可を使用して、これらのワーカーノードに Application Load Balancer または Network Load Balancer のリソースへのアクセス許可を付与する必要があります。IAM アクセス許可を設定するには、サービスアカウントの IAM ロールを使用します。または、IAM アクセス許可をワーカーノードの IAM ロールに直接関連付けします。詳細については、Kubernetes ウェブサイトの「Load Balancer Controller installation」を参照してください。

解決方法

サービスアカウントの設定が正しくない。

サービスアカウントが正しく設定されているかどうかを確認するには、次の手順を実行します。

1.    デプロイで定義されているサービスアカウント名を確認します。

kubectl describe deploy LOAD_BALANCER_CONTROLLER -n kube-system | grep -i "Service Account"

2.    サービスアカウントの詳細を確認します。

kubectl describe sa LOAD_BALANCER_CONTROLLER -n kube-system

3.    IAM ロールのサービスアカウントの注釈を確認します。

Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxxxxxx:role/AMAZON_EKS_LOAD_BALANCER_CONTROLLER_ROLE

4.    この注釈が見つからないか正しくない場合は、注釈を更新します。サービスアカウントへの IAM ロールの関連付けを正しく行います。

kubectl annotate serviceaccount -n SERVICE_ACCOUNT_NAMESPACE SERVICE_ACCOUNT_NAME \ eks.amazonaws.com/role-arn=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME

5.    サービスアカウントに関連付けられている既存の Amazon EKS ポッドをすべて削除して再作成します。認証情報に関する環境変数を忘れずに適用してください。

kubectl delete pods AWS_LOAD_BALANCER_CONTROLLER_POD -n KUBBE_SYSTEM

使用している IAM ロールとサービスアカウントとの信頼関係が正しくない。

以下の例は、IAM ロールとサービスアカウントの信頼関係を確立する際によく行われるミスを示しています。

例 1: 「sts:AssumeRoleWithWebIdentity」アクションの対象としての IAM ロールまたは信頼関係が正しく定義されていない

sts:AssumeRoleWithWebIdentity アクション (sts:AssumeRole アクションではないことに注意) の対象としての信頼関係が正しく定義されていることを確認します。

次の例は、正しく定義されていない信頼関係です。

{
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "xxxxx.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
}

この問題を解決するには、sts:AssumeRoleWithWebIdentity アクションの対象となる信頼関係を定義します。

{  
  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Effect": "Allow",  
      "Principal": {  
        "Federated": "arn:aws:iam::AWS_ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC-PROVIDER_ID"  
      },  
      "Action": "sts:AssumeRoleWithWebIdentity",  
      "Condition": {  
        "StringEquals": {  
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC_PROVIDER_ID:sub": "system:serviceaccount:kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT",  
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"  
        }  
      }  
    }  
  ]  
}

**注:**すべての変数を独自の値に置き換えるのを忘れないでください。

1 つのアカウント内の複数のクラスターに同じ IAM ロールを使用するには、次の例のように信頼関係を定義します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::AWS-ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC-PROVIDER_ID"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:sub": "system:serviceaccount: kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT",
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::AWS_ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID:sub": "system:serviceaccount: kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT",
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
        }
      }
    }
  ]
}

**例 2: Amazon EKS クラスターの作成時に作成する OIDC プロバイダー ID が正しくない **

Amazon EKS クラスターの OpenID コネクト (OIDC) プロバイダーを適切に作成し、検証してください。OIDC プロバイダー ID および関連付けられている AWS リージョンが正しくリストされていることを確認します。リストされていないと、WebIdentityErr エラーが表示されます。

例 3: サービスアカウント名またはその名前空間が正しく入力されていない

AWS Load Balancer Controller のデプロイを更新するときは、正しいサービスアカウント名とその名前空間を入力します。

例 4: 信頼関係の作成時に「sts.amazonaws.com」のステップが抜けていた

EKS ポッドに関連付けられているサービスロールが AssumeRoleWithWebIdentity アクションで STS オペレーションを実行できない場合は、信頼関係を更新してください。STS オペレーションを実行するには、次のように、信頼関係に sts.amazonaws.com が含まれている必要があります。

"Condition": {
        "StringEquals": {
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:sub": "system:serviceaccount:kube-system:LOAD_BALANCER_CONTROLLER_ACCOUNT",
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
        }
}

複数のキーまたは値を含む IAM 条件の詳細については、「Creating a condition with multiple keys or values」を参照してください。

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ