このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
外部 OIDC プロバイダーを使用して Kubernetes へのアクセスをユーザーに許可する
アマゾン EKS ではクラスターに対してユーザーを認証する方法として OpenID Connect (OIDC ID プロバイダーの使用がサポートされています。OIDC ID プロバイダーはAWS アイデンティティとアクセス管理 (IAM と併用、または代替として使用できます。IAM の使用の詳細については「IAM ユーザーおよびロールに Kubernetes APIs へのアクセスを付与する」を参照してください。クラスターに認証を設定した後、Kubernetes roles
および clusterroles
を作成してロールにアクセス許可を割り当て、それから Kubernetes rolebindings
および clusterrolebindings
を使用してアイデンティティにロールをバインドできます。詳細についてはKubernetes ドキュメントの「RBAC 認証の使用
-
クラスターには OIDC ID プロバイダーを 1 つ関連付けることができます。
-
Kubernetes は OIDC ID プロバイダーを提供しません。既存のパブリック OIDC ID プロバイダーを使用することも、独自の ID プロバイダーを実行することもできます。認定プロバイダーのリストについてはOpenID サイトの「OpenID 認証
」(OpenID 認定 参照してください。 -
アマゾン EKS が署名キーを検出できるように、OIDC ID プロバイダーの発行者 URL は公的にアクセス可能である必要があります。アマゾン EKS は自己署名証明書を持つ OIDC ID プロバイダーをサポートしていません
-
ノードをクラスターに結合する時に必要なため、クラスターへの IAM 認証を無効にすることはできません。
-
アマゾン EKS クラスターはOIDC ID プロバイダーユーザーではなく、AWS IAM プリンシパルが作成する必要があります。これはクラスター作成者が Kubernetes API ではなく アマゾン EKS API とやり取りしているためです。
-
コントロールプレーンで クラウドWatch ログが有効になっている場合、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 プロバイダーを関連付ける
-
以下の内容を含む
associate-identity-provider.yaml
という名前のファイルを作成します。値の例
は実際に使用する値に置き換えます。identityProviders
セクションの値はOIDC ID プロバイダーから取得します。値はidentityProviders
でのname
、type
、issuerUrl
、および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:
またはその文字列の一部でも指定しないでください。 -
プロバイダーを作成します。
eksctl associate identityprovider -f associate-identity-provider.yaml
-
kubectl
を使用してクラスターと OIDC ID プロバイダーを操作する方法についてはKubernetes ドキュメントの「kubectl の使用」を参照してください。
AWS コンソールを使用して ID プロバイダーを関連付ける
-
アマゾン EKS コンソール
を開きます。 -
クラスターを選択し、[アクセス] タブを選択してください。
-
[OIDC ID プロバイダー] セクションで、[ID プロバイダーを関連付ける] を選択してください。
-
[OIDC ID プロバイダーの関連付け] ページで、以下のオプションを入力または選択した上で、[関連付け] を選択してください。
-
[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 トークンに存在することが検証されます。
-
kubectl
を使用してクラスターと OIDC ID プロバイダーを操作する方法についてはKubernetes ドキュメントの「kubectl の使用」を参照してください。
-
-
-
IAM ポリシーの例
OIDC ID プロバイダーとクラスターの関連付けを防ぐには以下の IAM ポリシーを作成して、アマゾン 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": "*" } ] }
以下のポリシーの例ではclientID
が kubernetes
で、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": "*" } ] }
パートナー検証済み OIDC ID プロバイダー
アマゾン EKS は互換性のある OIDC ID プロバイダーのサポートを提供するパートナーネットワークと連携しています。ID プロバイダーと アマゾン EKS との統合の詳細については次のパートナーのドキュメントを参照してください。
パートナー | 製品 | ドキュメント |
---|---|---|
PingIdentity |
アマゾン EKS ではすべてのユースケースをカバーする幅広いオプションの提供を目指しています。ここに記載されていない、商用サポートされている OIDC 互換 ID プロバイダーを開発する場合は、詳細について、パートナー チーム aws-container-partners@amazon. com