Amazon Web Services ブログ

AWS SSO を用いた Amazon EKS への迅速なシングルサインオン

訳注:2022年7月に、AWS Single Sign-On は AWS IAM Identity Center に変更されました。

この記事は A quick path to Amazon EKS single sign-on using AWS SSO (記事公開日: 2022 年 6 月 14 日) を翻訳したものです。

Software as a Service (SaaS) とクラウドの導入が急速に進む中、アイデンティティは新しいセキュリティの境界になっています。AWS Identity and Access Management (IAM) と Kubernetes role-based access control (RBAC) は、強力な最小権限のセキュリティ体制を構築するツールを提供します。Single sign-on (SSO) は中央のアイデンティティプロバイダー (IdP) とのフェデレーションをおこない、ユーザーと SecOps チームが単一の認証情報を管理できるようにすることで、セキュリティを改善します。従業員や契約社員が組織から抜ける際、管理者は単一のアカウントを無効化することで、すべてのシステムとアプリケーションへのアクセスを削除することができます。これにより、定期的なコンプライアンス監査をシンプルにすることができます。

このブログでは、Amazon Elastic Kubernetes Service (Amazon EKS) クラスター上で稼働する Kubernetes リソースにアクセスするためのシングルサインオンを実装する、迅速かつ直接的な手順を紹介します。AWS Single Sign-On (AWS SSO) を Kubernetes RBAC と組み合わせて使用することで、AWS Command Line Interface (AWS CLI) と他のKubernetes CLI ツールを使用したアクセスを管理します。以下のステップに従うと、AWS のベストプラクティスに基づき迅速に立ち上げることができます。また特定のニーズに応じてカスタマイズすることができます。SSO と IdP フェデレーションについて具体的に説明する良いリファレンスがあるので、特定のユースケースや課題を深く掘り下げるために、この記事の最後でそれらのリファレンスを紹介しています。

前提条件

  • AWS アカウント
  • AWS アカウントに関連付けられたメールアドレスへのアクセス
  • コマンドラインシェルと以下のツール群

斜体の行 はコードブロックなのでコピーして AWS CLI シェルに入力できます。

作成するもの

  • AWS Organizations ルートアカウント
  • AWS Organizations メンバーアカウント
  • 多要素認証 (MFA) に Twilio Authy を使用した AWS SSO
  • Amazon EKS クラスターと2ノードのマネージドノードグループ

Security contexts マトリクス

セットアッププロセスの中で異なるコンポーネントに対してコマンドを発行するために、これらのアイデンティティを切り替えます。

名前 タイプ 実行方法 目的
AWS AdministratorAccess IAM ユーザー aws configure default profile Org ロールを引き受け、Org アカウントを作成する
EKSClusterAdminAccess/eksadmin SSO ユーザー/ロール aws cli で profile を指定する Creator ロールを引き受け、EKS クラスターを管理する
OrganizationAccountAccessRole IAM ロール ロールを引き受けたあと、アクセスキーを変数に設定する EKSClusterCreator ポリシーおよびロールを作成する
EKSClusterCreator IAM ロール ロールを引き受けたあと、アクセスキーを変数に設定する EKS クラスターを作成し、IAM/k8s をマッピングする
ClusterAdmin Kubernetes ロール SSO ロールを aws-auth にマッピングする Kubernetes クラスターを管理する

AWS Organizations と AWS SSO

AWS 環境の管理者として AWS Organizations を有効化し、EKS クラスターをホストするメンバーアカウントを作成します。次に AWS SSO を有効化し、組織の役割と責任に沿ったユーザーとグループを作成します。

AWS Organizations を有効化する

AWS SSO は複数の AWS アカウントを管理するための無料サービスである AWS Organizations を必要とします。AWS Organizations を使用すると、AWS SSO は単一のログインポータルを介して組織内のすべてのアカウントへの認証・認可を提供することができます。AWS Organizations は、中央集権的なセキュリティガードレール・クロスアカウントでのアクセス管理・リソース共有・組織をまたいだ課金を通じて、管理とセキュリティを簡素化することができます。

AWS Organizations は AWS CLI コマンドを一度使用してデプロイすることができます。コマンドを発行したアカウントは、AWS Organizations のルートアカウントになります。AWS のユーザーまたはロールは AdministratorAccess AWS管理ポリシー がアタッチされている必要があります。

