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 funzionanoEC2, 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 aggiunto al 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 specifica 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 domainless, è 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 AmazonECS, 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 seguenti configurazioni:

    • Un AWS Directory Service Active Directory. AWS Directory Service è un Active Directory AWS gestito ospitato su AmazonEC2. 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 del contenitore Amazon ECS Linux possa entrare a far parte del 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 credentials-fetcher daemon 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 IAM autorizzazioni 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 necessarie IAM le autorizzazioni per il ruolo di esecuzione dell'attività.

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

    • Se memorizzi le specifiche delle credenziali in Amazon S3IAM, sono necessarie le autorizzazioni per Amazon Simple Storage Service per il ruolo di esecuzione dell'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 credentials-fetcher demone.

  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. Al contrario, 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 in coppie JSON chiave-valore denominate usernamedomainName, password rispettivamente.

        {"username":"username","password":"passw0rd", "domainName":"example.com"}
      4. Aggiungi la configurazione al CredSpec file per l'account del servizio. L'elemento aggiuntivo HostAccountConfig contiene l'Amazon Resource Name (ARN) del segreto in Secrets Manager.

        In Windows, PluginGUID deve corrispondere allo snippet riportato GUID nell'esempio seguente. In Linux, PluginGUID viene ignorato. Sostituiscilo MySecret con un esempio con l'Amazon Resource Name (ARN) del tuo 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 si riferiscono ad Amazon Linux 2023 (AL2023). Sostituisci MyCluster con il nome del ECS cluster Amazon a cui desideri che queste istanze si uniscano.

    • 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-fetch && 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-fetch && 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. Ti consigliamo di impostare le variabili nei dati utente nel YAML blocco o in heredoc 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'ECSagente, 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.

    È necessario aggiungere le seguenti autorizzazioni come politica in linea al ruolo di esecuzione dell'attività. IAM In questo modo il daemon credentials-fetcher accede al segreto di Secrets Manager. Sostituisci l'MySecretesempio con l'Amazon Resource Name (ARN) del tuo segreto nell'Resourceelenco.

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

    Se usi la tua KMS chiave per crittografare il tuo segreto, devi aggiungere le autorizzazioni necessarie a questo ruolo e aggiungere questo ruolo alla policy AWS KMS chiave.

  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 credentialSpecs campo della definizione dell'attività.

    Se unisci le istanze a un singolo dominio, usa il prefisso credentialspec: all'inizio della ARN 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 all'Amazon Resource Name (ARN) del bucket Amazon S3 nel credentialSpecs campo della definizione dell'attività.

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

      Per consentire alle tue attività di accedere al bucket S3, aggiungi le seguenti autorizzazioni come policy in linea al ruolo di esecuzione delle attività di AmazonECS. IAM

      { "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 le specifiche delle credenziali a un parametro Parameter Store. SSM Quindi, fai riferimento all'Amazon Resource Name (ARN) del SSM parametro Parameter Store nel credentialSpecs campo della definizione dell'attività.

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

      Per consentire alle tue attività di accedere al SSM parametro Parameter Store, aggiungi le seguenti autorizzazioni come policy in linea al ruolo di esecuzione IAM delle ECS attività di Amazon.

      { "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 specifica 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.