Utilizzo gMSA per EC2 Linux contenitori su Amazon ECS - Amazon Elastic Container Service

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

Utilizzo gMSA per EC2 Linux contenitori su Amazon ECS

Amazon ECS supporta l'autenticazione Active Directory per contenitori Linux EC2 tramite un tipo speciale di account di servizio chiamato Account di servizio gestito di gruppo (gMSA).

Linux applicazioni di rete basate, come .NET Le applicazioni principali possono utilizzare Active Directory per facilitare l'autenticazione e la gestione delle autorizzazioni tra utenti e servizi. Puoi utilizzare questa funzionalità progettando applicazioni che si integrano con Active Directory e vengono eseguite su server aggiunti al dominio. Ma perché Linux i contenitori non possono essere aggiunti a un dominio, è necessario configurare un Linux contenitore con cui eseguire gMSA.

A Linux contenitore con cui funziona gMSA si basa sul credentials-fetcher demone che viene eseguito sull'istanza Amazon host del contenitore. EC2 Cioè, il demone recupera il gMSA credenziali dal controller di dominio Active Directory e quindi trasferisce queste credenziali all'istanza del contenitore. Per ulteriori informazioni sugli account di servizio, consulta Create gMSAs per contenitori Windows sul sito Web Microsoft Learn.

Considerazioni

Considera quanto segue prima dell'uso gMSA for Linux contenitori:

  • Se i tuoi contenitori funzionano EC2, puoi usare gMSA for Windows contenitori e Linux contenitori. Per informazioni su come usare gMSA per il contenitore Linux su Fargate, vedere. Utilizzo gMSA for Linux container su Fargate

  • Potresti aver bisogno di un Windows computer aggiunto al dominio per completare i prerequisiti. Ad esempio, potrebbe essere necessario un Windows computer che fa parte del dominio per creare il gMSA in Active Directory con PowerShell. La RSAT PowerShell Gli strumenti Active Director sono disponibili solo per Windows. Per ulteriori informazioni, vedere Installazione degli strumenti di amministrazione di Active Directory.

  • Hai scelto tra senza dominio gMSAe unendo ogni istanza a un singolo dominio. Utilizzando domainless gMSA, l'istanza del contenitore non è aggiunta al dominio, le altre applicazioni sull'istanza non possono utilizzare le credenziali per accedere al dominio e le attività che si uniscono a domini diversi possono essere eseguite sulla stessa istanza.

    Quindi, scegli l'archiviazione dei dati per CredSpec e, facoltativamente, per le credenziali utente di Active Directory per la modalità domainless gMSA.

    Amazon ECS utilizza un file di specifiche delle credenziali di Active Directory (CredSpec). Questo file contiene gMSA metadati utilizzati per propagare il gMSA contesto dell'account nel contenitore. Tu generi il CredSpec file e poi lo archivia in uno dei CredSpec opzioni di archiviazione nella tabella seguente, specifiche del sistema operativo delle istanze del contenitore. Per utilizzare il metodo senza dominio, è disponibile una sezione facoltativa in CredSpec il file può specificare le credenziali in uno dei domainless user credentialsopzioni di archiviazione nella tabella seguente, specifiche del sistema operativo delle istanze del contenitore.

    Posizione di archiviazione Linux Windows
    Amazon Simple Storage Service CredSpec CredSpec
    AWS Secrets Manager credenziali utente senza dominio credenziali utente senza dominio
    Amazon EC2 Systems Manager Parameter Store CredSpec CredSpec, credenziali utente senza dominio
    File locale N/D CredSpec

Prerequisiti

