Salta al contenuto

Come posso trasmettere in modo sicuro informazioni segrete o sensibili ai container in un'attività Amazon ECS?

6 minuti di lettura
0

Desidero trasmettere in modo sicuro informazioni segrete o sensibili ai container in un'attività per Amazon Elastic Container Service (Amazon ECS).

Breve descrizione

Se trasmetti dati sensibili in chiaro, puoi causare problemi di sicurezza. I dati possono essere rilevabili nella Console di gestione AWS o tramite l'API AWS DescribeTaskDefinition.

Per una sicurezza ottimale, trasmetti le informazioni sensibili ai container come variabili di ambiente. Per inserire in modo sicuro i dati nei container, fai riferimento ai valori archiviati in Archivio dei parametri, una funzionalità di AWS Systems Manager. Puoi anche utilizzare AWS Secrets Manager nella definizione di un'attività Amazon ECS. Dopodiché, puoi esporre le informazioni sensibili come variabili di ambiente o nella configurazione del log di un container.

Risoluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Prerequisiti:

  • Le attività devono utilizzare la piattaforma AWS Fargate versione 1.3.0 o successive con tipo di avvio AWS Fargate.
  • Le istanze di container devono utilizzare amazon-ecs-agent versione 1.22.0 o successive con tipo di avvio Amazon Elastic Compute Cloud (Amazon EC2). Per ulteriori informazioni, consulta Changelog sul sito web GitHub.
  • La piattaforma Fargate deve avere la versione 1.4.0 o successive per Linux o 1.0.0 per Windows per inserire una chiave JSON.
  • Per utilizzare chiavi JSON o versioni del segreto specifiche, l'agente del container ECS dell'istanza di container deve eseguire la versione 1.37.0 o successive per l'inserimento del segreto.
  • L'agente del container ECS dell'istanza di container deve eseguire la versione 1.22.0 o successive per inserire il contenuto completo dei segreti nelle configurazioni del log o nelle variabili di ambiente.

Crea il ruolo e le policy IAM

Completa i seguenti passaggi:

  1. Archivia le informazioni sensibili in Archivio dei parametri o Secrets Manager.

    Per Archivio dei parametri, esegui questo comando AWS CLI put-parameter:

    aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValue

    Nota: sostituisci awsExampleParameter con i tuoi parametri. Sostituisci awsExampleValue con il valore del tuo segreto.

    Per Secrets Manager, esegui questo comando AWS CLI create-secret:

    aws secretsmanager create-secret --name awsExampleParameter --secret-string awsExampleValue

    Nota: sostituisci awsExampleParameter con i tuoi parametri. Sostituisci awsExampleValue con il valore del tuo segreto. L'agente del container ECS utilizza un ruolo di esecuzione dell'attività per recuperare le informazioni da Archivio dei parametri o Secrets Manager. Il ruolo di esecuzione dell'attività deve concedere le autorizzazioni alle azioni ssm:GetParameters, secretsmanager:GetSecretValue e kms:Decrypt.

  2. Apri la console AWS Identity and Access Management (AWS IAM).

  3. Crea un ruolo con una relazione di attendibilità per ecs-tasks.amazonaws.com.
    Esempio di policy di attendibilità del ruolo:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "ecs-tasks.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  4. Scegli Ruoli, quindi seleziona il ruolo che hai creato.

  5. Nella scheda Autorizzazioni, scegli l'elenco a discesa Aggiungi autorizzazioni.

  6. Scegli Crea policy inline, quindi seleziona la scheda JSON.

  7. Collega la seguente policy:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ssm:GetParameters",
            "secretsmanager:GetSecretValue"
          ],
          "Resource": [
            "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter",
            "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter*"
          ]
        }
      ]
    }

    Nota: sostituisci us-east-1 e awsExampleAccountID con la Regione AWS e l'account in cui hai archiviato i tuoi parametri. Sostituisci awsExampleParameter con il nome dei parametri che hai creato. Puoi utilizzare una chiave gestita dal cliente del Servizio AWS di gestione delle chiavi (AWS KMS) per crittografare i dati in Archivio dei parametri o Secrets Manager. Per utilizzare la chiave gestita dal cliente, ottieni le autorizzazioni per kms:Decrypt.

  8. (Facoltativo) Collega la policy gestita AmazonECSTaskExecutionRolePolicy al ruolo che hai creato.

