スキップしてコンテンツを表示

Amazon EKS クラスターにアクセスするように SSO ユーザーを設定する方法を教えてください。

所要時間3分
0

Amazon Elastic Kubernetes Service (Amazon EKS) クラスターにアクセスするように AWS IAM アイデンティティセンターユーザーを設定したいと考えています。

解決策

前提条件

  • IAM アイデンティティセンターをオンにして設定していること
  • SSO ユーザーが、EKS クラスターを含む AWS アカウントに関連付けられていること
  • EKS クラスターが Access Entries (プラットフォームバージョン eks.2 以降) をサポートしていること

Amazon EKS クラスターにアクセスするように SSO ユーザーを設定するには、次の手順を実行します。

SSO 認証用に AWS CLI を設定する

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

SSO 認証を使用するように AWS CLI を設定し、SSO ユーザーが認証して AWS Identity and Access Management (IAM) ロールを引き受けることができるようにします。

IAM アイデンティティセンターで AWS CLI を設定する方法について詳しくは、「Integrating AWS CLI with IAM Identity Center」(AWS CLI と IAM アイデンティティセンターの統合) を参照してください。

SSO プロファイルを使用するように kubectl を設定する

SSO プロファイルを使用するように kubectl を設定するには、次の update-kubeconfig AWS CLI コマンドを実行します。

aws eks update-kubeconfig --name your-cluster-name --profile your-sso-profile

注: your-cluster-name を EKS クラスター名に置き換えてください。your-sso-profile を、SSO プロファイル名に置き換えてください。

クラスター認証モードを確認する

クラスター認証モードを確認するには、次の describe-cluster AWS CLI コマンドを実行します。

aws eks describe-cluster --name your-cluster-name --query "cluster.accessConfig.authenticationMode" --profile your-sso-profile

注: your-cluster-name を EKS クラスター名に置き換えてください。your-sso-profile を、SSO プロファイル名に置き換えてください。

出力に API または API_AND_CONFIG_MAP と表示される場合は、Access Entries が有効になっています。出力に CONFIG_MAP と表示される場合、使用できるのは aws-auth ConfigMap 方式だけです。

Access Entries を使用してアクセスを設定する

次のアクセス許可レベルのいずれかを選択します。

クラスター全体の管理者アクセス許可を付与する

次の手順を実行します。

  1. Amazon EKS コンソールを開きます。
  2. ナビゲーションペインで [クラスター] を選択します。
  3. 実際のクラスターを選択します。
  4. [アクセス] タブを選択します。
  5. [アクセスエントリ] セクションで、[アクセスエントリの作成] を選択します。
  6. [IAM プリンシパル ARN] には、パスコンポーネントを含まない実際の SSO ロール ARN を入力します。
  7. [タイプ] で [標準] を選択します。
  8. [次へ] を選択します。
  9. [ポリシー名] で [AmazonEKSClusterAdminPolicy] を選択します。
  10. [アクセススコープ] で [クラスター] を選択します。
  11. [次へ] を選択し、[作成] を選択します。

名前空間固有のアクセス許可を付与する

次の手順を実行します。

  1. Amazon EKS コンソールを開きます。
  2. ナビゲーションペインで [クラスター] を選択します。
  3. 実際のクラスターを選択します。
  4. [アクセス] タブを選択します。
  5. [アクセスエントリ] セクションで、[アクセスエントリの作成] を選択します。
  6. [IAM プリンシパル ARN] には、パスコンポーネントを含まない実際の SSO ロール ARN を入力します。
  7. [タイプ] で [標準] を選択します。
  8. [次へ] を選択します。
  9. [ポリシー名] には、要件に基づいて [AmazonEKSAdminViewPolicy] または [AmazonEKSEditPolicy] を選択します。
  10. [アクセススコープ] で [名前空間] を選択します。
  11. [名前空間] に、名前空間の名前を入力します。
  12. [次へ] を選択し、[作成] を選択します。

アクセスエントリについて詳しくは、「EKS アクセスエントリを使用して Kubernetes へのアクセスを IAM ユーザーに許可する」を参照してください。

aws-auth ConfigMap を使用してアクセスを設定する

重要: IAM アイデンティティセンターで aws-auth を使用する場合は、パスコンポーネントを含まない IAM ロール ARN を使用してください。例えば、ロール ARN が arn:aws:iam::123456789012:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_AdministratorAccess_1234567890abcdef の場合、パスを削除して arn:aws:iam::123456789012:role/AWSReservedSSO_AdministratorAccess_1234567890abcdef を使用してください。

クラスターが Access Entries をサポートしていない場合、または aws-auth ConfigMap 方式を使用したい場合は、次の手順を実行してください。

クラスター全体の管理者アクセス許可を付与する

次の設定で YAML ファイルを作成します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: arn:aws:iam::123456789012:role/AWSReservedSSO_AdministratorAccess_1234567890abcdef
      username: sso-admin-user
      groups:
        - system:masters

注: rolearn の値を、パスコンポーネントを含まない実際の SSO ロール ARN に置き換えます。sso-admin-user を実際のユーザー名に置き換えます。

設定を適用します。

kubectl apply -f aws-auth-configmap.yaml

名前空間固有のアクセス許可を付与する

名前空間固有のアクセス用にロールとロールバインディングを作成します。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: sso-user-role
  namespace: your-namespace
rules:
- apiGroups: [""]
  resources: ["pods", "services", "configmaps"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: sso-user-rolebinding
  namespace: your-namespace
subjects:
- kind: User
  name: sso-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: sso-user-role
  apiGroup: rbac.authorization.k8s.io

注: your-namespace を実際の名前空間名に置き換えてください。sso-user を aws-auth ConfigMap で指定したユーザー名に置き換えてください。

設定を適用します。

kubectl apply -f role-rolebinding.yaml

aws-auth ConfigMap を更新して SSO ロールをユーザー名にマッピングします。

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: arn:aws:iam::123456789012:role/AWSReservedSSO_AdministratorAccess_1234567890abcdef
      username: sso-user

注: rolearn の値を、パスコンポーネントを含まない実際の SSO ロール ARN に置き換えます。

設定を適用します。

kubectl apply -f aws-auth-configmap.yaml

aws-auth ConfigMap について詳しくは、「ConfigMap を使用して IAM ユーザーに Kubernetes へのアクセスを許可する」を参照してください。

アクセスを確認する

SSO ユーザーがクラスターにアクセスできることを確認するには、次のコマンドを実行します。

kubectl get nodes

コマンドがノードのリストを返す場合、SSO ユーザーはクラスターへの認証に成功しています。

関連情報

Cluster access management (クラスターアクセス管理)

AWS公式更新しました 9ヶ月前