2

我想将我的凭据存储~/.aws/credentials在环境变量中而不是环境变量中,但我很挣扎。

加载我使用的凭据(从这里

credentials = Aws::SharedCredentials.new({region: 'myregion', profile_name: 'myprofile'}) 

~/.aws/credentials的是

[myprofile]
AWS_ACCESS_KEY = XXXXXXXXXXXXXXXXXXX
AWS_SECRET_KEY = YYYYYYYYYYYYYYYYYYYYYYYYYYY

~/.aws/config的是

[myprofile]
output = json
region = myregion

然后我定义一个资源

aws = Aws::EC2::Resource.new(region: 'eu....', credentials: credentials)

但是如果我尝试例如

aws.instances.first

我得到错误Error: #<Aws::Errors::MissingCredentialsError: unable to sign request without credentials set>

如果我对密钥进行硬编码,一切正常

4

2 回答 2

4

根据源代码, aws 仅从 ENV 自动加载凭据。

您可以创建具有自定义属性的凭据。

credentials = Aws::Credentials.new(AWS_ACCESS_KEY, AWS_SECRET_KEY)
aws = Aws::EC2::Resource.new(region: 'eu-central-1', credentials: credentials)

在您的特定情况下,似乎无法将自定义凭据传递给SharedCredentials.

于 2018-04-20T07:35:24.520 回答
0

如果您只是这样做 credentials = Aws::SharedCredentials.new() ,它会加载default配置文件。您应该能够myprofile通过:profile_name作为选项传入来加载。

我不知道您是否也可以覆盖该区域。您可能想尝试放弃该选项,看看它是如何工作的。

于 2018-04-20T13:11:44.713 回答