我有一个S3
存储库,我想在我的构建过程中访问该存储库。它包含我的项目的一些依赖项。我的项目被部署到具有指定角色的EC2实例 - Repo_dependent
。作用有一个Access_Repo
政策连接到它:在Gradle中获取AWS角色凭证
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1484560548000",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"
]
}
]
}
当我部署新的服务器,我收到了The AWS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 02169BFDCF7AFE10)
例外。
我的构建脚本是这样的(简写为简单起见)
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.amazonaws:aws-java-sdk:1.11.83'
}
}
import com.amazonaws.auth.*
repositories {
jcenter()
maven {
url "s3://my_bucket.s3.amazonaws.com"
credentials(AwsCredentials) {
def providercreds = new InstanceProfileCredentialsProvider().getCredentials()
accessKey providercreds.getAWSAccessKeyId()
secretKey providercreds.getAWSSecretKey()
}
}
}
我的假设是,我缺少的东西无论是EC2实例如何访问角色是如何定义自己的角色什么的。当试图在本地运行相同的脚本时,使用Access_Repo
策略附加到该脚本,而不是使用InstanceProfileCredentialsProvider
使用DefaultAWSCredentialsProviderChain
,构建运行良好。但是,使用DefaultAWSCredentialsProviderChain
并再次部署实例导致相同的异常。
任何帮助将非常感激。
更新:
测试使用AWS CLI和使用STSAssumeRoleSessionCredentialsProvider
进行显示的构建脚本使用与DefaultAWSCredentialsProviderChain
提供合适的角色。添加AmazonS3FullAccess
政策的作用并没有改变结果
我使用詹金斯部署代码,所以我的下引线的是,或许真的是有错的
UPDATE2:
我试图捕捉网络流量来查看哪些凭据发送到AWS,并且似乎不同的凭证由Gradle和AWS CLI发送,因此我回到了我原来的假设,即Gradle不能发挥正确的作用
通过观察URL,我觉得你是在弗吉尼亚州北部地区建立桶。您可以在构建脚本部分评论凭据定义。从我的角度来说,它搜索EC2实例(本地驱动器)内的访问密钥和密钥,而不是IAM角色。 –
不知道我明白..如果我删除凭证部分一切都会工作? –
它应该工作。代码显示它在本地搜索aws凭证.. –