この記事でわかること
-
EKSでRBACを利用したadminの認証・認可を設定をするで扱う作業の全体像 - 手順を進める前に確認したい前提
- 今の環境で試すときに気をつけたい点
はじめに
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
実務で使うときの確認ポイント
- Kubernetes、EKS、関連コントローラーのバージョン差分を確認する。
-
kubectlの接続先、namespace、RBAC権限を確認してから実行する。 - 検証後は不要なリソース、Load Balancer、ログ出力先、権限設定を整理する。
- 本番反映前に公式ドキュメント、リリースノート、既存クラスタの運用ルールを確認する。
おわりに
ここまで読んでいただきありがとうございました。
Wealthy Designでは、AWS・Webシステム開発・AI活用など、現場で使える技術を大切にしています。
会社の取り組みは、会社サイトにまとめています。
https://wealthy-design.com/