Hello,
I use AWS CodeBuild to launch AMI building process with Packer, in a cross-account context.
In a central account, Codebuild project is started with a specific role, then we need to make a chained assume role (short term) and let packer manage this assume-role.
But in this way, build duration is limited to ~1 hour as short term credentials can't last more than 1 hour.
Before moving to a non-cross account architecture, we want to test every possibilities provided by Packer.
One of those is using the newly integrated feature in AWS Go SDK, credential_source, but it does not seems to work with Packer.
We execute a shell script before running packer, to configure AWS profiles.
This is how the working assume role is done, but we can't renew credentials, and bypass 1 hour limitation, even if container credentials have been renew by Codebuild in metadata (~/.aws/config and ~/.aws/credentials files are created successfully after that):
AppRoleArn="arn:aws:iam::XXXXXXXXXXX:role/rol-test-dev"
curl -sqL -o aws_credentials.json
http://169.254.170.2/$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI > aws_credentials.json
aws configure set region "eu-west-1"
aws configure set profile.codebuild.aws_access_key_id `jq -r '.AccessKeyId' aws_credentials.json`
aws configure set profile.codebuild.aws_secret_access_key `jq -r '.SecretAccessKey' aws_credentials.json`
aws configure set profile.codebuild.aws_session_token `jq -r '.Token' aws_credentials.json`
aws configure set profile.codebuild.expiration `jq -r '.Expiration' aws_credentials.json`
aws configure set profile.packer.role_arn "${AppRoleArn}"
aws configure set profile.packer.source_profile "codebuild"
export AWS_PROFILE=packer
Here are the packer Codebuild logs when its working :
·[1;32mamazon-ebs output will be in this color.·[0m
·[1;32m==> amazon-ebs: Prevalidating AMI Name: XXXXXXXXXXXXXXXX·[0m
·[0;32m amazon-ebs: Found Image ID: ami-XXXXXXXXXXXXXXX·[0m
·[1;32m==> amazon-ebs: Creating temporary keypair: packer_5bd96a1d-1701-adc8-9575-70006aa0e5d2·[0m
·[1;32m==> amazon-ebs: Launching a source AWS instance...·[0m
·[1;32m==> amazon-ebs: Adding tags to source instance·[0m
·[0;32m amazon-ebs: Instance ID: i-XXXXXXXXXXXXXX·[0m
·[1;32m==> amazon-ebs: Waiting for instance (i-XXXXXXXXXXXXX) to become ready...·[0m
·[1;32m==> amazon-ebs: Using ssh communicator to connect: XXXXXXXXXXXXXX·[0m
·[1;32m==> amazon-ebs: Waiting for SSH to become available...·[0m
This is the not working assume role, the ~/.aws/config file is generated successfully:
AppRoleArn="arn:aws:iam::XXXXXXXXXXX:role/rol-test-dev"
aws configure set region "eu-west-1"
aws configure set profile.packer.role_arn "${AppRoleArn}"
aws configure set profile.packer.credential_source "EcsContainer"
export AWS_PROFILE=packer
Here are the packer Codebuild logs when its not working :
·[1;32mamazon-ebs output will be in this color.·[0m
·[1;32m==> amazon-ebs: Prevalidating AMI Name: XXXXXXXXXXXXX·[0m
·[0;32m amazon-ebs: Found Image ID: ami-XXXXXXXXXXXX·[0m
·[1;31m==> amazon-ebs: Describing the subnet: subnet-XXXXXXXXXXXXX returned error: InvalidSubnetID.NotFound: The subnet ID 'subnet-XXXXXXXXXXXXXX' does not exist
==> amazon-ebs: status code: 400, request id: 78cb2098-32d5-4cb6-a34f-1fc84f32257b.·[0m
·[1;31mBuild 'amazon-ebs' errored: Describing the subnet: subnet-XXXXXXXXXXXXXXX returned error: InvalidSubnetID.NotFound: The subnet ID 'subnet-XXXXXXXXXXXXX' does not exist
status code: 400, request id: 78cb2098-32d5-4cb6-a34f-1fc84f32257b.·[0m
==> Some builds didn't complete successfully and had errors:
--> amazon-ebs: Describing the subnet: subnet-XXXXXXXXXXXXXXX returned error: InvalidSubnetID.NotFound: The subnet ID 'subnet-XXXXXXXXXXXXXXX' does not exist
status code: 400, request id: 78cb2098-32d5-4cb6-a34f-1fc84f32257b.
==> Builds finished but no artifacts were created.
Does someone already tried credential_source or used packer in a cross account Codebuild config ?