注意:AWS Organizations のルートアカウントは組織全体にまたがった管理者特権を持ち、クロスアカウントのセキュリティ、財務的なタスクのために予約する必要があります。ルートアカウントでアプリケーションのワークロードを実行することは避けてください。

組織に所属していない既存のアカウントで、新しい組織を作成する

aws organizations create-organization

AWS Organizations をプロビジョニングするには数分かかります。

プロビジョニング状況を確認する

aws organizations describe-organization

AWS Organizations のプロビジョニングが完了したら、元のアカウントのメールアドレスにメールでの確認要求が届きます。そのメールを開き Verify your email address ボタンを押します。このステップでは、追加の AWS アカウントを新しい組織に作成・招待することができます。

EKS クラスターをホストする新しいメンバーアカウントをプロビジョニングします。以下のコマンドの “youralias” と “yourdomain” を置き換えて一意の名前を準備し、ご自身のメールドメインでメールアドレスを作成します (メールプロバイダーがサポートしている場合、既存のメールエイリアスに “+” と一意の文字列を追加することで、同じメールボックスで受信する一意のメールエイリアスを複数作成することができます) 。${RANDOM} 変数はランダムな5桁の数字を生成します。新しいアカウントをプロビジョニングする間に、AWS SSO の有効化を継続することができます。

EKS クラスターをホストするメンバーアカウントを作成する

aws organizations create-account --email youralias+ekscluster@yourdomain.com --account-name "EKS-Account-${RANDOM}"

AWS SSO を有効化する

AWS マネジメントコンソールから Services ドロップダウンを使用するか、検索バーから “SSO” と入力し、AWS SSO を開きます。Enable AWS SSO を押します。

Enable AWS SSO
初期セットアップが完了したら AWS SSO の設定ページに戻ります。 AWS SSO ログインポータルがすでにプロビジョニングされていることに注意してくだい。親ドメインの “awsapps.com” に独自のホスト名を追加することで、URL をさらにカスタマイズすることができます。さしあたっては “User portal URL” を SSO ダッシュボードからコピーしてテキストエディタに貼り付けておくと、あとのステップで使用できます。

WelcomeToAWSSSO

AWS SSO は組み込みの ID ストア、または AWS Managed Microsoft AD や SAML 2.0 準拠の外部 IdP などの独自 IdP を使用するオプションを提供することで、迅速に立ち上げることができます。ここでは AWS SSO の ID ストアを使用します。ID ソースは要件の変化に応じて後で変更することができます。

AWS SSO で ID を作成する前に、セキュリティキーとモバイル認証アプリの両方をサポートする多要素認証をオンにしておきます。

MFAを有効化する方法:

  1. Settings を押し Multi-factor authentication セクションの Configure を押します。
  2. Users should be promoted for MFA section の下部の Every time they sign in (always-on) を選択します。
  3. Users can authenticate with these MFA types の下部の Authenticator apps が選択されていることを確認します。
  4. 最後に If a user does not yet have a registered MFA device セクションの Require them to register an MFA device at sign in を選択します。
  5. Save Changes を押します。

How to turn on MFA

AWS SSO ユーザ設定
EKS クラスター管理者のためのグループを作成し、グループをメンバーアカウント EKS-Account-… に関連付けます。そして権限を付与し、新しいユーザーをグループに追加します。AWS SSO でグループを使用するとロールベースでのアクセス制御 (RBAC) がシンプルになります。以下のステップでは、主要な AWS リソースへの読み取り専用権限、EKS クラスターへのフルアクセス、クラスターを作成するために使用する特別なロールを引き受けることができる最小権限の IAM ポリシーを作成します。

1) Groups を選択し Create group を押します。“EKS_Cluster_Admins” と入力し Create を押します。
2) AWS アカウントを選択し EKS-Account-… から Assign Users を押します。Groups タブを選択し EKS_Cluster_Admins を選択し Next: Permission sets. を押します。
3) Create new permission set を押すと、新しいブラウザのタブが開きます。
4) Create new permission set ウィンドウで、Create a custom permission set を押し、Next: Details. を押します。

  • Create a custom permission set ウィンドウでは、“EKSClusterAdminAccess“ というアクセス権限セットを作成します。
  • このアクセス権限セットが関連付けられた SSO ユーザーを EKS コンソールにリダイレクトするために、Relay state “https://console.thinkwithwp.com/eks” を入力します(オプション)。
  • Attach AWS managed policiesCreate a custom permissions policy の両方を選択します。
  • “ViewOnlyAccess” AWS 管理ポリシーを検索し、選択します。
  • 以下の JSON コードブロックを、Create a custom permissions policy ウィンドウに貼り付けます(次のスクリーンショットのように)。
  • Next: TagsNext: ReviewCreate の順に押します。
{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "eks:*",
            "sts:AssumeRole"
        ],
        "Resource": "*"
    }
  ]
}
SSO Settings details

