Wie übergebe ich mit CodeBuild temporäre Anmeldeinformationen für AssumeRole an die Docker-Laufzeit?
Ich möchte temporäre Anmeldeinformationen für AssumeRole mit AWS CodeBuild an die Docker-Laufzeit übergeben.
Kurze Beschreibung
CodeBuild verwendet die CodeBuild-Servicerolle als standardmäßige AWS-Anmeldeinformationen im Build-Container. Die Docker-Laufzeit, die im Build-Container ausgeführt wird, erhält keine AWS-Anmeldeinformationen und muss explizit konfiguriert werden.
Exportieren Sie die AssumeRole-Anmeldeinformationen als Umgebungsvariablen. Übergeben Sie diese Variablen dann an die Docker-Laufzeit, indem Sie den Parameter --build-arg für Docker-Build verwenden. Weitere Informationen finden Sie unter Docker-Build auf der Docker Docs-Website.
Lösung
1.Erstellen Sie eine neue Rolle für die Docker-Laufzeit. Zum Beispiel: Secretassumerole
2.Aktualisieren Sie die Vertrauensverhältnis-Richtlinie von Secretassumerole und fügen Sie Ihre CodeBuild-Servicerolle hinzu, um die Rolle zu übernehmen. Zum Beispiel:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::$account_id:role/service-role/codebuild-service-role" }, "Action": "sts:AssumeRole" } ] }
3.Verwenden Sie die neue Rolle, um den geheimen AWSExampleSecret-Wert vom AWS Secrets Manager abzurufen. Zum Beispiel:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "arn:aws:secretsmanager:ap-northeast-1:$account_id:secret:tutorials/AWSExampleSecret-EHWYme" ] } ] }
**Hinweis:**Ersetzen Sie $account_id durch Ihre Konto-ID. Sie können während der Docker-Laufzeit jede Operationsgenehmigung erteilen.
4.Fügen Sie Ihrer CodeBuild-Servicerolle die Berechtigungen sts:assumeRole hinzu, um AssumeRole-Operationen zuzulassen. Zum Beispiel:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::$account_id:role:role/Secretassumerole" } ] }
5.Verwenden Sie eine Build-Spezifikation, um die AssumeRole-Anmeldeinformationen in eine Umgebungsvariable zu exportieren. Verwenden Sie dann den Befehl docker build, um die Anmeldeinformationen an Ihre Docker-Laufzeit zu übergeben. Zum Beispiel:
version: 0.2 phases: install: runtime-versions: nodejs: 16 commands: - ASSUME_ROLE_ARN="arn:aws:iam::$account_id:role/Secretassumerole" - TEMP_ROLE=$(aws sts assume-role --role-arn $ASSUME_ROLE_ARN --role-session-name test) - export TEMP_ROLE - export AWS_ACCESS_KEY_ID=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.AccessKeyId') - export AWS_SECRET_ACCESS_KEY=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SecretAccessKey') - export AWS_SESSION_TOKEN=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SessionToken') pre_build: commands: - echo Build started on 'date' - echo Building the Docker image... - docker build . --build-arg AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID --build-arg AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY --build-arg AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN
**Hinweis:**Sie können --duration-seconds verwenden, um die maximale Sitzungsdauer für die Rolle übernehmen festzulegen. Da dieser Prozess die Verkettung von Rollen beinhaltet, akzeptiert die Option \ --duration-seconds einen Maximalwert von 3600 Sekunden. Wenn Sie einen Wert über 3600 Sekunden festlegen, schlägt der Vorgang fehl. Weitere Informationen finden Sie im Abschnitt Rollenverkettung unter Begriffe und Konzepte von Rollen.
6.Rufen Sie in Ihrem Dockerfile die AssumeRole-Anmeldeinformationen ab, wenn Sie ein Image erstellen. Zum Beispiel:
FROM amazonlinux:latest RUN yum -y install aws-cli ARG AWS_ACCESS_KEY_ID ARG AWS_SECRET_ACCESS_KEY ARG AWS_SESSION_TOKEN RUN echo $AWS_ACCESS_KEY_ID RUN echo $AWS_SECRET_ACCESS_KEY RUN echo $AWS_SESSION_TOKEN RUN aws sts get-caller-identity RUN aws secretsmanager get-secret-value --secret-id tutorials/AWSExampleSecret --region ap-northeast-1
**Hinweis:**Sie können RUN aws secretsmanager get-secret-value --secret-id tutorials/AWSExampleSecret in DOCKERFILE hinzufügen, um die Geheimnisse im Build abzurufen. Warnung: Auf diese Weise können Sie Ihre Geheimnisse in den Build-Protokollen preisgeben.
Ausgabe:
Step 8/11 : RUN echo $AWS_ACCESS_KEY_ID ---> Running in 1a1b1c1d1e1f AKIAIOSFODNN7EXAMPLE Removing intermediate container 2a3b4c5d6e7f ---> 32a8170f9697 Step 9/11 : RUN echo $AWS_SECRET_ACCESS_KEY ---> Running in 3a3b3c3d3e3f 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 Removing intermediate container 3a3b3c3d3e3f ---> 4a4b4c4d4e4f Step 10/11 : RUN echo $AWS_SESSION_TOKEN ---> Running in 5a5b5c5d5e5f FQoGZXIvYXdzEJP//////////wEaDPTjooaOAaU8NDj5oyKkAjVwT4uQHTZJdCtfOZxa6wTZVOy0Zkw+laN1RRVZhvhdPOWhU8VgK2d7ZgTlqaXn4NSrdWlnub6g5JobP4o509t3VLdMUR5ZJJcpnSlJAY5YM7vlPndroGcV+Y689ztVzQ1uVxdtpjQK1qh87fw6m0dHt7Q8Y8TferRNVvCM4kOroxPzovTbO6IkLDcBp8PhOVgtVtxEpON6nZrN990zzUmhXjT0vrtpDtAi339hhs7fzDOrnllQHSAmSerT0NhMOYVqBH1HJOq3FYnG+TUbHENpSq3kwTiPL2uoTw7/Ufrrgz4i3ENHm3rIWlbD8VuleDl5yhooKifmKDPjQAHs5HbVjD9lnxQFrCIuyvZdmsqzgoIjPt6z5H8lzugLHAAmbgiOwDoo+Oba7QU= Removing intermediate container 5a5b5c5d5e5f ---> 0cc838f3c865 Step 11/11 : RUN aws sts get-caller-identity ---> Running in 6a6b6c6d6e6f { "Account": "xxxxxxxxx", "UserId": "AIDACKCEVSQ6C2EXAMPLE:test", "Arn": "arn:aws:sts::$account_id:assumed-role/Secretassumerole/test" } Removing intermediate container 6d525393d667 ---> 2da2f38adc77 Step 12/12 : RUN aws secretsmanager get-secret-value --secret-id tutorials/AWSExampleSecret --region ap-northeast-1 ---> Running in 7a7b7c7d7e7f { "Name": "tutorials/AWSExampleSecret", "VersionId": "1a23bb45-679c-1d2e-fg34-567891234hi5", "SecretString": "{\"username\":\"myserviceusername\",\"password\":\"yourPassword\"}", "VersionStages": [ "AWSCURRENT" ], "CreatedDate": 1558616482.926, "ARN": "arn:aws:secretsmanager:ap-northeast-1:$account_id:secret:tutorials/M-EHWYme" } Removing intermediate container 8a8b8c8d8e8f ---> 9a9b9c9d9e9f Successfully built 9a9b9c9d9e9f
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 3 Jahren