Direkt zum Inhalt

Wie kann ich in einer Amazon ECS-Aufgabe geheime oder vertrauliche Informationen sicher an Container weitergeben?

Lesedauer: 6 Minute
0

Ich möchte in einer Aufgabe für Amazon Elastic Container Service (Amazon ECS) geheime oder vertrauliche Informationen sicher an Container weitergeben.

Kurzbeschreibung

Wenn du sensible Daten im Klartext weitergibst, kannst du Sicherheitsprobleme verursachen. Die Daten sind möglicherweise in der AWS-Managementkonsole oder über die DescribeTaskDefinition-AWS-API auffindbar.

Als bewährte Sicherheitsmethode sollten vertrauliche Informationen als Umgebungsvariablen an Container übergeben werden. Um Daten sicher in Container einzufügen, verweise auf die Werte, die im Parameter Store, einer Funktion von AWS Systems Manager, gespeichert sind. Du kannst AWS Secrets Manager auch in einer Amazon ECS-Aufgabendefinition verwenden. Anschließend kannst du deine vertraulichen Informationen als Umgebungsvariablen oder in der Protokollkonfiguration eines Containers verfügbar machen.

Lösung

**Anmerkung:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, findest du weitere Informationen unter Troubleshoot AWS CLI errors. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Voraussetzungen:

  • Deine Aufgaben müssen die AWS Fargate-Plattformversion 1.3.0 oder höher mit dem Starttyp AWS Fargate verwenden.
  • Deine Container-Instances müssen amazon-ecs-agent Version 1.22.0 oder höher mit dem Starttyp Amazon Elastic Compute Cloud (Amazon EC2) verwenden. Weitere Informationen findest du unter Changelog auf der GitHub-Website.
  • Deine Fargate-Plattform muss Version 1.4.0 oder höher für Linux oder 1.0.0 für Windows haben, um einen JSON-Schlüssel einzufügen.
  • Um bestimmte JSON-Schlüssel oder geheime Versionen zu verwenden, muss der ECS-Container-Agent Ihrer Container-Instance Version 1.37.0 oder höher für die geheime Injektion ausführen.
  • Der ECS-Container-Agent deiner Container-Instance muss Version 1.22.0 oder höher ausführen, um den vollständigen Inhalt der Geheimnisse in Protokollkonfigurationen oder Umgebungsvariablen einzufügen.

IAM-Rolle und Richtlinien erstellen

Führe die folgenden Schritte aus:

  1. Speichere deine vertraulichen Informationen entweder im Parameter Store oder Secrets Manager.

    Führe für Parameter Store den folgenden put-parameter-AWS-CLI-Befehl aus:

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

    Hinweis: Ersetze awsExampleParameter durch deine eigenen Parameter. Ersetze awsExampleValue durch deinen geheimen Wert.

    Führe für Secrets Manager den folgenden create-secret-AWS-CLI-Befehl aus:

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

    Hinweis: Ersetze awsExampleParameter durch deine eigenen Parameter. Ersetze awsExampleValue durch deinen geheimen Wert. Der ECS-Container-Agent verwendet eine Rolle zur Aufgabenausführung, um die Informationen aus dem Parameter Store oder Secrets Manager abzurufen. Die Rolle zur Aufgabenausführung muss Berechtigungen für die Aktionen ssm:getParameters, secretsManager:GetSecretValue und kms:Decrypt gewähren.

  2. Öffne die AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Konsole.

  3. Erstelle eine Rolle mit einer Vertrauensbeziehung für ecs-tasks.amazonaws.com.
    Beispiel für eine Vertrauensrichtlinie einer Rolle:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "ecs-tasks.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  4. Wähle Rollen und dann die Rolle aus, die du erstellt hast.

  5. Wähle unter der Registerkarte Berechtigungen die Dropdownliste Berechtigungen hinzufügen aus.

  6. Wähle Inline-Richtlinie erstellen und dann die Registerkarte JSON aus.

  7. Füge die folgende Richtlinie hinzu:

    {
      "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*"
          ]
        }
      ]
    }

    **Hinweis:**Ersetze us-east-1 und awsExampleAccountID durch die AWS-Region und das Konto, in dem deine Parameter gespeichert sind. Ersetze awsExampleParameter durch den Namen der Parameter, die du erstellt hast. Du kannst einen vom Kunden verwalteten Schlüssel von AWS Key Management Service (AWS KMS) verwenden, um Daten in Parameter Store oder Secrets Manager zu verschlüsseln. Um den vom Kunden verwalteten Schlüssel zu verwenden, hole dir Berechtigungen für kms:Decrypt.

  8. (Optional) Hänge die verwaltete Richtlinie AmazonECSTaskExecutionRolePolicy an die Rolle an, die du in Schritt 2 erstellt hast.