Prima di utilizzare il gMSA per la funzionalità dei contenitori Linux con Amazon ECS, assicurati di completare quanto segue:

  • Configura un dominio Active Directory con le risorse a cui desideri che i tuoi container accedano. Amazon ECS supporta le configurazioni seguenti:

    • Un AWS Directory Service Active Directory. AWS Directory Service è un Active Directory AWS gestito ospitato su Amazon EC2. Per ulteriori informazioni, vedere Guida introduttiva a AWS Managed Microsoft AD nella Guida all'AWS Directory Service amministrazione.

    • Una Active Directory on-premise. Devi assicurarti che l'istanza di container Linux di Amazon ECS possa essere aggiunta al dominio. Per ulteriori informazioni, consulta AWS Direct Connect.

  • Ne hai già uno gMSA account in Active Directory. Per ulteriori informazioni, consulta Utilizzo gMSA per EC2 Linux contenitori su Amazon ECS.

  • Hai installato e stai eseguendo il daemon credentials-fetcher su un'istanza di container Amazon ECS Linux. Inoltre, hai aggiunto un set iniziale di credenziali al daemon credentials-fetcher per l'autenticazione con Active Directory.

    Nota

    Il daemon credentials-fetcher è disponibile solo per Amazon Linux 2023 e Fedora 37 e versioni successive. Il daemon non è disponibile per Amazon Linux 2. Per ulteriori informazioni, consulta aws/credentials-fetcher on. GitHub

  • Configuri le credenziali per l'autenticazione del daemon credentials-fetcher con Active Directory. Le credenziali devono essere un membro del gruppo di sicurezza di Active Directory che ha accesso a gMSA account. Sono disponibili diverse opzioni in Decidi se vuoi aggiungere le istanze al dominio o usare domainless gMSA..

  • Hai aggiunto le autorizzazioni IAM richieste. Le autorizzazioni richieste dipendono dai metodi scelti per le credenziali iniziali e per l'archiviazione della specifica delle credenziali:

    • Se usi domainless gMSAper le credenziali iniziali, AWS Secrets Manager sono richieste le autorizzazioni IAM per il ruolo di esecuzione dell'attività.

    • Se memorizzi la specifica delle credenziali in SSM Parameter Store, le autorizzazioni IAM per Amazon EC2 Systems Manager Parameter Store sono necessarie per il ruolo di esecuzione dell'attività.

    • Se archivi la specifica delle credenziali in Amazon S3, le autorizzazioni IAM per Amazon Simple Storage Service sono necessarie per il ruolo di esecuzione delle attività.

Configurazione gMSA-capace Linux Contenitori su Amazon ECS

Preparazione dell'infrastruttura

I passaggi seguenti sono considerazioni e configurazioni che vengono eseguite una sola volta. Dopo aver completato questi passaggi, puoi automatizzare la creazione delle istanze di container per riutilizzare questa configurazione.

