Wie kann ich in einer Amazon ECS-Aufgabe geheime oder vertrauliche Informationen sicher an Container weitergeben?
Ich möchte in einer Aufgabe für Amazon Elastic Container Service (Amazon ECS) geheime oder vertrauliche Informationen sicher an Container weitergeben.
Kurzbeschreibung
Die Weitergabe vertraulicher Daten im Klartext kann zu Sicherheitsproblemen führen, da sie in der AWS-Managementkonsole oder über AWS-APIs wie DescribeTaskDefinition oder DescribeTasks auffindbar sind.
Als bewährte Sicherheitsmethode sollten vertrauliche Informationen als Umgebungsvariablen an Container übergeben werden. Sie können Daten sicher in Container einspeisen, indem Sie auf Werte verweisen, die in AWS Systems Manager Parameter Store oder AWS Secrets Manager in der Container-Definition einer Amazon ECS-Aufgabendefinition gespeichert sind. Anschließend können Sie Ihre vertraulichen Informationen als Umgebungsvariablen oder in der Protokollkonfiguration eines Containers verfügbar machen.
AWS unterstützt die Dateneinspeisung nur für die folgenden Zwecke:
- Aufgaben, die die AWS Fargate-Plattformversion 1.3.0 oder höher mit dem AWS Fargate-Starttyp verwenden
- Container-Instances, die die Amazon-ecs-Agent-Version 1.22.0 oder höher mit dem Starttyp Amazon Elastic Compute Cloud (Amazon EC2) verwenden
Lösung
Vollständige Voraussetzungen
1.Speichern Sie Ihre vertraulichen Informationen entweder in AWS Systems Manager Parameter Store oder Secrets Manager.
Führen Sie für AWS Systems Manager Parameter Store den folgenden Befehl aus. Ersetzen Sie awsExampleParameter durch Ihre eigenen Parameter und ersetzen Sie awsExampleValue durch Ihren sicheren Wert:
aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValue
Führen Sie für Secrets Manager den folgenden Befehl aus. Ersetzen Sie awsExampleParameter durch Ihre eigenen Parameter und ersetzen Sie awsExampleValue durch Ihren geheimen Wert:
aws secretsmanager create-secret --name awsExampleParameter --secret-string awsExampleValue
**Hinweis:**Der Amazon ECS-Container-Agent verwendet eine AWS Identity and Access Management (IAM)-Rolle zur Aufgabenausführung, um die Informationen aus dem AWS Systems Manager Parameter Store oder Secrets Manager abzurufen. Die IAM-Rolle zur Aufgabenausführung muss Berechtigungen für die folgenden Aktionen gewähren: ssm:getParameters, secretsManager:GetSecretValue und kms:Decrypt.
2.Öffnen Sie die IAM-Konsole und erstellen Sie dann eine Rolle mit einer Vertrauensbeziehung für ecs-tasks.amazonaws.com. Zum Beispiel:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
3.Um eine Inline-Richtlinie für Ihre Rolle in der IAM-Konsole zu erstellen, wählen Sie Rollen, wählen Sie die Rolle aus, die Sie in Schritt 2 erstellt haben, und wählen Sie dann auf der Registerkarte Berechtigungen die Option Inline-Richtlinie hinzufügen aus. Wählen Sie die Registerkarte JSON und erstellen Sie dann eine Richtlinie mit dem folgenden Code. Ersetzen Sie us-east-1 und awsExampleAccountID durch die AWS-Region und das Konto, in dem Ihre Parameter gespeichert sind. Ersetzen Sie awsExampleParameter durch den Namen der Parameter, die Sie in Schritt 1 erstellt haben:
{ "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:**Wenn Sie einen vom Kunden verwalteten KMS-Schlüssel zum Verschlüsseln von Daten in AWS Systems Manager Parameter Store oder Secrets Manager verwenden, müssen Sie Berechtigungen für kms:Decrypt erwerben.
4.(Optional) Hängen Sie die verwaltete Richtlinie AmazonECSTaskExecutionRolePolicy an die Rolle an, die Sie in Schritt 2 erstellt haben.
**Wichtig:**Eine verwaltete Richtlinie ist für Aufgaben erforderlich, die in Amazon Elastic Container Registry (Amazon ECR) gespeicherte Bilder verwenden oder Protokolle an Amazon CloudWatch senden.
Verweisen Sie in der ECS-Aufgabendefinition auf vertrauliche Informationen
Von der AWS-Managementkonsole aus:
1.Öffnen Sie die Amazon ECS-Konsole.
2.Wählen Sie im Navigationsbereich Aufgabendefinitionen und dann Neue Aufgabendefinition erstellen aus.
3.Wählen Sie Ihren Starttyp und wählen Sie dann Nächster Schritt.
4.Wählen Sie für die Aufgabenausführungsrolle die IAM-Rolle für die Aufgabenausführung aus, die Sie zuvor erstellt haben.
5.Wählen Sie im Abschnitt Container-Definitionen die Option Container hinzufügen aus.
6.Geben Sie im Abschnitt Umgebungsvariablen unter UMGEBUNG für Schlüssel einen Schlüssel für Ihre Umgebungsvariable ein.
7.Wählen Sie in der Dropdownliste Wert die Option WertAb aus.
8.Geben Sie in das Textfeld für den Schlüssel den Amazon-Ressourcennamen (ARN) Ihrer Parameter Store- oder Secrets Manager-Ressource ein.
**Hinweis:**Sie können Geheimnisse auch in der Protokolltreiberkonfiguration angeben.
Über AWS Command Line Interface (AWS CLI):
**Hinweis:**Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.
1.Verweisen Sie in der Aufgabendefinition auf AWS Systems Manager Parameter Store- oder Secrets Manager-Ressourcen als Umgebungsvariablen im Abschnitt Geheimnisse oder als Protokollkonfigurationsoptionen im Abschnitt SecretOptions. Ersetzen Sie im folgenden Beispiel us-east-1 und awsExampleAccountID durch Ihre AWS-Region und Konto-ID. Ersetzen Sie awsExampleParameter durch den Parameter, den Sie zuvor erstellt haben. Ersetzen Sie awsExampleRoleName durch die Rolle, die Sie zuvor erstellt haben.
{ "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.Führen Sie den folgenden Befehl aus, um die Aufgabendefinition zu registrieren:
aws ecs register-task-definition --family-name yourTaskDefinitionFamily --cli-input-json file://pathToYourJsonFile
Wenn eine Aufgabe mit der von Ihnen erstellten Aufgabendefinition gestartet wird, löst der Amazon ECS-Container-Agent die Geheimnisse automatisch auf und fügt die Werte als Umgebungsvariablen in den Container ein.
**Wichtig:**Vertrauliche Daten werden in Ihren Container eingefügt, wenn der Container zum ersten Mal gestartet wird. Wenn der Parameter secret oder Parameter Store aktualisiert oder rotiert wird, erhält der Container den aktualisierten Wert nicht automatisch. Sie müssen eine neue Aufgabe starten. Wenn Ihre Aufgabe Teil eines Service ist, aktualisieren Sie den Service. Verwenden Sie dann die Option Neue Bereitstellung erzwingen, um den Service zu zwingen, eine neue Aufgabe zu starten.
Um eine neue Bereitstellung zu erzwingen:
1.Öffnen Sie die Amazon ECS-Konsole.
2.Wählen Sie Cluster und dann den Cluster mit Ihrem Service aus.
3.Aktivieren Sie das Kontrollkästchen Neue Bereitstellung erzwingen und wählen Sie dann Service aktualisieren aus.
**Hinweis:**Um eine neue Bereitstellung über die AWS-CLI zu erzwingen, führen Sie den Befehl update-service mit dem Flag --force-new-deployment aus.
Ähnliche Videos
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 6 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren