AWS SDK无法读取环境变量

来源:爱站网时间:2021-09-17编辑:网友分享
我为Jenkins sudo apt-get update -y sudo apt-get update -y sudo apt-get install -y python3 python-pip python-devel sudo pip install awscli S3_LOGIN = $(aws sts假定-...]设置如下所示的AWS_ env变量

问题描述


我为詹金斯设置了如下的AWS_ env变量

    sudo apt-get update -y
    sudo apt-get install -y python3 python-pip python-devel
    sudo pip install awscli
    S3_LOGIN=$(aws sts assume-role --role-arn rolename --role-session-name s3_session)
    export AWS_CREDENTIAL_PROFILES_FILE=~/.aws/credentials
    export AWS_ACCESS_KEY_ID=$(echo ${S3_LOGIN}| jq --raw-output '.Credentials|"\(.AccessKeyId)"')
    export AWS_SECRET_ACCESS_KEY=$(echo ${S3_LOGIN} | jq --raw-output '.Credentials|"\(.SecretAccessKey)"')
    export AWS_SESSION_TOKEN=$(echo ${S3_LOGIN} | jq --raw-output '.Credentials|"\(.SessionToken)"')
    aws configure set default.region us-east-2
    aws configure set AWS_ACCESS_KEY_ID $AWS_ACCESS_KEY_ID
    aws configure set AWS_SECRET_ACCESS_KEY $AWS_SECRET_ACCESS_KEY

但是当我尝试从代码中获取它们时,sdk无法读取已设置的env变量

 AWSCredentials evc = new EnvironmentVariableCredentialsProvider().getCredentials();
 AmazonS3Client amazonS3 = new AmazonS3Client(evc);
 amazonS3.setRegion(RegionUtils.getRegion("us-east-2"));

com.amazonaws.AmazonClientException:无法加载AWS凭证从环境变量(AWS_ACCESS_KEY_ID(或AWS_ACCESS_KEY)AWS_SECRET_KEY(或AWS_SECRET_ACCESS_KEY))

[AWS SDK中的EnvironmentVariableCredentialsProvider看起来如下,

public AWSCredentials getCredentials() {
        String accessKey = System.getenv(ACCESS_KEY_ENV_VAR);
        if (accessKey == null) {
            accessKey = System.getenv(ALTERNATE_ACCESS_KEY_ENV_VAR);
        }

        String secretKey = System.getenv(SECRET_KEY_ENV_VAR);
        if (secretKey == null) {
            secretKey = System.getenv(ALTERNATE_SECRET_KEY_ENV_VAR);
        }

        accessKey = StringUtils.trim(accessKey);
        secretKey = StringUtils.trim(secretKey);
        String sessionToken =
            StringUtils.trim(System.getenv(AWS_SESSION_TOKEN_ENV_VAR));

        if (StringUtils.isNullOrEmpty(accessKey)
                || StringUtils.isNullOrEmpty(secretKey)) {

            throw new AmazonClientException(
                    "Unable to load AWS credentials from environment variables " +
                    "(" + ACCESS_KEY_ENV_VAR + " (or " + ALTERNATE_ACCESS_KEY_ENV_VAR + ") and " +
                    SECRET_KEY_ENV_VAR + " (or " + ALTERNATE_SECRET_KEY_ENV_VAR + "))");
        }

        return sessionToken == null ?
                new BasicAWSCredentials(accessKey, secretKey)
                :
                new BasicSessionCredentials(accessKey, secretKey, sessionToken);

}

我也尝试在下面使用,

 ProfileCredentialsProvider  evc = new ProfileCredentialsProvider();
        AmazonS3Client amazonS3 = new AmazonS3Client(evc);
        amazonS3.setRegion(RegionUtils.getRegion("us-east-2"));

但是即使我在脚本中设置了AWS_CREDENTIAL_PROFILES_FILE,我仍然可以获得AWS

在给定路径中找不到凭证配置文件:/root/.aws/credentials

解决方法:


您应该能够使用AWS_CREDENTIAL_PROFILES_FILE环境变量来更改凭据文件的位置

上一篇:一种布局中图像的最大尺寸是多少?

下一篇:带有正则表达式匹配器的Java get组

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载