外部 OIDC プロバイダーを使用して Kubernetes へのアクセスをユーザーに許可する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

外部 OIDC プロバイダーを使用して Kubernetes へのアクセスをユーザーに許可する

Amazon EKS では、クラスターに対してユーザーを認証する方法として OpenID Connect (OIDC) ID プロバイダーがサポートされます。OIDC ID プロバイダーはAWS アイデンティティとアクセス管理 (IAM) と併用、または代替として使用できます。IAM の使用の詳細については、「IAM ユーザーおよびロールに Kubernetes API へのアクセスを付与する」を参照してください。クラスターに認証を設定した後は、Kubernetes roles および clusterroles を作成しロールにアクセス許可を割り当て、さらに、このロールを Kubernetes rolebindings およびclusterrolebindings を使用する ID にバインドできます。詳細についてはKubernetes ドキュメントの「RBAC 認可を使用する」を参照してください。

  • クラスターには OIDC ID プロバイダーを 1 つ関連付けることができます。

  • Kubernetes は OIDC ID プロバイダーを提供しません。既存のパブリック OIDC ID プロバイダーを使用することも、独自の ID プロバイダーを実行することもできます。認定プロバイダーのリストについては、OpenID サイトの「OpenID Certification」(OpenID 認定) を参照してください。

  • Amazon EKS が署名キーを検出できるように、OIDC ID プロバイダーの発行者 URL は公的にアクセス可能である必要があります。Amazon EKS は、自己署名証明書を持つ OIDC ID プロバイダーをサポートしていません。

  • ノードをクラスターに結合する時に必要なため、クラスターへの IAM 認証を無効にすることはできません。

  • Amazon EKS クラスターは、OIDC ID プロバイダーユーザーではなく、AWS IAM プリンシパルが作成する必要があります。これは、クラスター作成者が Kubernetes API ではなく Amazon EKS API と対話するためです。

  • コントロールプレーンで CloudWatch ログが有効になっている場合、OIDC ID プロバイダー認証ユーザーは、クラスターの監査ログに一覧表示されます。詳細については「コントロールプレーンログを有効または無効にする」を参照してください。

  • OIDC プロバイダーのアカウントで AWS Management Consoleにサインインすることはできません。AWS アイデンティティとアクセス管理 アカウントで AWS Management Consoleにサインインした場合にのみ、AWS Management Console に Kubernetes リソースを表示する が可能となります。

OIDC ID プロバイダーを関連付ける

OIDC ID プロバイダーをクラスターに関連付けるには、プロバイダーから以下の情報が必要です。

発行者 URL

API サーバーがトークン検証のために公開署名キーを検出できるようにする OIDC ID プロバイダーの URL。URL は https:// で始まり、プロバイダーの OIDC ID トークンで iss クレームに対応している必要があります。OIDC 標準に従って、パスコンポーネントは許可されますが、クエリパラメータは許可されません。通常 URL は https://server.example.org または https://example.com のように、ホスト名のみで構成されます。この URL は以下 .well-known/openid-configuration のレベルを指し、インターネット経由で公的にアクセス可能である必要があります。

クライアント ID (オーディエンスとも呼ばれる)

OIDC ID プロバイダーに認証リクエストを行うクライアントアプリケーションの ID。

eksctl または AWS Management Console を使用して、ID プロバイダーを関連付けることができます。

eksctl を使用して ID プロバイダーを関連付ける

  1. 以下の内容を含む associate-identity-provider.yaml という名前のファイルを作成します。example values は実際に使用する値に置き換えます。identityProviders セクションの値は、OIDC ID プロバイダーから取得します。値はidentityProviders での nametypeissuerUrl、および clientId の設定のみで必要です。

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: your-region-code identityProviders: - name: my-provider type: oidc issuerUrl: https://example.com clientId: kubernetes usernameClaim: email usernamePrefix: my-username-prefix groupsClaim: my-claim groupsPrefix: my-groups-prefix requiredClaims: string: string tags: env: dev
    重要

    groupsPrefix または usernamePrefix に対してはsystem: またはその文字列の一部でも指定しないでください。

  2. プロバイダーを作成します。

    eksctl associate identityprovider -f associate-identity-provider.yaml
  3. kubectl を使用してクラスターと OIDC ID プロバイダーを操作する方法については、Kubernetes ドキュメントの「kubectl の使用」を参照してください。

