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

View a markdown version of this page

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

Contribuisci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina su che si trova nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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. I provider di identità OIDC possono essere utilizzati con o in alternativa all' 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.

  • 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 registro di controllo del cluster se CloudWatch i log 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 Console di gestione AWS con un account di un provider OIDC. Puoi accedere solo Console di gestione AWS con un account Visualizza le risorse Kubernetes nel Console di gestione AWS di gestione delle AWS identità e degli accessi.

Il numero di provider di identità OIDC che puoi associare a un cluster dipende dalla versione Kubernetes del cluster. Sui cluster che eseguono Kubernetes versione 1.32 o successiva, puoi associare fino a 10 provider di identità OIDC. La dimensione combinata di tutte le configurazioni dei provider OIDC deve essere inferiore a 12 KB. Nei cluster che eseguono una versione precedente alla 1.32, è possibile associare un solo provider di identità OIDC.

  • L'URL (issuerUrl) e il nome (name) dell'emittente devono essere univoci per tutti i provider di identità OIDC associati al cluster. Non puoi associare lo stesso provider più di una volta.

  • L'associazione di un provider di identità OIDC è un aggiornamento del cluster. Il cluster entra nello UPDATING stato e la modifica può richiedere diversi minuti per essere applicata completamente ai server API del cluster. È possibile tenere traccia dello stato di avanzamento dell'aggiornamento con l'DescribeUpdateoperazione.

Nota

Il piano di controllo recupera le chiavi di firma del provider dall'URL dell'emittente, pertanto l'emittente deve essere raggiungibile dal piano di controllo. Se il cluster utilizza il piano di controllo egress (controlPlaneEgressMode=CUSTOMER_ROUTED) indirizzato dal cliente, assicurati che l'endpoint dell'emittente sia raggiungibile tramite il percorso di uscita configurato nel tuo VPC. Per ulteriori informazioni, consulta Configurazione del routing in uscita dal piano di controllo.

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. L'URL dell'emittente deve essere univoco per tutti i provider di identità OIDC associati al cluster.

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

Associa un provider di identità utilizzando il AWS Console

  1. Aprire la Console Amazon EKS.

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

  3. Nella sezione Provider di identità OIDC, seleziona Associate Identity Provider.

  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. Puoi 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 attestazioni di gruppo per evitare conflitti con 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.

Procedure consigliate per più provider di identità

Usa nome utente e prefissi di gruppo: imposta un prefisso nome utente (usernamePrefix) e un prefisso di gruppo (groupsPrefix) per ogni provider di identità OIDC per ridurre la possibilità che le identità di diversi provider si sovrappongano. Se non utilizzi i prefissi, utilizza le dichiarazioni relative al nome utente e ai gruppi che sono uniche per ogni provider. Entrambi gli approcci assicurano che due provider non possano produrre lo stesso nome utente o gruppo Kubernetes.

Convalida le dichiarazioni dei token: utilizza required claims (requiredClaims) per specificare le coppie chiave-valore che devono essere presenti nel token ID, in modo che il cluster accetti solo i token che autorizzi.

Limita le attestazioni in ogni token: configura il tuo provider di identità in modo che emetta token solo con le attestazioni necessarie al tuo cluster. La limitazione delle attestazioni riduce le informazioni esposte se un token viene compromesso.

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