Wichtig: Aufgaben, die Protokolle an Amazon CloudWatch senden oder in Amazon Elastic Container Registry (Amazon ECR) gespeicherte Bilder verwenden, müssen über eine verwaltete Richtlinie verfügen.

Verweise in der ECS-Aufgabendefinition auf vertrauliche Informationen

Verwende die Amazon ECS-Konsole oder die AWS CLI, um auf vertrauliche Informationen in der ECS-Aufgabendefinition zu verweisen.

Verwende die Amazon ECS-Konsole

Führe die folgenden Schritte aus:

  1. Öffne die Amazon-ECS-Konsole.
  2. Wähle im Navigationsbereich Aufgabendefinitionen und dann Neue Aufgabendefinition erstellen aus.
    Gib für Aufgabendefinitionsfamilie einen Namen ein.
    Wähle als Starttyp AWS Fargate oder Amazon EC2-Instances als Starttyp aus.
  3. Wähle für die Aufgabenausführungsrolle die IAM-Rolle für die Aufgabenausführung aus, die du erstellt hast.
  4. Wähle im Abschnitt Container-Definitionen im Abschnitt Umgebungsvariablen die Option Umgebungsvariable hinzufügen aus.
  5. Gib für Schlüssel einen Schlüssel für deine Umgebungsvariable ein.
  6. Wähle in der Dropdownliste ValueType die Option WertAb aus.
  7. Gib in das Textfeld für den Schlüssel den Amazon-Ressourcennamen (ARN) deiner Parameter Store- oder Secrets Manager-Ressource ein.
    **Hinweis:**Du kannst Geheimnisse auch in der Protokolltreiberkonfiguration angeben.

Verwendung der AWS CLI

Verwende den Abschnitt secrets, um Parameter Store- oder Secrets Manager-Ressourcen in der Aufgabendefinition als Umgebungsvariablen zu referenzieren. Oder verwende den Abschnitt secretOptions, um Parameter Store oder Secrets Manager als Protokollkonfigurationsoptionen zu referenzieren.

Beispiel für eine Aufgabendefinition:

{
  "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"
}

Hinweis: Ersetze us-east-1 und awsExampleAccountID durch deine Region und Konto-ID. Ersetze awsExampleParameter durch den Parameter, den du erstellt hast. Ersetze awsExampleRoleName durch die Rolle, die du erstellt hast.

Führe dann den folgenden register-task-definition-AWS-CLI-Befehl aus, um die Aufgabendefinition zu registrieren:

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

Hinweis: Ersetze yourTaskDefinitionFamily durch den Familiennamen deiner Aufgabendefinition.

Wenn du eine Aufgabe mit dieser Definition startest, löst der ECS-Container-Agent die Secrets automatisch auf. Dann injiziert der Container-Agent die Werte als Umgebungsvariablen in den Container.

Secrets aktualisieren und Änderungen bereitstellen

Wenn du den ECS-Container startest, injiziert der Container sensible Daten in ihn. Wenn du den geheimen oder den Parameter Store-Parameter aktualisierst oder rotierst, erhält der Container den aktualisierten Wert nicht automatisch. Du musst eine neue Aufgabe starten. Wenn deine Aufgabe Teil eines Service ist, aktualisiere den Service. Verwende die Option Neue Bereitstellung erzwingen, um den Dienst zum Starten einer neuen Aufgabe zu zwingen.

Gehe wie folgt vor, um eine neue Bereitstellung zu erzwingen:

  1. Öffne die Amazon-ECS-Konsole.
  2. Wähle Cluster und dann den Cluster mit deinem Service aus.
  3. Wähle in der Dropdownliste Aktualisieren die Option Neue Bereitstellung erzwingen aus.
    Hinweis: Um eine neue Bereitstellung über die AWS-CLI zu erzwingen, führe den Befehl update-service mit dem Flag --force-new-deployment aus.

Ähnliche Informationen

Aktualisierung des Amazon ECS-Container-Agenten