Edited at

他のIAMで作られたEKSクラスターに EC2 のロールをアタッチしてkubectlできるようにする

EKS はデフォルトで作成したときの IAM 情報と紐付いて作成されます。

自分の環境では AWSではロールを使って運用しており、1時間でセッションが切れるようになっています。

そのため、ローカルから(kubectl)叩く際、

1時間ごとに認証エラーが起きてしまい、長時間触ることが出来ません。

そこで、ロールを使い EC2 から kubectl を時間無制限に操作できるようにしたので

参考までにどうぞ


ポリシーを作成

EKS のクラスターにつなぐのに必要なポリシーを作成します


  • 必要な権限はeks:DescribeCluster だけでした

{

"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DescribeCluster"
],
"Resource": "*"
}
]
}


ロールを作成


  • 先ほど作成したポリシーをアタッチしたロールを作成します。

  • ポリシーで頑張りたかったんですが、eks(k8s?) ではユーザーか、ロール単位でしか認証できませんでした


    • 調査不足の可能性もあります




ConfigMap を修正して適用

事前に system:masters の権限を持っているユーザーか、クラスターを作成したときのアカウント/ロールに切り替えます

aws-auth-cm.yaml もしくは、ConfigMap が書かれているyamlを以下のように書き加えます

<AWS_ACCOUNT_ID> と <ROLE-NAME> は適宜書き換えてください


  • <AWS_ACCOUNT_ID>: AWSのアカウント番号です。ロールARNに書いてあります

  • <ROLE-NAME>: 先ほど作成したロールの名前です

  mapRoles: |

# 中略
- rolearn: arn:aws:iam::<AWS_ACCOUNT_ID>:role/<ROLE-NAME>
username: <ROLE-NAME>
groups:
- system:masters

あとは、 kubectl apply -f aws-auth-cm.yaml と叩いて終わりです。


補足 ロールをアタッチしたEC2からEKSつなぐ

現在(2019-08-14)提供されている AmazonLinux2のaws-cli が古いためバージョンを上げる必要があります。

参考情報:

[アップデート]EKSを使う際にaws-iam-authenticatorが不要になりました! | DevelopersIO]

aws-cli/1.16.156以上が必要みたいです

Linux に AWS CLI をインストールする - AWS Command Line Interface

を参考にして最新バージョンを入れてください

終わったら

 aws eks update-kubeconfig --region ap-northeast-1 --name cluster-name

と叩いて上げれば連携完了です。

あとは kubectl を入れてお好きにどうぞ


余談


  • 本当は k8s側(RABC?)でもっと権限絞ったほうがいいのでしょうが、今回はやっていません

  • k8s は沼が深いと思いました