CodeBuildからAmazon EKSクラスターに接続する際の「エラーサーバーにログインする必要があります (Unauthorized)」というエラーを解決するには、どうすればよいですか。

最終更新日: 2021 年 11 月 4 日

CodeBuild サービスロールを使用して AWS CodeBuild から Amazon Elastic Kubernetes Service(Amazon EKS) クラスターに接続しようとしています。kubectlコマンドで「エラー:サーバーにログインする必要があります(Unauthorized) 」というエラーが返されるのはなぜですか。また、問題をどのように解決すればよいでしょうか。

簡単な説明

AWS Identity and Access Management (IAM) Authenticator では、設定マップで使用されている Amazon リソースネーム (ARN) ロールのパスは許可されません。aws-auth ConfigMap のロール ARN (rolearn) にパスが含まれている場合、Amazon EKS は次のエラーを返します。

「エラー:"エラー: サーバーへのログインが必要です(Unauthorized)"」

CodeBuild サービスロール ARN には、 /service-role というパスが含まれています。aws-auth ConfigMap で rolearn の値を指定する場合、 /service-role パス、または別のロールを使用している場合はその他のパスを削除する必要があります。詳細については、「クラスターのユーザーまたはIAMロールの管理」を参照してください。

aws-auth ConfigMap でロール ARN から任意のパスを削除した後にエラーが発生した場合は、次の記事の手順に従ってください。 Amazon EKS API サーバーに接続したときに不正なサーバーエラーを解決するにはどうすればよいですか。

解決方法

CodeBuild サービスロールの ARN を特定し、/サービスロールパスを削除します。

1.    CodeBuild コンソールを開きます。

2.    左側のナビゲーションペインで、[Build] (構築) を選択します。次に、[プロジェクトを構築] を選択します。

3.    プロジェクト名を選択します。次に、[Build(構築)の詳細] を選択します。

4.    [Environment(環境)] セクションの [Build(構築)の詳細] ペインで、CodeBuild サービスロール ARN をコピーします。

5.    テキストエディタで CodeBuild サービスロール ARN を貼り付け、 /service-role パスを削除します。次に、編集した ARN をコピーします。

CodeBuild サービスロール ARN の例

arn:aws:iam::123456789012:role/service-role/codebuild-project-service-role

/service-role パスが削除された CodeBuild サービスロール ARN の例

arn:aws:iam::123456789012:role/codebuild-project-service-role

編集した CodeBuild サービスロールの ARN を aws-auth ConfigMap に追加します。

1.    テキストエディタでaws-auth ConfigMap を編集するには、クラスターの所有者または管理者が次のkubectlコマンドを実行する必要があります。

注:このコマンドは、ローカルコンピューターまたは EKS クラスターにアクセスできる Amazon Elastic Compute Cloud (Amazon EC2) インスタンスから実行できます。デフォルトでは、クラスターを作成したユーザーがクラスターへのアクセス権を持っています。

$ kubectl edit -n kube-system cm aws-auth

aws-auth ConfigMap が vi エディタで開きます。

注:サーバーからの「エラー (NotFound): configmaps“aws-auth”が見つかりません」というエラーが表示された場合は、次の記事「クラスターのユーザーまたは IAM ロールの管理」に記載されている aws-auth ConfigMap の例を使用してください。

2.    vi エディタで、次の手順を実行して、編集した CodeBuild サービスロールの ARN を aws-auth ConfigMap に追加します。
i を押して挿入モードをアクティブにします。
mapRoles ステートメントで、 system: master の下の、 rolearn の値として、編集した CodeBuild サービスロールの ARN を入力します。
Esc キーを押してコマンドモードをアクティブにします。次に、:wq と入力してファイルを保存して閉じます。

正しくフォーマットされた CodeBuild サービスロール ARN を含む mapRoles ステートメントの例

```
mapRoles: |
   - groups:
     - system:masters
     rolearn: arn:aws:iam::123456789012:role/codebuild-project-service-role
     username: codebuild-project-service-role
```