2017-05-16 5 views
0

Lauf Terraforming deploy in codebuild mit folgendem buildspec.yml. Scheint, dass Terraform die von der Codebuild-Rolle bereitgestellten IAM-Berechtigungen nicht übernimmt. Wir verwenden Remote-Zustand des Terraforming (Statusdatei in s3 gespeichert ist), wenn Terraforming für das Terraforming provider zu konfigurierenden es stirbt fragen versucht, den S3 Eimer mit der Statusdatei zu kontaktieren:AWS Codebuild Terraforming Anbieter

Downloading modules (if any)... 
Get: file:///tmp/src486521661/src/common/byu-aws-accounts-tf 
Get: file:///tmp/src486521661/src/common/base-aws-account- 
... 
Error configuring the backend "s3": No valid credential sources found for AWS Provider. 

Hier ist die buildspec .yml:

version: 0.1 
phases: 
    install: 
    commands: 
     - cd common && git clone https://[email protected]/aws-account-tools/acs.git 
     - export TerraformVersion=0.9.3 && cd /tmp && curl -o terraform.zip https://releases.hashicorp.com/terraform/${TerraformVersion}/terraform_${TerraformVersion}_linux_amd64.zip && unzip terraform.zip && mv terraform /usr/bin 
    build: 
    commands: 
     - cd accounts/00/dev-stack-oit-byu && terraform init && terraform plan && echo terraform apply 

Antwort

2

Bevor terraform init, fügen Sie die folgenden Zeilen:

export AWS_ACCESS_KEY_ID=`curl --silent 169.254.170.2:80$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI | jq -r '.AccessKeyId'` 
    export AWS_SECRET_ACCESS_KEY=`curl --silent 169.254.170.2:80$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI | jq -r '.SecretAccessKey'` 
    export AWS_SESSION_TOKEN=`curl --silent 169.254.170.2:80$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI | jq -r '.Token'` 

Es ist besser lesbar.

1

In Sie buildspec.yml versuchen:

env: 
    variables: 
    AWS_METADATA_ENDPOINT: "http://169.254.169.254:80$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 

Sie benötigen dies, weil TF für t aussehen Die Metadaten in der env-Variablen, die nicht im Container festgelegt sind.

+0

Dies ist nicht ausreichend für CodeBuild – kgpdeveloper

-1

Terraforming AWS-Provider bietet die folgende Methode der Authentifizierung:

Statische Berechtigungsnachweise

In diesem Fall können Sie den Zugriff hinzufügen und Tasten direkt in die tf-Konfigurationsdatei wie folgt absondern:

provider "aws" { 
    region  = "us-west-2" 
    access_key = "anaccesskey" 
    secret_key = "asecretkey" 
} 

Umgebungsvariablen

Sie importieren den Zugriffs- und den geheimen Schlüssel in die Umgebungsvariable. Tun Sie dies mit dem Exportbefehl

$ export AWS_ACCESS_KEY_ID="anaccesskey" 
$ export AWS_SECRET_ACCESS_KEY="asecretkey" 

Gemeinsame Credentials-Datei

Wenn Terraforming fehlschlagen Anmeldeinformationen zu erfassen, Inline, oder in der Umwelt, Terraforming prüft diese Lage, $ HOME/.aws/Anmeldeinformationen, in denen Falls Sie nicht brauchen, um oder die Berechtigung

EC2 Rolle

Wenn Sie ru in Ihrem Terraforming Config setzen zu erwähnen Wenn Terraform von einer EC2-Instanz mit einem IAM-Instanzprofil über eine IAM-Rolle ausgeführt wird, fragt Terraform den Metadaten-API-Endpunkt einfach nach Anmeldeinformationen. In diesem Fall müssen Sie die Zugriffs- und Geheimschlüssel in keiner Konfiguration angeben. Dies ist die bevorzugte Art und Weise

https://www.terraform.io/docs/providers/aws/ http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#instance-metadata-security-credentials

0

Ich hasse es zu schreiben, aber es ermöglicht Terraforming die codebuild IAM STS Zugriffstasten für den Zugriff auf und Terraforming Befehle aus codebuild als buildspec.yml

ausführen Es ist ziemlich praktisch für automatisierte Bereitstellungen der AWS-Infrastruktur, da Sie eine CodeBuild in alle Ihre AWS-Konten einfügen und sie mit einer CodePipeline auslösen können.

Bitte beachten Sie die Version: 0.2 Dies übergibt envars zwischen Befehlen als Version 0.1 hatte eine saubere Schale für jeden Befehl

Bitte aktualisieren Sie, wenn Sie etwas finden, besser:

version: 0.2 
env: 
    variables: 
    AWS_DEFAULT_REGION: "us-west-2" 
phases: 
    install: 
    commands: 
     - apt-get -y update 
     - apt-get -y install jq 
    pre_build: 
     commands: 

     # load acs submodule (since codebuild doesn't pull the .git folder from the repo 
     - cd common 
     - git clone https://[email protected]/aws-account-tools/acs.git 
     - cd ../ 

     #install terraform 
     - other/install-tf-linux64.sh 
     - terraform --version 

     #set env variables for terraform provider 
     - curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI | jq 'to_entries | [ .[] | select(.key | (contains("Expiration") or contains("RoleArn")) | not) ] | map(if .key == "AccessKeyId" then . + {"key":"AWS_ACCESS_KEY_ID"} else . end) | map(if .key == "SecretAccessKey" then . + {"key":"AWS_SECRET_ACCESS_KEY"} else . end) | map(if .key == "Token" then . + {"key":"AWS_SESSION_TOKEN"} else . end) | map("export \(.key)=\(.value)") | .[]' -r > /tmp/cred.txt # work around https://github.com/hashicorp/terraform/issues/8746 
     - chmod +x /tmp/cred.txt 
     - . /tmp/cred.txt 
    build: 
    commands: 
     - ls 
     - cd your/repo's/folder/with/main.tf 
     - terraform init 
     - terraform plan 
     - terraform apply 
Verwandte Themen