Guy*_*rin 3 amazon-s3 amazon-ec2 gradle amazon-iam aws-sdk
我有一个S3要在构建过程中访问的存储库。它包含我项目的某些依赖项。我的项目已部署到具有指定角色-的EC2实例Repo_dependent。该角色具有Access_Repo附加的策略:
{
"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/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
部署新服务器时,出现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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的假设是,我在EC2实例如何访问其角色或在定义角色方面都缺少某些东西。当尝试在本地运行相同的脚本时,使用Access_Repo附加了策略的用户,而不是使用InstanceProfileCredentialsProvideruse DefaultAWSCredentialsProviderChain,构建可以正常运行。但是DefaultAWSCredentialsProviderChain,再次使用和部署实例会导致相同的异常。
任何帮助将不胜感激。
使用AWS CLI和进行的测试STSAssumeRoleSessionCredentialsProvider表明,构建脚本正在使用正确的DefaultAWSCredentialsProviderChain提供者角色。向AmazonS3FullAccess角色添加策略并没有改变结果
我正在使用Jenkins部署代码,所以我的下一个线索是那里可能有问题
我尝试捕获网络流量以查看哪些凭据发送到了AWS,并且似乎Gradle和AWS CLI发送了不同的凭据,所以我回到了最初的假设,即Gradle扮演的角色不正确
如果有人遇到此问题。从Gradle 3.0迁移到3.3后,我对其进行了修复。这使我可以使用以下代码:
buildscript {
repositories {
jcenter()
}
dependencies {
}
}
repositories {
jcenter()
maven {
url "s3://my_bucket.s3.amazonaws.com"
authentication {
awsIm(AwsImAuthentication)
}
}
}
task wrapper(type: Wrapper) {
gradleVersion = '3.3'
}
dependencies {
compile 'com.amazonaws:aws-java-sdk-iam:1.11.78'
compile 'com.amazonaws:aws-java-sdk-ec2:1.11.78'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3098 次 |
| 最近记录: |