AWS コンソールを使用して ID プロバイダーを関連付ける

  1. Amazon EKS コンソールを開きます。

  2. クラスターを選択し、[アクセス] タブを選択してください。

  3. [OIDC ID プロバイダー] セクションで、[ID プロバイダーを関連付け] を選択します。

  4. [Associate OIDC Identity Provider] (OIDC ID プロバイダーの関連付け) ページで、以下のオプションを入力または選択した上で、[Associate] (関連付け) を選択します。

    • [Name] (名前) に、プロバイダーの一意の名前を入力します。

    • [Issuer URL] (発行者 URL) に、プロバイダーの URL を入力してください。この URL はインターネットからアクセス可能である必要があります。

    • [クライアント ID] に、OIDC ID プロバイダーのクライアント ID (別名、対象者) を入力します。

    • [Username claim] (ユーザー名のクレーム) に、ユーザー名として使用するクレームを入力してください。

    • [Groups claim] (グループクレーム) に、ユーザーのグループとして使用するクレームを入力します。

    • (オプション) [Advanced options] (詳細オプション) で、以下の情報を入力または選択してください。

      • [Username prefix] (ユーザー名のプレフィックス)– ユーザー名クレームの前に付加するプレフィックスを入力してください。プレフィックスは既存の名前との衝突を防ぐために、ユーザー名クレームの前に付加されます。値を入力せず、ユーザーネームが email 以外の場合、プレフィックスはデフォルトで [Issuer URL] (発行者 URL) の値になります。値に - を使用すると、すべてのプレフィックスを無効にできます system: またはその文字列の一部でも指定しないでください。

      • [Groups prefix] (グループプレフィックス) – グループクレームの前に付加するプレフィックスを入力してください。プレフィックスは system: groups など既存の名前との衝突を防ぐために、グループクレームの前に付加されます。例えば、値 oidc:oidc:engineering および oidc:infra などのグループ名を作成します。system: またはその文字列の一部でも指定しないでください。

      • [Required claims] (必要なクレーム) – [Add claim] (クレームを追加) 選択し、クライアント ID トークンに必要なクレームを記述する、キーと値のペアを 1 つ以上入力してください。ペアはID トークンで必要なクレームを記述します。設定されている場合、各クレームは一致する値を持つ ID トークンに存在することが検証されます。

        1. kubectl を使用してクラスターと OIDC ID プロバイダーを操作する方法については、Kubernetes ドキュメントの「kubectl の使用」を参照してください。

IAM ポリシーの例

OIDC ID プロバイダーとクラスターの関連付けを防ぐには、以下の IAM ポリシーを作成して、Amazon EKS 管理者の IAM アカウントに関連付けます。詳細については「IAM ユーザーガイド」の「IAM ポリシーを作成する」と「IAM ID アクセス許可の追加」、および「サービス認証リファレンス」の「Actions」に関するページを参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "denyOIDC", "Effect": "Deny", "Action": [ "eks:AssociateIdentityProviderConfig" ], "Resource": "arn:aws:eks:us-west-2.amazonaws.com:111122223333:cluster/*" }, { "Sid": "eksAdmin", "Effect": "Allow", "Action": [ "eks:*" ], "Resource": "*" } ] }

以下のポリシーの例では、clientIDkubernetes で、issuerUrl https://cognito-idp.us-west-2amazonaws.com/* の場合、OIDC ID プロバイダーの関連付けを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCognitoOnly", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance", "Condition": { "StringNotLikeIfExists": { "eks:issuerUrl": "https://cognito-idp.us-west-2.amazonaws.com/*" } } }, { "Sid": "DenyOtherClients", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance", "Condition": { "StringNotEquals": { "eks:clientId": "kubernetes" } } }, { "Sid": "AllowOthers", "Effect": "Allow", "Action": "eks:*", "Resource": "*" } ] }