5) Select permission sets ウィンドウに戻り、更新ボタンを押します。新しい EKSClusterAdminAccess アクセス権限セットを選択し、Finish を押します。アカウントの設定が完了したら、Proceed to AWS Accounts を押します。
6) Users Add User と押します。そして “eksadmins” と入力します。

  • Password セクションでは、Send an email to the user… を選択し、メールアドレスを入力・確認し、名字・名前・表示名を入力します。
  • Next: Groups を押し、EKS_Cluster_AdminsAdd User を選択します。
  • ユーザー名は大文字と小文字が区別されることに注意してください。

SSO User Settings

Invitation to join AWS Single Sign-On メッセージを受信したら、Accept Invitation ボタンを押し、New user sign up ウィンドウを表示します。

NewUserSignUp

新しいパスワードを入力・確認します。パスワードの長さと複雑さの要求が右側に表示され、これらの要求を満たすようガイダンスが提供されます。Set new password を押すと、AWS SSO のサインインページにリダイレクトされます。

注意:既に AWS SSO のセッションがある場合、続ける前にサインアウトしていることを確認してください。

新しい認証情報でサインインすると、多要素認証のセットアップを促されます。ここでは Twilio Authy を使用しますが、AWS SSO は Yubikey といった有名な物理セキュリティキーや、Google Authenticator といったスマートフォンの認証アプリをサポートしています。スマートフォンで希望の認証アプリを開くか、インストールします。SSO サインインページの MFA 設定に戻り Authenticator app を選択し、Next を選択し、Show QR Code を選択してください。QR コードを読み取り、アプリから数字を入力すると、新しいユーザーのセットアップが完了します。

Set Up MFA

Set up MFA 2

Set up MFA 3

Done を選択すると、先ほど EKS_Cluster_Admins グループを紐付けた “EKS-Account-…” アカウントを含む、 SSO アカウントを選択するページにリダイレクトされます。そのアカウントを展開し、EKSClusterAdminAccess ロールを選択すると、AWS マネジメントコンソールの EKS サービスページに遷移します。

ここまでで、わずか2行のコードで組織を作成し、アカウントを追加しました。次に AWS SSO をセットアップし、グループを作成し、そのグループを新しいアカウントに割り当て、グループの役割に関連付いた最小権限のアクセス権限セットを設定しました。最後に、新しいユーザーをグループに追加し、MFA をセットアップし、そのユーザーで SSO にサインインしました。もし AWS Managed Active Directory や Okta のようなサードパーティの IdP を利用したい場合は、それらの ID プロバイダーを AWS SSOと連携させ、“eksadmins” のような AWS SSO ユーザーを作成するかわりに、それらのプロバイダーのユーザー ID を使ってください。他のステップは全て同じです。

EKS へ SSO アクセスする CLI を設定する

AWS CLI で SSO を簡単に使用するために、AWS SSO は AWS 構成プロファイルと統合された aws sso login コマンドを提供します。それをセットアップするためには、最新の AWS CLI がインストールされ設定されたコマンドラインターミナルを開きます。

SSO という名前のプロファイルを自動生成する

aws configure sso

次の値を指定してください。

  • sso_start_url – 先ほど SSO 管理ダッシュボード からコピーした “User portal URL”
  • sso_region – SSO が最初にデプロイされ、現在管理されているリージョン

ブラウザで認可をリクエストする画面を開いたら Allow を押し、CLI に戻ります。CLI に戻ると、アカウント・ロール・コマンド発行用のデフォルトリージョン・出力形式を選択するよう案内されます。ブラウザに SSO ユーザー “eksadmin” の認証済 AWS SSO セッションがあるとすると、そのユーザーに紐付けられたアカウントとロールのみが表示されます。

プロファイル名を作成する場合、そのプロファイルで CLI コマンドを発行するために --profile {profile_name} を含める必要があるため、将来参照するために覚えやすい名前を選びます。この例ではプロファイルに “EKSClusterAdminAccess-EKSAccount1” と名付けています。