Decidi come fornire le credenziali iniziali e configura i dati EC2 utente in un modello di EC2 avvio riutilizzabile per installare il demone. credentials-fetcher

  1. Decidi se vuoi aggiungere le istanze al dominio o usare domainless gMSA.
    • Unisci EC2 le istanze al dominio Active Directory

      • Aggiunta delle istanze in base ai dati dell'utente

        Aggiungi i passaggi per aggiungere il dominio Active Directory ai dati EC2 utente in un modello di EC2 avvio. Più gruppi di Amazon EC2 Auto Scaling possono utilizzare lo stesso modello di lancio.

        Puoi utilizzare questi passaggi Unendoti a un Active Directory o FreeIPA dominio in Fedora Docs.

    • Crea un utente Active Directory senza dominio gMSA

      Il credentials-fetcher demone ha una funzionalità chiamata domainless gMSA. Questa funzionalità richiede un dominio, ma non è necessario aggiungere l' EC2istanza al dominio. Utilizzando domainless gMSA, l'istanza del contenitore non è aggiunta al dominio, le altre applicazioni sull'istanza non possono utilizzare le credenziali per accedere al dominio e le attività che si uniscono a domini diversi possono essere eseguite sulla stessa istanza. Invece, fornisci il nome di un segreto nel AWS Secrets Manager CredSpec file. Il segreto deve contenere un nome utente, una password e un dominio a cui accedere.

      Questa funzionalità è supportata e può essere utilizzata con container Linux e Windows.

      Questa funzionalità è simile alla gMSA support for non-domain-joined container hostscaratteristica. Per ulteriori informazioni sulla funzionalità di Windows, vedere gMSA architettura e miglioramenti sul sito Web Microsoft Learn.

      1. Crea un utente nel dominio di Active Directory. L'utente in Active Directory deve disporre dell'autorizzazione per accedere a gMSA account di servizio utilizzati nelle attività.

      2. Crea un account segreto AWS Secrets Manager, dopo aver creato l'utente in Active Directory. Per ulteriori informazioni, consulta Creare un AWS Secrets Manager segreto.

      3. Inserisci il nome utente, la password e il dominio dell'utente nelle coppie chiave-valore JSON denominate rispettivamente username, password e domainName.

        {"username":"username","password":"passw0rd", "domainName":"example.com"}
      4. Aggiungere la configurazione al CredSpec file per l'account del servizio. Il HostAccountConfig aggiuntivo contiene il nome della risorsa Amazon (ARN) del segreto in Secrets Manager.

        In Windows, PluginGUID deve corrispondere al GUID nel seguente frammento di codice esemplificativo. In Linux, PluginGUID viene ignorato. Sostituisci MySecret con l'esempio del nome della risorsa Amazon (ARN) del segreto.

        "ActiveDirectoryConfig": { "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": { "CredentialArn": "arn:aws:secretsmanager:aws-region:111122223333:secret:MySecret" } }
      5. Il senza dominio gMSAla funzionalità richiede autorizzazioni aggiuntive nel ruolo di esecuzione dell'attività. Segui il passaggio (Facoltativo) senza dominio gMSA Secret.

  2. Configurazione delle istanze e installazione del daemon credentials-fetcher

    Puoi installare il credentials-fetcher demone con uno script di dati utente nel tuo EC2 Launch Template. Gli esempi seguenti mostrano due tipi di dati utente, cloud-config YAML oppure bash sceneggiatura. Questi esempi sono per Amazon Linux 2023 (AL2023). Sostituisci MyCluster con il nome del cluster Amazon ECS a cui desideri che si aggiungano queste istanze.

    • cloud-config YAML
      Content-Type: text/cloud-config package_reboot_if_required: true packages: # prerequisites - dotnet - realmd - oddjob - oddjob-mkhomedir - sssd - adcli - krb5-workstation - samba-common-tools # https://github.com/aws/credentials-fetcher gMSA credentials management for containers - credentials-fetcher write_files: # configure the ECS Agent to join your cluster. # replace MyCluster with the name of your cluster. - path: /etc/ecs/ecs.config owner: root:root permissions: '0644' content: | ECS_CLUSTER=MyCluster ECS_GMSA_SUPPORTED=true runcmd: # start the credentials-fetcher daemon and if it succeeded, make it start after every reboot - "systemctl start credentials-fetcher" - "systemctl is-active credentials-fetcher && systemctl enable credentials-fetcher"
    • bash script

      Se ti senti più a tuo agio con bash gli script e hanno più variabili su cui scrivere/etc/ecs/ecs.config, usa il seguente heredoc formato. Questo formato scrive tutti gli elementi nel file di configurazione, inserendoli tra le righe cat ed EOF.

      #!/usr/bin/env bash set -euxo pipefail # prerequisites timeout 30 dnf install -y dotnet realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation samba-common-tools # install https://github.com/aws/credentials-fetcher gMSA credentials management for containers timeout 30 dnf install -y credentials-fetcher # start credentials-fetcher systemctl start credentials-fetcher systemctl is-active credentials-fetcher && systemctl enable credentials-fetcher cat <<'EOF' >> /etc/ecs/ecs.config ECS_CLUSTER=MyCluster ECS_GMSA_SUPPORTED=true EOF

    Esistono variabili di configurazione opzionali per il daemon credentials-fetcher che puoi impostare in /etc/ecs/ecs.config. Consigliamo di impostare le variabili nei dati utente nel blocco YAML o heredoc in modo simile agli esempi precedenti. In questo modo si evitano problemi di configurazione parziale che possono verificarsi quando si modifica un file più volte. Per ulteriori informazioni sulla configurazione dell'agente ECS, consulta Amazon ECS Container Agent on. GitHub

    • Facoltativamente, puoi utilizzare la variabile CREDENTIALS_FETCHER_HOST se modifichi la configurazione del daemon credentials-fetcher per spostare il socket in un'altra posizione.

