Autenticazione degli utenti per il cluster da un provider di identità OpenID Connect - Amazon EKS

Autenticazione degli utenti per il cluster da un provider di identità OpenID Connect

Amazon EKS supporta l'utilizzo di provider di identità OpenID Connect (OIDC) come metodo per autenticare gli utenti nel cluster. I provider di identità OIDC possono essere utilizzati con, o come alternativa a AWS Identity and Access Management (IAM). Per ulteriori informazioni sull'utilizzo di IAM, consultare Abilitazione dell'accesso a utenti e ruoli IAM al cluster. Dopo aver configurato l'autenticazione per il cluster, è possibile creare roles e clusterroles Kubernetes per assegnare autorizzazioni ai ruoli e quindi associare i ruoli alle identità utilizzando rolebindings e clusterrolebindings Kubernetes. Per ulteriori informazioni, consulta Utilizzo dell'autorizzazione RBAC nella documentazione di Kubernetes.

Considerazioni

  • È possibile associare un provider di identità OIDC al cluster.

  • Kubernetes non fornisce un provider di identità OIDC. È possibile utilizzare un provider di identità OIDC pubblico esistente oppure eseguire il proprio provider di identità. Per un elenco dei provider certificati, consultare OpenID Certification sul sito OpenID.

  • L'URL dell'emittente del provider di identità OIDC deve essere accessibile pubblicamente, in modo che Amazon EKS possa individuare le chiavi di firma. Amazon EKS non supporta i provider di identità OIDC con certificati autofirmati.

  • Non è possibile disabilitare l'Autenticatore IAM AWS nel cluster, perché sarà ancora necessario per unire i nodi a un cluster. Per ulteriori informazioni, consultare AWS Autenticatore IAM per Kubernetes su GitHub.

  • Diversamente da un utente di provider di identità, un cluster Amazon EKS deve ancora essere creato da un AWS utente IAM. Questo perché il creatore del cluster interagisce con le API Amazon EKS, piuttosto che con le API Kubernetes.

  • Gli utenti autenticati dal provider di identità OIDC sono elencati nel registro di controllo del cluster se i registri CloudWatch Logs sono attivati per il piano di controllo. Per ulteriori informazioni, consulta . Abilitazione e disabilitazione dei log del piano di controllo.

  • Non è possibile accedere alla AWS Management Console con un account di un provider OIDC. È possibile solo Visualizzazione dei nodi e Carichi di lavoro nella console accedendo al AWS Management Console con un account AWS Identity and Access Management.

Associazione di un provider di identità OIDC

Prima di associare un provider di identità OIDC al cluster, è necessario ottenere dal provider le seguenti informazioni:

  • URL dell'emittente – L'URL del provider di identità OIDC che consente al server API di individuare le chiavi di firma pubbliche per la verifica dei token. L'URL deve iniziare con https:// e deve corrispondere alla richiesta iss nei token ID OIDC del provider. In conformità con lo standard OIDC, i componenti del percorso sono consentiti, ma i parametri di query non lo sono. In genere l'URL è costituito solo da un nome host, come https://server.example.org o https://example.com. Questo URL dovrebbe puntare al livello sottostante .well-known/openid-configuration e dovrà essere accessibile pubblicamente tramite Internet.

  • ID client (noto anche come audience) – L'ID dell'applicazione client che effettua richieste di autenticazione al provider di identità OIDC.

È possibile associare un provider di identità utilizzando eksctl o il AWS Management Console.

eksctl

Associazione di un provider di identità OIDC al cluster utilizzando eksctl

  1. Crea un file denominato associate-identity-provider.yaml con i seguenti contenuti. Sostituire il <example values> (tra cui <>) con il proprio. I valori nella sezione identityProviders vengono ottenuti dal provider di identità OIDC. I valori sono obbligatori solo per il name, type, issuerUrl, e clientId impostazioni in identityProviders.

    --- 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>
    Importante

    Non specificare system:, o qualsiasi parte di quella stringa, per groupsPrefix o usernamePrefix.

  2. Creare il provider.

    eksctl associate identityprovider -f associate-identity-provider.yaml
  3. Per utilizzare kubectl per lavorare con il cluster e il provider di identità OIDC, vedere Utilizzo di kubectl nella documentazione Kubernetes.

AWS Management Console

Per associare un provider di identità OIDC al cluster utilizzando il comando AWS Management Console

  1. Aprire la console Amazon EKS all'indirizzo https://console.aws.amazon.com/eks/home#/clusters.

  2. Selezionare il cluster.

  3. Selezionare la scheda Configurazione e quindi selezionare la scheda Autenticazione.

  4. Nella pagina Provider di identità OIDC, selezionareAssocia provider di identità.

  5. Nella pagina Associate provider di identità OIDC, inserire o selezionare le seguenti opzioni e quindi selezionare Associa.

    • In Nome, inserire un nome univoco per il provider.

    • Per URL dell'emittente, inserire l'URL per il provider. Questo URL deve essere accessibile in Internet.

    • Per ID client, inserire l'ID client del provider di identità OIDC (noto anche come audience).

    • Per Richiesta Nome Utente, inserire la richiesta da utilizzare come nome utente.

    • Per Richiesta di Gruppi, inserire la richiesta da utilizzare come gruppo dell'utente.

    • (Opzionale) Selezionare Opzioni avanzate, inserire o selezionare le seguenti informazioni.

      • Prefisso Nome utente – inserire un prefisso da anteporre alle richieste del nome utente. Il prefisso viene anteposto alle richieste di nome utente per evitare conflitti con i nomi esistenti. Se non si fornisce un valore e il nome utente è un valore diverso da email, il prefisso viene impostato per impostazione predefinita sul valore per URL dell'emittente. È possibile utilizzare il valore - per disabilitare tutti i prefissi. Non specificare system: o qualsiasi parte di quella stringa.

      • Prefisso Gruppi – inserire un prefisso da anteporre alle richieste di gruppo. Il prefisso viene anteposto alle richieste di gruppo per evitare conflitti con i nomi esistenti (ad esempio system: groups). Ad esempio, il valore oidc: crea nomi di gruppo come oidc:engineering e oidc:infra. Non specificare system: o qualsiasi parte di quella stringa..

      • Richieste necessarie – Selezionare Aggiungi richiesta e inserire una o più coppie di valori chiave che descrivono le richieste necessarie nel token ID client. Le coppie descrivono le richieste necessarie nel Token ID. Se impostato, ogni richiesta viene verificata per essere presente nel token ID con un valore corrispondente.

  6. Per utilizzare kubectl per lavorare con il cluster e il provider di identità OIDC, vedere Utilizzo di kubectl nella documentazione Kubernetes.

Dissociazione di un provider di identità OIDC dal cluster

Se si dissocia un provider di identità OIDC dal cluster, gli utenti inclusi nel provider non potranno più accedere al cluster. Tuttavia, è comunque possibile accedere al cluster con AWS utenti IAM.

Per dissociare un provider di identità OIDC dal cluster utilizzando il comando AWS Management Console

  1. Aprire la console Amazon EKS all'indirizzo https://console.aws.amazon.com/eks/home#/clusters.

  2. Nella sezione Provider di identità OIDC, selezionare Dissocia, inserire il nome del provider di identità e quindi selezionare Disassociate.

Policy IAM di esempio

Se si desidera impedire che un provider di identità OIDC venga associato a un cluster, creare e associare le seguenti policy IAM agli account IAM degli amministratori Amazon EKS. Per ulteriori informazioni, consultare Creazione di policy IAM e Aggiunta autorizzazioni di identità IAM nella Guida per l'utente di IAM e Operazioni, risorse e chiavi di condizione per Amazon Elastic Kubernetes Service in Service Authorization Reference.

{ "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": "*" } ] }

La seguente policy di esempio consente l'associazione del provider di identità OIDC se il clientID è kubernetes e la issuerUrl è https://cognito-idp.us-west-2.amazonaws.com/*.

{ "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": "*" } ] }