CodeBuild内のgradleからでIAM Roleを使ってS3にアクセスする
CodeBuildでJavaのコードをビルドする際、S3をmavenリポジトリとして使用することにしました。
その際設定でけっこう詰まったので記事にしてみました。
credentialsで設定する
gradleのドキュメントには次のように書かれています。
repositories {
maven {
url "s3://myCompanyBucket/maven2"
credentials(AwsCredentials) {
accessKey "someKey"
secretKey "someSecret"
// optional
sessionToken "someSTSToken"
}
}
}
今回はCodeBuildにassumeされたIAM RoleからaccessKey, secretKey, sessionTokenを取得するので、次のようなコードになります。
import com.amazonaws.auth.AWSCredentialsProviderChain
import com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper
import com.amazonaws.auth.AWSSessionCredentials
...
repositories {
maven {
url "s3://sample-maven-repository/repository"
credentials(AwsCredentials) {
def credentials = new AWSCredentialsProviderChain(
new EC2ContainerCredentialsProviderWrapper()
).getCredentials()
accessKey credentials.getAWSAccessKeyId()
secretKey credentials.getAWSSecretKey()
if (credentials instanceof AWSSessionCredentials) {
sessionToken credentials.sessionToken
}
}
}
}
authenticationで指定するとエラーになる
一方、gradleのドキュメントには下記のような指定方法も記載してあります。
repositories {
maven {
url "s3://myCompanyBucket/maven2"
authentication {
awsIm(AwsImAuthentication) // load from EC2 role or env var
}
}
}
しかし、上記だとビルドはエラーとなります。
エラーログを見た所、InstanceProfileCredentialsProvider
がhttp://169.254.169.254/latest/meta-data/iam/security-credentials/
にアクセスしており、そこでエラーが発生し、全体の処理が終了しているようです。
Author And Source
この問題について(CodeBuild内のgradleからでIAM Roleを使ってS3にアクセスする), 我々は、より多くの情報をここで見つけました https://qiita.com/reireias/items/e00fcd6be159b27be641著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .