Concedere agli utenti l’accesso a Kubernetes con un provider OIDC esterno - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Concedere agli utenti l’accesso a Kubernetes con un provider OIDC esterno

Amazon EKS supporta l’utilizzo di provider di identità OpenID Connect (OIDC) come metodo per autenticare gli utenti nel cluster. È possibile utilizzare i provider di identità digitale OIDC con, o in alternativa a, AWS Identity and Access Management (IAM). Per ulteriori informazioni sull’utilizzo di IAM, consultare Concedere agli utenti e ai ruoli IAM l’accesso alle API Kubernetes. 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 Using RBAC Authorization nella documentazione di Kubernetes.

  • È 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.

  • Puoi disabilitare l’autenticazione IAM nel cluster, perché sarà ancora necessaria per aggiungere i nodi a un cluster.

  • Diversamente da un utente di provider di identità, un cluster Amazon EKS deve ancora essere creato da un principale IAM AWS. 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 log di controllo del cluster se i log CloudWatch Logs sono attivati per il piano di controllo. Per ulteriori informazioni, consulta Abilitare o disabilitare i log del piano di controllo (control-plane).

  • Non puoi accedere alla Console di gestione AWS con un account di un provider OIDC. Puoi solo Visualizzazione delle risorse Kubernetes in Console di gestione AWS accedendo a Console di gestione AWS 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 pubblico)

L’ID per l’applicazione client che effettua richieste di autenticazione al provider di identità OIDC.

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

Associazione di un provider di identità usando eksctl

  1. Creare un file denominato associate-identity-provider.yaml con i seguenti contenuti. Sostituire i valori di esempio con i propri valori. 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, consulta Using kubectl nella documentazione di Kubernetes.

Associare un provider di identità utilizzando la console AWS

  1. Aprire la Console Amazon EKS.

  2. Seleziona il cluster, poi seleziona la scheda Accesso.

  3. Nella sezione Provider di identità OIDC, selezionare* Associa provider di identità*.

  4. 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.

        1. Per utilizzare kubectl per lavorare con il cluster e il provider di identità OIDC, consulta Using kubectl nella documentazione di Kubernetes.

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, consulta Creating IAM policies e Adding IAM identity permissions nella Guida per l’utente IAM e nelle Actions 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-2amazonaws.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": "*" } ] }