SSO 設定セッションは、次のサンプル出力のようになります。

$ aws configure sso
SSO start URL [None]: https://{hostname}.awsapps.com/start
SSO Region [None]: us-east-1
The only AWS account available to you is: 111222333444
Using the account ID 111222333444
The only role available to you is: EKSClusterAdminAccess
Using the role name "EKSClusterAdminAccess"
CLI default client Region [None]: us-east-1
CLI default output format [None]: json
CLI profile name [EKSClusterAdminAccess-111222333444]: EKSClusterAdminAccess-EKSAccount1

SSO プロファイル を作成すると、今後は aws sso login コマンドを使うことで、認証情報の入力を促すブラウザのウィンドウが開かれるようになります。先に進む前に、現在のアイデンティティを確認してください。

aws sts get-caller-identity --profile EKSClusterAdminAccess-EKSAccount1

次のように表示されるはずです。

{
  "UserId": "AZORYH847HJYD98SU:eksadmin",
  "Account": "111222333444",
  "Arn": "arn:aws:sts::111222333444:assumed-role/AWSReservedSSO_EKSClusterAdminAccess_4ffa4321e413c0b0/eksadmin"
}

新しいアカウントで EKS クラスターを作成し、AWS SSO アイデンティティを Kubernetes ClusterRole に関連付ける前に、新しい EKS クラスターの作成のために特別な IAM ロールを作成します (セキュリティとシンプルさのトレードオフとして、このロールはクラスター作成に直接関連する限られた AWS サービス群のすべてのアクションを許可します。より厳しい最小権限シナリオの場合は、AWS IAM Access Analyzer などのサービスを使用して、実際の CloudTrail アクセスログに基づいてロールを作成する ことができます) 。

EKSClusterCreator IAM ロールを作成する

EKS クラスターを作成すると、使用するユーザーまたはロールは、クラスターの管理者権限を継承します。この ID プリンシパルは、クラスターのクラスター管理者権限を保持し、セキュアに保たれる必要があります。クラスターを作成したロールを分離して安全に保ちながら、日々の運用タスクを委任するための追加のロールを作成することがベストプラクティスです。もしプリンシパルの名前を忘れた場合、AWS サポートによって期間限定で取得または変更することができますし、ユーザー名やロール名を覚えていれば、IAM プリンシパルを再生成することができます。

以下の CLI コードスニペットでは、アカウント ID と SSO ロール名が現在の SSO セッションから抽出され、新しい EKSClusterCreate ロールを引き受けるために AWS SSO グループへのアクセスを許可するために使用されています。eksctl コマンドラインツールを使って新しい EKS クラスターを作成するために、このロールを使用します。

クラスター作成ポリシーを作成するために現在のロールとアカウントを取得する

ssorole=$(aws sts get-caller-identity --query Arn --output text --profile EKSClusterAdminAccess-EKSAccount1 | cut -d/ -f2)
account=$(aws sts get-caller-identity --query Account --output text --profile EKSClusterAdminAccess-EKSAccount1)
echo $ssorole $account

クラスターを作成する IAM ロールの信頼ポリシーのための JSON ファイルを作成する

cat <<EOF > assume-role.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::${account}:role/aws-reserved/sso.amazonaws.com/${ssorole}"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}
EOF

注意:us-east-1 以外のリージョンで SSO を設定している場合は “sso.amazonaws.com” のあとにリージョンを追加してください。例えば us-east-2 であれば “…/sso.amazonaws.com/us-east-2/…” となります。

クラスター作成用ポリシーを作成するための JSON ファイルを作成する

cat <<EOF > clustercreator-policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:*",
                "iam:*",
                "cloudformation:*",
                "ec2:*",
                "autoscaling:*",
                "ssm:*",
                "kms:*",
                "sts:GetCallerIdentity"
            ],
            "Resource": "*"
        }
    ]
}
EOF

クラスター作成用のロールは全ての EKS クラスターリソースを作成するための権限を必要としますが、それらの権限は AdministratorAccess ポリシー権限の一部でしかありません。分かりやすくするために、クラスター作成に関係する AWS サービスのみ全ての API アクションを許可するポリシーを作成します。

EKS アカウント内に IAM ポリシーとロールを作成するために、AWS Organizations メンバーアカウントに作成されている OrganizationAccountAccessRole を一時的に引き受けます。この AWS Organizations の機能は、カスタマイズ可能な組織をまたぐ一元的な管理者権限アクセスを提供します。

