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

5 minuti di lettura
0

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

Breve descrizione

La trasmissione di dati sensibili come testo normale può causare problemi di sicurezza in quanto tale operazione è rilevabile nella console di gestione AWS o tramite API AWS come DescribeTaskDefinition o DescribeTasks.

Per una sicurezza ottimale, trasmetti le informazioni sensibili ai container come variabili di ambiente. È possibile inserire in modo sicuro i dati nei container facendo riferimento ai valori archiviati nell’Archivio dei parametri AWS Systems Manager o in AWS Secrets Manager nella definizione di container di una definizione di attività Amazon ECS. Pertanto, è possibile esporre le informazioni sensibili come variabili di ambiente o nella configurazione del registro di un container.

AWS supporta l'inserimento di dati solo per i seguenti casi:

Risoluzione

Completa i prerequisiti

1.    Archivia le informazioni sensibili nell’Archivio dei parametri AWS Systems Manager o in Secrets Manager.

Per l’Archivio dei parametri AWS Systems Manager, esegui il seguente comando. Sostituisci awsExampleParameter con i tuoi parametri e sostituisci awsExampleValue con il valore sicuro:

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

Per Secrets Manager, esegui il seguente comando. Sostituisci awsExampleParameter con i tuoi parametri e sostituisci awsExampleValue con il valore segreto:

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

**Nota:**L'agente container Amazon ECS utilizza un ruolo AWS Identity and Access Management (IAM) di esecuzione delle attività per recuperare le informazioni dall’archivio dei parametri AWS Systems Manager o da Secrets Manager. Il ruolo IAM di esecuzione delle attività deve concedere le autorizzazioni per le seguenti azioni: ssm:GetParameters, secretsmanager:GetSecretValue e kms:Decrypt.

2.    Apri la console IAM e crea un ruolo con una relazione di attendibilità per ecs-tasks.amazonaws.com. Ad esempio:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3.    Per creare una policy inline per il ruolo nella console IAM, seleziona Ruoli, seleziona il ruolo creato nel passaggio 2 e quindi Aggiungi policy inline nella scheda Autorizzazioni. Seleziona la scheda JSON e crea una policy con il codice seguente. Sostituisci us-east-1 e awsExampleAccountID con la regione AWS e l'account in cui sono archiviati i parametri. Sostituisci awsExampleParameter con il nome dei parametri creati nel passaggio 1:

{
  "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: Se utilizzi una chiave KMS gestita dal cliente per crittografare i dati nell’Archivio dei parametri AWS Systems Manager o in Secrets Manager, devi ottenere le autorizzazioni per kms:Decrypt.

4.    (Facoltativo) Associa la policy gestita AmazonECSTaskExecutionRolePolicy al ruolo creato nel passaggio 2.

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

Fai riferimento alle informazioni sensibili nella definizione delle attività ECS

Dalla Console di gestione AWS:

1.    Apri la console Amazon ECS.

2.    Nel pannello di navigazione, scegli Definizioni di attività e seleziona Crea nuova definizione di attività.

3.    Scegli il tipo di avvio e seleziona Passaggio successivo.

4.    In Ruolo di esecuzione delle attività, seleziona il ruolo IAM di esecuzione delle attività creato in precedenza.

5.    Nella sezione Definizioni di container, seleziona Aggiungi container.

6.    Nella sezione di variabili Ambiente in AMBIENTE, per Chiave inserisci una chiave per la variabile di ambiente.

7.    Nell’elenco a discesa Valore, seleziona ValueFrom.

8.    Nella casella di testo relativa alla chiave, inserisci il nome della risorsa Amazon (ARN) della risorsa Archivio dei parametri o Secrets Manager.

Nota: È inoltre possibile specificare i segreti nella configurazione del driver di log.

Dall'interfaccia della linea di comando AWS (AWS CLI):

Nota: Se visualizzi errori durante l'esecuzione dei comandi AWS CLI, assicurati di utilizzare la versione più recente dell'interfaccia AWS CLI.

1.    Fai riferimento alle risorse dell’Archivio dei parametri AWS Systems o di Secrets Manager nella definizione di attività come variabili di ambiente utilizzando la sezione Segreti o come opzioni di configurazione dei log utilizzando la sezione secretOptions. Nell'esempio seguente, sostituisci us-east-1 e awsExampleAccountID con la regione AWS e l'ID account. Sostituisci awsExampleParameter con il parametro creato in precedenza. Sostituisci awsExampleRoleName con il ruolo creato in precedenza.

{
  "requiresCompatibilities": [
    "EC2"
  ],
  "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"
}

2.    Per registrare la definizione di attività, esegui il comando seguente:

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

Quando un'attività viene avviata utilizzando la definizione di attività creata, l'agente container Amazon ECS risolve automaticamente i segreti e inserisce i valori come variabili di ambiente nel container.

Importante: I dati sensibili vengono inseriti nel container all'avvio iniziale dello stesso. Se il parametro segreto o l’Archivio dei parametri viene aggiornato o ruotato, il container non riceve automaticamente il valore aggiornato. È necessario avviare una nuova attività. Se l’attività fa parte di un servizio, aggiorna il servizio. Quindi, utilizza l'opzione Forza una nuova implementazione per forzare il lancio di una nuova attività da parte del servizio.

Per forzare una nuova implementazione:

1.    Apri la console Amazon ECS.

2.    Seleziona Cluster e scegli il cluster con il servizio.

3.    Seleziona la casella di controllo Forza una nuova implementazione e scegli Aggiorna servizio.

Nota: Per forzare una nuova implementazione dall'interfaccia AWS CLI, esegui il comando update-service con il flag --force-new-deployment.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa