概要
Identity Centerで作成したSSO用Roleの認証情報を利用して、kubectlコマンドを叩きたい場合、K8sのRBACに登録する(認可)必要があります。
通常はCLIやコンソールを利用すれば作成したユーザーがmastersRoleとして登録されるますがCDKの場合勝手が違って大変だったので記事にします。
解決策
SSO用RoleのARNを一部改変する必要があります。
arn:aws:iam::XXXXXXXXXXXX:role/aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_EKSAdmin_XXXXXXXXXXXXXXXXXX
↓
arn:aws:iam::XXXXXXXXXXXX:role/AWSReservedSSO_EKSAdmin_XXXXXXXXXXXXXXXXXX
改変したARNでmastersRoleを設定することで起動時にSSO用RoleがRBACに登録されます。
const eksCluster = new eks.FargateCluster(this, 'EksCluster', {
version: eks.KubernetesVersion.V1_31, // EKSのバージョン
kubectlLayer: new KubectlV30Layer(this, 'KubectlLayer'),
vpc: vpcForEks,
albController: {
version: eks.AlbControllerVersion.V2_8_2, // ALB Ingress Controllerのバージョン,
},
mastersRole: iam.Role.fromRoleArn(this, 'EksMasterRole', 'arn:aws:iam::XXXXXXXXXXXX:role//AWSReservedSSO_EKSAdmin_XXXXXXXXXXXXXXXXXX'),
});
EKSのRBACとIAMの繋がり
この図のようにIAMで認証し、k8sのRBACで認可を行っています。
IAMでadmin権限を持っていてもEKSのk8sから取ってみれば一般ユーザーでしかないので、k8s側で権限を付与する必要があります。
問題点1:CDKのデプロイによる問題
CDKでEKSをデプロイした場合、KubectlLayerを持つLambdaが自動生成されLambda経由でEKSを構築します。
そのため、EKSクラスター構築後はCLIやコンソールで操作したユーザがsystem:masters
の権限を持っていますが、CDKで作成する場合はcdk deploy
を実行するユーザーではなく、自動生成されたLambdaがこの権限を持ちます。
そこでCDKは明示的にmastersRoleを設定する必要があります。
const eksCluster = new eks.FargateCluster(this, 'EksCluster', {
version: eks.KubernetesVersion.V1_31, // EKSのバージョン
kubectlLayer: new KubectlV30Layer(this, 'KubectlLayer'),
mastersRole: iam.Role.fromRoleArn(this, 'EksMasterRole', 'arn:aws:iam::XXXXXXXXXXXX:role//AWSReservedSSO_EKSAdmin_XXXXXXXXXXXXXXXXXX'),
});
問題点2:SSOのRoleのARN問題
SSO用RoleのARNをコンソール上で確認すると、通常のIAM RoleのARNとは異なるpathがあり、このpathのせいでエラーを引き起こす要因になっていました。
arn:aws:iam::XXXXXXXXXXXX:role/aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_EKSAdmin_XXXXXXXXXXXXXXXXXX
公式のQAによると、
aws-reserved/sso.amazonaws.com/ap-northeast-1
このpathが良くないらしく、EKSが理解できるARNに変更する必要があるみたいです。
arn:aws:iam::XXXXXXXXXXXX:role/AWSReservedSSO_EKSAdmin_XXXXXXXXXXXXXXXXXX
引用
https://dev.classmethod.jp/articles/eks-cluster-access-control
https://docs.aws.amazon.com/cdk/api/v1/docs/aws-eks-readme.html#architectural-overview
https://qiita.com/watany/items/daf433338de5b6858ed6