EKSClusterCreator ロールを作成するために、 OrganizationAccountAccessRole を引き受ける

adminrolearn="arn:aws:iam::${account}:role/OrganizationAccountAccessRole"
creds=$(aws sts assume-role --role-arn ${adminrolearn} --role-session-name "adminSession-CreateEKSCreatorRole" --query 'Credentials.[{AWS_ACCESS_KEY_ID: AccessKeyId}, {AWS_SESSION_TOKEN: SessionToken}, {AWS_SECRET_ACCESS_KEY: SecretAccessKey}]' | jq -r .[] | sed 's/{//;s/}//;s/"//g;s/ AWS_ACCESS_KEY_ID: /export AWS_ACCESS_KEY_ID=/;s/ AWS_SESSION_TOKEN: /export AWS_SESSION_TOKEN=/;s/ AWS_SECRET_ACCESS_KEY: /export AWS_SECRET_ACCESS_KEY=/')
eval ${creds}

aws sts get-caller-identityを実行すると、 OrganizationalAccountAccessRole を引き受けたことを確認できます。先ほどのスクリプトはそのロールを引き受け、 AWS_ACCESS_KEY_ID 変数を変更あるいは削除するか AWS 構成プロファイルを指定するまでデフォルトの AWS CLI 認証情報を設定する環境変数を作成します。

クラスター作成ロールを作成し、ポリシーをアタッチする

aws iam create-role --role-name EKSClusterCreator --assume-role-policy-document file://assume-role.json
aws iam create-policy --policy-name EKSClusterCreatorPolicy --policy-document file://clustercreator-policy.json
aws iam attach-role-policy --policy-arn arn:aws:iam::${account}:policy/EKSClusterCreatorPolicy --role-name EKSClusterCreator

ロールを引き受け、新しい一時クレデンシャルを適用する

rolearn="arn:aws:iam::${account}:role/EKSClusterCreator"

creds=$(aws sts assume-role --role-arn ${rolearn} \
  --role-session-name "create-eks-cluster" \
  --query 'Credentials.[{AWS_ACCESS_KEY_ID: AccessKeyId}, {AWS_SESSION_TOKEN: SessionToken}, {AWS_SECRET_ACCESS_KEY: SecretAccessKey}]' \
  --profile EKSClusterAdminAccess-EKSAccount1 | jq -r .[] | sed 's/{//;s/}//;s/"//g;s/ AWS_ACCESS_KEY_ID: /export AWS_ACCESS_KEY_ID=/;s/ AWS_SESSION_TOKEN: /export AWS_SESSION_TOKEN=/;s/ AWS_SECRET_ACCESS_KEY: /export AWS_SECRET_ACCESS_KEY=/')

eval ${creds}

EKSClusterCreator ロールを作成したので、CLI からそのロールを引き受け、環境変数をリセットし、EKS クラスターを作成する準備ができました。作成したら eksctl ユーティリティを使って、新しいEKS クラスターへの権限をEKSClusterAdminnAccess ロールに与えます。

EKS クラスターを作成する

新しい VPC の中に、EKS クラスターとマネージドノードグループをデフォルトの設定で作成する

eksctl create cluster

注意:デフォルトでは、EKS はアクティブな kubeconfig ファイルをアップデートします。以下の KUBECONFIG 環境変数を設定することで、別の kubeconfig ファイルを指定できます。

export KUBECONFIG=~/.kube/config-ekssso-EKSClusterAdmin 

そうすることで既存の kubeconfig ファイルが保持され、 eksctl create cluster が終了した時に新しい kubeconfig ファイルが作成されます。

クラスターの作成には約15〜20分必要です。待っている間に、裏側で何が起きているのかを確認し追加のオプションについて学ぶために eksctl のドキュメント を読んでください。クラスターと関連するインフラストラクチャを構築するために、eksctl は AWS CloudFormation を使用します。クラスター作成が完了したら、クラスター名をメモしておき次のセッションに進みます。

Kubernetes RBAC と IAM フェデレーション

