当前位置:  开发笔记 > 编程语言 > 正文

在Gradle中获取AWS角色凭证

如何解决《在Gradle中获取AWS角色凭证》经验,为你挑选了1个好方法。

我有一个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/*"
        ]
    }
  ]
}

部署新服务器时,出现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附加了策略的用户,而不是使用InstanceProfileCredentialsProvideruse DefaultAWSCredentialsProviderChain,构建可以正常运行。但是DefaultAWSCredentialsProviderChain,再次使用和部署实例会导致相同的异常。

任何帮助将不胜感激。

更新:

使用AWS CLI和进行的测试STSAssumeRoleSessionCredentialsProvider表明,构建脚本正在使用正确的DefaultAWSCredentialsProviderChain提供者角色。向AmazonS3FullAccess角色添加策略并没有改变结果

我正在使用Jenkins部署代码,所以我的下一个线索是那里可能有问题

更新2:

我尝试捕获网络流量以查看哪些凭据发送到了AWS,并且似乎Gradle和AWS CLI发送了不同的凭据,所以我回到了最初的假设,即Gradle扮演的角色不正确



1> Guy Grin..:

如果有人遇到此问题。从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'
}

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有