CodeBuild上でビルドしたDockerコンテナからAWSの認証情報が上手く使えないみたいなので調べてみました。
そもそも http://169.254.169.254
が使えなくて、参考URLにあるように http://169.254.170.2
から取得します。更に AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
の環境変数を組み合わせると認証情報が取得できます。
$ curl http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
{
"AccessKeyId": "ACCESS_KEY_ID",
"Expiration": "EXPIRATION_DATE",
"RoleArn": "TASK_ROLE_ARN",
"SecretAccessKey": "SECRET_ACCESS_KEY",
"Token": "SECURITY_TOKEN_STRING"
}
ちなみに AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
の変数には以下のような値が入っています。
$ echo $AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
/v2/credentials/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
上記踏まえた上で認証情報をDockerコンテナにAWSの認証情報渡す buildspec.yml
の例です。
version: 0.2
phases:
build:
commands:
# 省略----------------------------
- export NO_PROXY=169.254.170.2 # Proxyがある場合
- AWS_CRED=`curl http://169.254.170.2${AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}`
- AWS_ACCESS_KEY_ID=`echo ${AWS_CRED} | jq -r .AccessKeyId`
- AWS_SECRET_ACCESS_KEY=`echo ${AWS_CRED} | jq -r .SecretAccessKey`
- AWS_SESSION_TOKEN=`echo ${AWS_CRED} | jq -r .Token`
- |
docker run \
-e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
-e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \
-e AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN} \
${IMAGE_NAME} ${COMMAND}
参考URL