You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Ruby SDK凭证加载问题:无法通过~/.aws/credentials读取凭证

解决AWS SDK Ruby凭证加载失败的问题

我来帮你排查这个凭证加载失败的问题,咱们一步步拆解可能的原因:

1. 检查credentials文件的键名格式

你当前的~/.aws/credentials文件里用了AWS_ACCESS_KEY和AWS_SECRET_KEY,但AWS SDK要求的正确键名是aws_access_key_id和aws_secret_access_key,这是最常见的错误点。修改后的文件内容应该是:

[myprofile]
aws_access_key_id = XXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYY

注意键名是全小写+下划线,而且每个键值对要单独占一行,格式要规范。

2. 修正SharedCredentials的初始化代码

Aws::SharedCredentials的初始化参数里不需要region,这个参数应该放在EC2资源的初始化里,或者依赖~/.aws/config里的配置。你可以把代码改成:

# 只指定profile名称即可
credentials = Aws::SharedCredentials.new(profile_name: 'myprofile')

3. 确保配置文件的权限符合安全要求

AWS SDK会拒绝加载权限过于开放的凭证文件,因为这有安全风险。你需要给.aws目录和凭证文件设置正确的权限:

chmod 700 ~/.aws
chmod 600 ~/.aws/credentials

4. 简化EC2资源的初始化

如果你的~/.aws/config里已经为myprofile设置了region = myregion,那创建EC2资源时可以直接指定profile,不用手动传credentials:

aws = Aws::EC2::Resource.new(profile: 'myprofile')

如果要显式传credentials,也可以这么写:

credentials = Aws::SharedCredentials.new(profile_name: 'myprofile')
aws = Aws::EC2::Resource.new(credentials: credentials, region: 'myregion')

5. 快速测试凭证是否加载成功

可以先写一段小代码验证凭证是否能被正确读取,排除其他干扰:

require 'aws-sdk-core'

begin
  credentials = Aws::SharedCredentials.new(profile_name: 'myprofile')
  puts "Access key loaded: #{credentials.access_key_id}"
  puts "Secret key loaded: #{credentials.secret_access_key}"
rescue Aws::Errors::MissingCredentialsError => e
  puts "凭证加载失败:#{e.message}"
end

如果这段代码报错,说明问题出在凭证文件本身;如果能正常打印,那再检查EC2资源初始化的逻辑。


内容的提问来源于stack exchange,提问作者Rojj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:18:21