Importante: le attività che inviano log ad Amazon CloudWatch o utilizzano immagini archiviate in Amazon Elastic Container Registry (Amazon ECR) devono avere una policy gestita.

Fai riferimento alle informazioni sensibili nella definizione dell'attività ECS

Utilizza la console Amazon ECS o AWS CLI per fare riferimento a informazioni sensibili nella definizione dell'attività ECS.

Utilizza la console Amazon ECS

Completa i seguenti passaggi:

  1. Apri la console Amazon ECS.
  2. Nel pannello di navigazione, seleziona Definizioni di attività, quindi Crea nuova definizione di attività.
    In Famiglia di definizione delle attività, inserisci un nome.
    Per Tipo di avvio, scegli AWS Fargate o istanze Amazon EC2.
  3. In Ruolo di esecuzione delle attività, scegli il ruolo IAM di esecuzione dell'attività che hai creato.
  4. Nella sezione Definizioni di container, in Variabili di ambiente, scegli Aggiungi variabile di ambiente.
  5. Per Chiave, inserisci una chiave per la variabile di ambiente.
  6. Nell’elenco a discesa ValueType, seleziona ValueFrom.
  7. Nella casella di testo relativa alla chiave, inserisci il nome della risorsa Amazon (ARN) della risorsa di Archivio dei parametri o Secrets Manager.
    Nota: puoi inoltre specificare i segreti nella configurazione del driver di log.

Utilizza AWS CLI

Utilizza la sezione secrets per fare riferimento alle risorse di Archivio dei parametri o Secrets Manager nella definizione dell'attività come variabili di ambiente. Oppure utilizza la sezione secretOptions per fare riferimento ad Archivio dei parametri o Secrets Manager come opzioni di configurazione del log.

Esempio di definizione dell'attività:

{
  "requiresCompatibilities": [
    "EC2"
  ],
  "family": "Web",
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "web",
      "image": "httpd",
      "memory": 128,
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "logConfiguration": {
        "logDriver": "splunk",
        "options": {
          "splunk-url": "https://sample.splunk.com:8080"
        },
        "secretOptions": [
          {
            "name": "splunk-token",
            "valueFrom": "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter"
          }
        ]
      },
      "secrets": [
        {
          "name": "DATABASE_PASSWORD",
          "valueFrom": "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter"
        }
      ]
    }
  ],
  "executionRoleArn": "arn:aws:iam::awsExampleAccountID:role/awsExampleRoleName"
}

Nota: sostituisci us-east-1 e awsExampleAccountID con la tua Regione e l'ID del tuo account. Sostituisci awsExampleParameter con il parametro che hai creato. Sostituisci awsExampleRoleName con il ruolo che hai creato.

Quindi esegui questo comando AWS CLI register-task-definition per registrare la definizione dell'attività:

aws ecs register-task-definition --family-name yourTaskDefinitionFamily --cli-input-json file://pathToYourJsonFile

Nota: sostituisci yourTaskDefinitionFamily con il nome della tua famiglia di definizione delle attività.

Quando avvii un'attività con questa definizione, l'agente del container ECS risolve automaticamente i segreti. Quindi l'agente del container inserisce i valori come variabili di ambiente nel container.

Aggiorna i segreti e distribuisci le modifiche

Quando avvii il container ECS, il container inserisce al suo interno i dati sensibili. Se aggiorni o ruoti il segreto o il parametro in Archivio dei parametri, il container non riceve automaticamente il valore aggiornato. Devi avviare una nuova attività. Se l'attività fa parte di un servizio, aggiorna il servizio. Per forzare il servizio ad avviare una nuova attività, utilizza l'opzione Forza una nuova distribuzione.

Per forzare una nuova distribuzione, completa i seguenti passaggi:

  1. Apri la console Amazon ECS.
  2. Seleziona Cluster, quindi scegli il cluster con il servizio.
  3. Seleziona Forza nuova distribuzione dall'elenco a discesa Aggiorna.
    Nota: per forzare una nuova distribuzione da AWS CLI, esegui il comando update-service con il flag --force-new-deployment.

Informazioni correlate

Aggiornamento dell'agente del container Amazon ECS