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
関連情報
Amazon EKS API サーバーに接続するときに、不正なサーバーエラーを解決する方法を教えてください。