EKS は、WebHook トークン認証・サービスアカウントトークン・OIDC 認証など、クラスターへのアクセスコントロールのための様々な方法を提供しています。AWS CLI バージョン 2.x 以降は kubectl コマンドの認証のために Bearer トークンが透過的に生成されます。kube-apiserver はトークン署名を検証するための Webhook 認証を使用し、認証のためのトークンを AWS Security Token Service (AWS STS) に転送します。認証されたら kube-apiserver は全ての EKS クラスターにデフォルトで作成される aws-auth ConfigMap 内での IAM とKubernetes RBAC のマッピングを期待します。既に引き受けている EKSClsuterCreator ロールを使用して、EKSClusterAdminAccess ロールに EKS クラスターの管理権限を委任します。まず Kubernetes のデフォルトの cluster-admin ロールを使って AWS SSO の EKSClusterAdminAccess ロールにアクセス権を付与します。もしこの演習で使っているリージョンに EKS クラスターが1つしかない場合は、以下のコードブロックを入力します。そうでなければ eksctl によるクラスター作成処理の最終行に表示されているクラスター名を使用して export cluster={cluster-name} コマンドで “cluster” 変数を手動設定するか、CLI コマンドで aws eks list-clusters を実行します。

EKSClusterAdminAccess ロールの aws-auth アイデンティティマッピングを作成する

cluster=$(aws eks list-clusters –query clusters –output text)

eksctl create iamidentitymapping \
 --cluster ${cluster} \
 --arn “arn:aws:iam::${account}:role/${ssorole}” \
 --username cluster-admin \
 --group system:masters 

Kubernetes RBAC と IAM のマッピングを EKS クラスター内の aws-auth ConfigMap を参照することで確認する

kubectl get configmap -n kube-system aws-auth -o yaml 

出力は以下のようになります。

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::111222333444:role/eksctl-fabulous-wardrobe-16446157-NodeInstanceRole-L7A7NXU3DSJS
      username: system:node:{{EC2PrivateDNSName}}
    - groups:
      - system:masters
      rolearn: arn:aws:iam::111222333444:role/AWSReservedSSO_EKSClusterAdminAccess_6a316cc66d154241
      username: cluster-admin

eksctl create iamidentitymapping コマンドを実行することで、SSO のアクセス権限セット “EKSClusterAdminAccess” を Kubernetes デフォルトの cluster-admin ロールにマッピングしました。もう1つの system:node:{{EC2PrivateDNSName}}
は、EKS ノードグループのインスタンスプロファイルのロール eksctl-fabulous-wardrobe-16446157-NodeInstanceRole-L7A7NXU3DSJS にマッピングされており、クラスタ内部で各ノードの kubeletに system:bootstrapperssystem:nodes の権限を付与します。このノードグループのマッピングは、新しいノードグループが作成されるたびに作成されます。aws-auth ConfigMap の中に EKSClusterCreator ロールが書かれていないことに注意してください。この ID プリンシパルはクラスターの存続のためのクラスター管理者権限を保持し EKS Security Best Practice Guide に従って安全に保つ必要があります。

kubectl は、クラスター・リージョン・アイデンティティ・ kubectl の認証方法を定義するためのエントリを必要とします。以下のように、EKSClusterAdminAccess ロールの設定を生成することができます。

EKSClusterAdminAccess ロールを使い始めるために kubeconfig を作成する

aws eks update-kubeconfig --name ${cluster} \
--profile EKSClusterAdminAccess-EKSAccount1

注意:もし “No cluster found for name” エラーを受け取ったら --region {cluster region} を上のコードブロックの {cluster region} に追加してください。

EKSクラスターにテストで接続してみましょう。Worker Nodeがリストで表示されます。

kubectl get nodes

EKS クラスター管理者用の AWS SSO ロールがネイティブの Kubernetes cluster-admin ロールにマッピングされました。eksctl の IAM アイデンティティマッピングを用いて、aws-auth ConfigMap に対して、 新しい AWS SSO アクセス権限セットにマッピングされた最小権限のロール(Kubernetes namespace レベルのスコープ) あるいは クラスター全体にまたがる clusterroles を追加で作成することが可能です。

結論

本ブログでは、組織と AWS SSO の設定する手順を説明してきました。EKS クラスター用の新しいアカウントに関連するユーザー・グループ・ロール (アクセス権限セットとも呼ばれる) を作成しました。また EKS クラスターを作成する特別なロールを作成し、AWS SSO ロールと Kubernetes ネイティブの RBAC cluster-admin ロールをマッピングしました。AWS SSO の設定を除いて、他の全てのタスクは AWS CLI を使うことで完了し、Infrastructure as Code なインフラの一例となりました。

関連するブログ・ドキュメント

翻訳はプロフェッショナルサービスの後藤が担当しました。原文はこちらです。