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 は沼が深いと思いました