Creazione di un ruolo e una policy IAM per l'account di servizio - Amazon EKS

Creazione di un ruolo e una policy IAM per l'account di servizio

È necessario creare una policy IAM che specifichi le autorizzazioni da associare ai container nei pod. Esistono diversi modi per creare una nuova policy di autorizzazione di IAM. È possibile copiare una policy gestita AWS completa che esegua già alcune delle operazioni necessarie e quindi personalizzarla in base ai requisiti specifici desiderati. Per ulteriori informazioni, consultare Creazione di una nuova policy nella Guida per l'utente IAM.

È inoltre necessario creare un ruolo IAM per gli account di servizio Kubernetes da utilizzare prima di associarlo a un account di servizio. L'ambito della relazione di trust fa riferimento al cluster e all'account di servizio, in modo che ogni combinazione di cluster e account di servizio richieda il proprio ruolo specifico. É possibile quindi allegare una specifica policy IAM che assegni le autorizzazioni desiderate ai container nei pod in uso. Nelle seguenti procedure viene descritto come procedere.

Creare una policy IAM

In questa procedura sono disponibili due policy di esempio che possono essere utilizzate per l’applicazione:

  • Una policy per consentire l'accesso in sola lettura a un bucket Amazon S3. È possibile archiviare le informazioni di configurazione o uno script di bootstrap in questo bucket; i container nel pod possono leggere il file dal bucket e caricarlo nell'applicazione.

  • Una policy per consentire l'uso di immagini container a pagamento da AWS Marketplace.

  1. Apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel pannello di navigazione, scegli Policies (Policy) e Create policy (Crea policy).

  3. Scegliere la scheda JSON.

  4. Nel campo Policy Document (Documento policy) incollare una delle seguenti policy da applicare agli account di servizio oppure incollare un documento di policy personalizzato nel campo. È anche possibile utilizzare l'editor visivo per creare una policy personalizzata.

    Nell'esempio seguente, viene assegnata l'autorizzazione per il bucket Amazon S3 my-pod-secrets-bucket. È possibile modificare il documento di policy in base alle proprie esigenze specifiche.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::my-pod-secrets-bucket/*" ] } ] }

    L'esempio seguente fornisce le autorizzazioni necessarie per utilizzare un'immagine container a pagamento da AWS Marketplace.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:RegisterUsage" ], "Effect": "Allow", "Resource": "*" } ] }
  5. Scegli Review policy (Rivedi policy).

  6. Immettere un nome e una descrizione per la policy e quindi scegliere Create policy (Crea policy).

  7. Registrare l'Amazon Resource Name (ARN) della policy da utilizzare in un secondo momento al momento della creazione del ruolo.

Creazione di un ruolo IAM per account di servizio

Creazione di un ruolo IAM per l'account di servizio Kubernetes. Per creare un ruolo, è possibile utilizzare eksctl, la AWS Management Console o la AWS CLI.

Prerequisiti

  • Utilizzo di un cluster esistente. Se non se ne possiede già uno, crearlo utilizzando una delle guide Guida introduttiva ad Amazon EKS.

  • Se si utilizza la AWS Management Console o la AWS CLI per creare il ruolo, è necessario disporre di un provider IAM OIDC esistente per il cluster. Per ulteriori informazioni, consulta Per creare un provider di identità IAM OIDC per il cluster.

  • Una policy IAM esistente che include le autorizzazioni per le risorse AWS alle quali l'account di servizio deve accedere. Per ulteriori informazioni, consulta . Creare una policy IAM.

È possibile creare il ruolo IAM coneksctl, la AWS Management Console, o la AWS CLI. Selezionare la scheda con il nome dello strumento che si desidera utilizzare per creare il ruolo.

eksctl

Creare l'account di servizio e il ruolo IAM con il comando seguente. Sostituire i example values con i valori in proprio possesso.

eksctl create iamserviceaccount \ --name kubernetes_service_account_name \ --namespace kubernetes_service_account_namespace \ --cluster my-cluster \ --attach-policy-arn IAM_policy_ARN \ --approve \ --override-existing-serviceaccounts

Viene implementato un modello AWS CloudFormation che crea un ruolo IAM e allega ad esso la policy IAM. Il ruolo viene associato a un account di servizio Kubernetes. Se il cluster non disponeva di un provider OIDC IAM esistente, ne viene creato uno. Se l'account di servizio non esiste, viene creato nello spazio dei nomi fornito. Se l'account del servizio esiste, viene annotato con eks.amazonaws.com/role-arn:arn:aws:iam::your-account-id:role/iam-role-name-that-was-created.

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

  2. Scegliere il nome del cluster e selezionare la scheda Configurazione.

  3. Nella sezione Dettagli, annotare il valore dell'URL del provider OpenID Connect.

  4. Apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  5. Nel riquadro di navigazione a sinistra seleziona Ruoli. Quindi seleziona Create role (Crea ruolo).

  6. Nella sezione Trusted entity type (Tpo di identità attendibile), scegli Web identity (Identità Web).

  7. Nella sezione Web identity (Identità Web):

    1. Per Identity provider (Provider di identità), scegliere l'URL del cluster.

    2. Per Audience (Pubblico), scegliere sts.amazonaws.com.

  8. Seleziona Next (Successivo).

  9. Nella casella Filter policies (Policy di filtro), inserisci il nome della policy IAM che dispone delle autorizzazioni che desideri che l'account del servizio utilizzi.

  10. Seleziona la casella di controllo a sinistra della policy che desideri utilizzare nei risultati della ricerca.

  11. Seleziona Next (Successivo).

  12. Per Nome ruolo, immettere un nome univoco per il ruolo, ad esempio myRole.

  13. Per Description (Descrizione), inserisci un testo descrittivo come Amazon EKS - Service account role.

  14. Scegliere Create role (Crea ruolo).

  15. Dopo aver creato il ruolo, scegliere il ruolo nella console per aprirlo per la modifica.

  16. Scegli la scheda Trust relationships (Relazioni di attendibilità), quindi scegli Edit trust policy (Modifica policy di attendibilità).

  17. Cercare il risultato finale simile al seguente:

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com"

    Modificare la riga in modo che sia simile alla riga seguente. Sostituisci EXAMPLED539D4633E53DE1B716D3041E con l'ID del provider OIDC del cluster e region-code con il codice della Regione AWS in cui si trova il cluster. Sostituisci aud con sub e KUBERNETES_SERVICE_ACCOUNT_NAMESPACE e KUBERNETES_SERVICE_ACCOUNT_NAME con il nome dell'account del servizio Kubernetes e lo spazio dei nomi Kubernetes in cui esiste l'account.

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:KUBERNETES_SERVICE_ACCOUNT_NAMESPACE:KUBERNETES_SERVICE_ACCOUNT_NAME"
    Nota

    Se non si dispone ancora di un account di servizio Kubernetes è necessario crearne uno. Per ulteriori informazioni, consultare Configurare gli account di servizio per i pod nella documentazione di Kubernetes. Affinché l'account del servizio sia in grado di utilizzare le autorizzazioni Kubernetes, è necessario creare un Role, oppure un ClusterRole e quindi associare il ruolo all'account del servizio. Per ulteriori informazioni, consulta Utilizzo dell'autorizzazione RBAC nella documentazione di Kubernetes. Quando il plug-in AWS CNI VPC è implementato, per esempio, il manifesto di implementazione crea un account di servizio, un ruolo del cluster e un'associazione del ruolo del cluster. É possibile visualizzare il manifesto su GitHub.

  18. Scegli Update policy (Aggiorna policy) per concludere.

AWS CLI
  1. Impostare l'ID account AWS su una variabile di ambiente con il comando seguente.

    ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
  2. Impostare il provider di identità OIDC su una variabile di ambiente con il comando seguente. Sostituire i example values con i valori in proprio possesso.

    Importante

    per ricevere l'output corretto da questo comando è necessario usare almeno la versione 1.22.30 o 2.4.9 di AWS CLI. Per ulteriori informazioni, consulta Installazione della AWS CLI nella Guida per l'utente di AWS Command Line Interface.

    OIDC_PROVIDER=$(aws eks describe-cluster --name cluster-name --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
  3. Copiare il seguente blocco di codice nel computer e sostituire i example values con i valori in proprio possesso.

    read -r -d '' TRUST_RELATIONSHIP <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:sub": "system:serviceaccount:my-namespace:my-service-account" } } } ] } EOF echo "${TRUST_RELATIONSHIP}" > trust.json
  4. Eseguire il blocco di codice modificato dal passaggio precedente per creare un file denominato trust.json.

  5. Per creare un ruolo, eseguire il comando AWS CLI seguente.

    aws iam create-role --role-name IAM_ROLE_NAME --assume-role-policy-document file://trust.json --description "IAM_ROLE_DESCRIPTION"
  6. Per collegare la policy IAM al ruolo, eseguire il comando seguente.

    aws iam attach-role-policy --role-name IAM_ROLE_NAME --policy-arn=IAM_POLICY_ARN