Configurazione di autorizzazioni e segreti

Esegui i passaggi seguenti una volta per ogni applicazione e ogni definizione dell'attività. Consigliamo di utilizzare la best practice di concedere il privilegio minimo e limitare le autorizzazioni utilizzate nella policy. In questo modo, ogni attività può leggere solo i segreti di cui ha bisogno.

  1. (Facoltativo) senza dominio gMSA Secret

    Se utilizzi il metodo senza dominio in cui l'istanza non è aggiunta al dominio, segui questo passaggio.

    Inoltre, devi aggiungere le autorizzazioni seguenti come policy inline al ruolo di esecuzione dell'attività del ruolo IAM. In questo modo il daemon credentials-fetcher accede al segreto di Secrets Manager. Sostituisci l'esempio MySecret con il nome della risorsa Amazon (ARN) del segreto nell'elenco Resource.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:ssm:aws-region:111122223333:secret:MySecret" ] } ] }
    Nota

    Se utilizzi la tua chiave KMS per crittografare il tuo segreto, devi aggiungere le autorizzazioni necessarie a questo ruolo e aggiungere questo ruolo alla politica delle chiavi. AWS KMS

  2. Decidi se utilizzare SSM Parameter Store o S3 per archiviare il CredSpec

    Amazon ECS supporta i seguenti modi per fare riferimento al percorso del file nel campo credentialSpecs di una definizione di attività.

    Se unisci le istanze a un singolo dominio, utilizza il prefisso credentialspec: all'inizio dell'ARN nella stringa. Se usi domainless gMSA, quindi usa. credentialspecdomainless:

    Per ulteriori informazioni su CredSpec, consulta File di specifica delle credenziali.

    • Bucket Amazon S3

      Aggiungi le specifiche delle credenziali a un bucket Amazon S3. Quindi, fai riferimento al nome della risorsa Amazon (ARN) del bucket Amazon S3 nel campo credentialSpecs della definizione di attività.

      { "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:s3:::${BucketName}/${ObjectName}" ], ... } ], ... }

      Devi aggiungere le seguenti autorizzazioni come policy inline al ruolo IAM di esecuzione delle attività Amazon ECS per consentire alle attività l'accesso al bucket Amazon S3.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/{object}" ] } ] }
    • Parametro dell'archivio parametri di SSM

      Aggiungi la specifica delle credenziali a un parametro SSM Parameter Store. Quindi, fai riferimento al nome della risorsa Amazon (ARN) del parametro SSM Parameter Store nel campo credentialSpecs della definizione delle attività.

      { "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:ssm:aws-region:111122223333:parameter/parameter_name" ], ... } ], ... }

      Aggiungi le seguenti autorizzazioni come policy inline al ruolo IAM di esecuzione delle attività Amazon ECS per consentire alle attività l'accesso al parametro SSM Parameter Store.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": [ "arn:aws:ssm:aws-region:111122223333:parameter/parameter_name" ] } ] }

File di specifica delle credenziali

Amazon ECS utilizza un file di specifiche delle credenziali di Active Directory (CredSpec). Questo file contiene gMSA metadati utilizzati per propagare il gMSA contesto dell'account al Linux contenitore. Tu generi il CredSpec e fate riferimento ad esso nel credentialSpecs campo della definizione dell'attività. Il CredSpec il file non contiene segreti.

Di seguito è riportato un esempio CredSpec file.

{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-2554468230-2647958158-2204241789", "MachineAccountName": "WebApp01", "Guid": "8665abd4-e947-4dd0-9a51-f8254943c90b", "DnsTreeName": "example.com", "DnsName": "example.com", "NetBiosName": "example" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "example.com" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": { "CredentialArn": "arn:aws:secretsmanager:aws-region:111122223333:secret:MySecret" } } } }
Creare un CredSpec

Crei un CredSpec utilizzando il CredSpec PowerShell modulo su a Windows computer che fa parte del dominio. Segui la procedura descritta in Creare una specifica di credenziali sul Microsoft Scopri il sito web.