Direkt zum Inhalt

Wie kann ich ein Secrets-Manager-Geheimnis in einer privaten VPC rotieren?

Lesedauer: 4 Minute
0

Ich habe versucht, ein AWS-Secrets-Manager-Geheimnis für einen AWS-Service in einer Amazon Virtual Private Cloud (Amazon VPC) zu rotieren. Der Vorgang ist jedoch fehlgeschlagen und Amazon CloudWatch Logs zeigen, dass bei der AWS-Lambda-Aufgabe ein Timeout aufgetreten ist.

Kurzbeschreibung

Secrets Manager kann Geheimnisse für AWS-Services, die in privaten Amazon-VPC-Subnetzen ausgeführt werden, nicht rotieren, da diese Subnetze keinen Internetzugang haben.

Lösung

Wichtig: Bevor du beginnst, stelle sicher, dass du die AWS-Befehlszeilenschnittstelle (AWS CLI) installiert und konfiguriert hast.

Hinweis: Wenn du beim Ausführen von AWS CLI-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.

Folge diesen Anweisungen, um einen Amazon-VPC-Schnittstellenendpunkt für den Zugriff auf deine Secrets-Manager-Lambda-Funktion und deine private Amazon Relational Database Service (Amazon RDS)-Instance zu konfigurieren. Im folgenden Beispiel wird eine private Aurora-RDS-Instance in Amazon VPC mit dem Namen vpc-0abb11f5a28a8abe7 verwendet.

Erstelle SGs für den Secrets-Manager-VPC-Endpunkt, die RDS-Instance und die Lambda-Rotationsfunktion

Folge diesen Anweisungen, um Sicherheitsgruppen (SGs) mithilfe der AWS-CLI zu erstellen.

1. SG für Secrets-Manager-Amazon-VPC-Endpunkt:

Hinweis: Ersetze vpc-id vpc-0abb11f5a28a8abe7 durch deine VPC-ID.

$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name SMVPCEndpointSG --description "secretsmanager VPCEndpoint SG"
{
    "GroupId": "sg-vpc-endpoint"
}

2. Sicherheitsgruppe für die Lambda-Rotationsfunktion:

$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name LambdaFunctionSG --description "Lambda Rotation Function SG"
{
    "GroupId": "sg-lambda-function"
}

3. (Optional) Erstelle eine SG für die RDS-Instance:

Hinweis: Dieser Schritt ist erforderlich, wenn deine RDS-Instance nur die Standardsicherheitsgruppe verwendet.

$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name RDSInstanceSG --description "RDS Instance SG"
{
    "GroupId": "sg-rds-instance"
}

Regeln zum Amazon-VPC-Endpunkt und den RDS-Instance-SGs hinzufügen

1. Ermittle deinen CIDR-Bereich für deinen VPC:

$ aws ec2 describe-vpcs --vpc-ids vpc-0a05c93c7ef7a8a1c --query 'Vpcs[].CidrBlock' --output text
10.0.0.0/16

2. Konfiguriere die Sicherheitsgruppenregeln für den Amazon-VPC-Endpunkt so, dass eingehender Datenverkehr auf Port 443 von deiner VPC zugelassen wird:

$ aws ec2 authorize-security-group-ingress --group-id sg-vpc-endpoint --protocol tcp --port 443 --cidr 10.0.0.0/16

3. Konfiguriere die RDS-Instance-SG so, dass eingehende Verbindungen von der Sicherheitsgruppe der Lambda-Funktion zugelassen werden:

Hinweis:

  • Ersetze your-rds-security-group durch deine SG (entweder eine vorhandene SG oder die optionale RDS-Instance-SG).
  • Ersetze your-db-port durch den Port, für den deine Datenbank konfiguriert ist.
$ aws ec2 authorize-security-group-ingress --group-id your-rds-security-group --protocol tcp --port your-db-port --source-group sg-lambda-function

Hänge SGs an AWS-Ressourcen an

1. Wenn du die optionale RDS-Instance-SG erstellt hast, ändere die RDS-Instance-Konfiguration:

Hinweis: Ersetze your-existing-rds-security-groups durch die Gruppe oder Gruppen, die der RDS-Instance zugeordnet sind.

$ aws rds modify-db-instance --db-instance-identifier your-rds-instance --vpc-security-group-ids sg-rds-instance your-existing-rds-security-groups

2. Folge den Anweisungen, um die Lambda-Funktionskonfiguration zu aktualisieren:

$ aws lambda update-function-configuration --function-name your-lambda-function \
--vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-lambda-function

Erstelle einen Amazon-VPC-Schnittstellenendpunkt für den Secrets-Manager-Service und verknüpfe ihn mit einer SG

Folge den Anweisungen zum Erstellen eines Schnittstellenendpunkts:

Hinweis: Ersetze your-region durch deine AWS-Region und die Subnetz-IDs, die für deine RDS-Instance verwendet werden.

$ aws ec2 create-vpc-endpoint --vpc-id vpc-0abb11f5a28a8abe7 --vpc-endpoint-type Interface \
--service-name com.amazonaws.your-region.secretsmanager --subnet-ids subnet-076c28105d486f3bd subnet-0af00c796ccdc725f \
--security-group-ids sg-vpc-endpoint

Wichtig: In deiner Amazon-VPC müssen die DNS-Hostnamen und DNS-Auflösungsattribute aktiviert sein. Weitere Informationen findest du unter DNS-Unterstützung für deine VPC anzeigen und aktualisieren.

Stelle sicher, dass Secrets Manager das Geheimnis rotieren kann

1. Folge den Anweisungen zum Rotieren des Secrets-Manager-Geheimnisses:

Hinweis: Ersetze your-secret durch dein Secrets-Manager-Geheimnis.

$ aws secretsmanager rotate-secret --secret-id your-secret

Secrets Manager versucht erneut, die vorherige Rotation durchzuführen.

Hinweis: Da frühere Versuche, das Passwort zu ändern, nicht erfolgreich waren, erhältst du möglicherweise eine Ausgabe, die der folgenden ähnelt:

An error occurred (InvalidRequestException) when calling the RotateSecret operation: A previous rotation isn't complete. That rotation will be reattempted.

2. Überwache die Funktion in der AWS-Lambda-Konsole. Wenn die Rotation erfolgreich ist, enthalten die Amazon-CloudWatch-Protokollstreams einen Eintrag ähnlich dem folgenden:

[INFO] 2019-10-22T07:59:32.627Z 96179023-5b67-4e98-a057-885f68bc69f2 finishSecret: Successfully set AWSCURRENT stage to version 175b5e38-341f-4cd0-8c58-2b1e49769642 for secret arn:aws:secretsmanager:your-region:your-account:secret:your-secret

3. Rufe das Secrets-Manager-Geheimnis ab, um zu bestätigen, dass es erfolgreich rotiert wurde:

Hinweis: Ersetze your-secret-arn durch deinen geheimen Secrets-Manager-ARN.

aws secretsmanager get-secret-value --secret-id your-secret-arn

Hinweis: Die Secrets-Manager-Rotationsfunktion läuft asynchron im Hintergrund. Es kann mehrere Minuten dauern, bis die Rotationsfunktion abgeschlossen ist.

AWS OFFICIALAktualisiert vor 2 Jahren