はじめに
Amazon EKSでRBACを利用したadmin
の認可設定をする方法をまとめます。
IAMグループに所属するIAMユーザーに、EKSクラスターの管理者権限でのアクセス許可を付与します。
Mac環境を想定しています。
developer
に関してはEKSでRBACを利用したdeveloperの認証・認可を設定をするを参考にしてください。
実行環境の準備
-
AWS CLIの設定
AWS CloudFormationを動かすためのAWS CLIの設定を参考にしてください。 -
EKSクラスタの構築
Macでeksctlを利用してAmazon EKSのクラスターを構築するを参考にしてください。 -
EKSのコンテキストの設定
MacにてAmazon EKSの設定をするを参考にしてください。
IAMロールの作成
-
IAMロールを作成する
※このIAMロールはEKSへのアクセス許可に利用します。
※今回はロール名をakane-dev-eks-admin-role
にしています。export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) ADMIN_ASSUME_ROLE_POLICY=$(echo -n '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::'; echo -n "${ACCOUNT_ID}"; echo -n ':root" } } ] }') aws iam create-role \ --role-name akane-dev-eks-admin-role \ --assume-role-policy-document "${ADMIN_ASSUME_ROLE_POLICY}"
-
IAMロール用のポリシーを作成する
※このIAMポリシーはKESのコンテキスト設定時にAWS CLIでaws eks update-kubeconfig
が利用できるようにします。
※今回はポリシー名をakane-dev-eks-admin-role-policy
にしています。export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) ADMIN_ROLE_POLICY=$(echo -n '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:*:'; echo -n "${ACCOUNT_ID}"; echo -n ':cluster/*" } ] }') aws iam create-policy \ --policy-name akane-dev-eks-admin-role-policy \ --policy-document "${ADMIN_ROLE_POLICY}"
-
IAMロール用のポリシーをIAMロールにアタッチする
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) aws iam attach-role-policy \ --role-name akane-dev-eks-admin-role \ --policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/akane-dev-eks-admin-role-policy
IAMグループの作成
-
IAMグループを作成する
※今回はロール名をakane-dev-eks-admin-group
にしています。aws iam create-group --group-name akane-dev-eks-admin-group
-
IAMグループ用のポリシーを作成する
※今回はポリシー名をakane-dev-eks-admin-group-policy
にしています。
※このポリシーが先ほど作成したIAMロールを委任(AssumeRole)します。export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) ADMIN_GROUP_POLICY=$(echo -n '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::'; echo -n "${ACCOUNT_ID}"; echo -n ':role/akane-dev-eks-admin-role" } ] }') aws iam create-policy \ --policy-name akane-dev-eks-admin-group-policy \ --policy-document "${ADMIN_GROUP_POLICY}"
-
IAMグループ用のポリシーをIAMグループにアタッチする
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) aws iam attach-group-policy \ --group-name akane-dev-eks-admin-group \ --policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/akane-dev-eks-admin-group-policy
環境設定
※事前にKubernetesクラスターのコンテキストの設定をします。
-
aws-auth ConfigMap を更新して、IAM ロールを許可する
※クラスター名を設定します。export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) eksctl create iamidentitymapping \ --cluster ${クラスター名} \ --arn arn:aws:iam::${ACCOUNT_ID}:role/akane-dev-eks-admin-role \ --username dev-akane-admin-user \ --group system:masters
-
クラスターで管理されているすべての ID のリストを取得する
eksctl get iamidentitymapping --cluster ${クラスター名}
IAMユーザーの作成
-
IAMユーザーを作成する
※今回はユーザー名をeks-akane-developer
にしています。aws iam create-user --user-name eks-akane-admin
-
IAMユーザーをIAMグループにアタッチする
aws iam add-user-to-group \ --user-name eks-akane-admin \ --group-name akane-dev-eks-admin-group
-
IAMユーザーのアクセスキーを作成する
aws iam create-access-key --user-name eks-akane-admin | tee /tmp/eks-akane-admin.json
AWS CLIのAssumeロールの設定
-
~/.aws/config
の設定export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) mkdir -p ~/.aws cat << EoF >> ~/.aws/config [profile eks-akane-admin] role_arn=arn:aws:iam::${ACCOUNT_ID}:role/akane-dev-eks-admin-role source_profile=eks-akane-admin EoF
-
~/.aws/credentials
の設定
※アクセスキー
とシークレットキー
を設定する。
※AWS CloudFormationを動かすためのAWS CLIの設定を参考にしてください。cat << EoF >> ~/.aws/credentials [eks-akane-admin] aws_access_key_id=$(jq -r .AccessKey.AccessKeyId /tmp/eks-akane-admin.json) aws_secret_access_key=$(jq -r .AccessKey.SecretAccessKey /tmp/eks-akane-admin.json) EoF
-
Credentialsを切り替える
export AWS_PROFILE=eks-akane-admin
-
Credentialsの切り替えを確認する
※Arnにassumed-role
と記載される。aws sts get-caller-identity
-
コンテキストを切り替える
※クラスター名を設定します。aws eks update-kubeconfig --region ap-northeast-1 --name ${クラスタ名}
adminの権限確認
-
Namespace
default
の認可確認
※yes
と表示される。kubectl auth can-i create deploy kubectl auth can-i delete deploy
クリーンアップ
-
Credentialsを切り替える
※プロファイル名
を設定する。export AWS_PROFILE=${プロファイル名}
-
aws-auth ConfigMap から削除する
※クラスター名を設定します。export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) eksctl delete iamidentitymapping \ --cluster ${クラスター名} \ --arn arn:aws:iam::${ACCOUNT_ID}:role/akane-dev-eks-admin-role
-
IAMユーザーをIAMグループからデタッチする
aws iam remove-user-from-group \ --user-name eks-akane-admin \ --group-name akane-dev-eks-admin-group
-
IAMユーザーのアクセスキーを削除する
aws iam delete-access-key \ --user-name eks-akane-admin \ --access-key-id "$(jq -r .AccessKey.AccessKeyId /tmp/eks-akane-admin.json)"
-
IAMユーザーのアクセスキーのファイルを削除する
rm -f /tmp/eks-akane-admin.json
-
IAMユーザーを削除する
aws iam delete-user --user-name eks-akane-admin
-
IAMグループ用のポリシーをIAMグループからデタッチする
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) aws iam detach-group-policy \ --group-name akane-dev-eks-admin-group \ --policy-arn "arn:aws:iam::${ACCOUNT_ID}:policy/akane-dev-eks-admin-group-policy"
-
IAMグループ用のポリシーを削除する
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) aws iam delete-policy \ --policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/akane-dev-eks-admin-group-policy
-
IAMグループを削除する
aws iam delete-group --group-name akane-dev-eks-admin-group
-
IAMロール用のポリシーをIAMロールからデタッチする
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) aws iam detach-role-policy \ --role-name akane-dev-eks-admin-role \ --policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/akane-dev-eks-admin-role-policy
-
IAMロール用のポリシーを削除する
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) aws iam delete-policy \ --policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/akane-dev-eks-admin-role-policy
-
IAMロールを削除する
aws iam delete-role \ --role-name akane-dev-eks-admin-role
参考
WHAT IS RBAC?
Using RBAC Authorization
クラスターへの IAM ユーザーおよびロールアクセスを有効にする
Manage IAM users and roles
Identity and Access Management