【问题标题】:AWS S3 not finding credentials in production?AWS S3 在生产中找不到凭证?
【发布时间】:2021-03-30 11:18:01
【问题描述】:

当我尝试将数据播种到 heroku(生产)上的应用程序时,我看到:

Aws::S3::Errors::AccessDenied: 拒绝访问

当我尝试手动测试时:

s3 = Aws::S3::Resource.new(region: 'us-east-1')
Aws::Sigv4::Errors::MissingCredentialsError: missing credentials, provide credentials with one of the following options:
  - :access_key_id and :secret_access_key
  - :credentials
  - :credentials_provider
from /app/vendor/bundle/ruby/2.7.0/gems/aws-sigv4-1.2.1/lib/aws-sigv4/signer.rb:613:in `extract_credentials_provider'

但这是不可能的,因为

# storage.yml
amazon:
  service: S3
  access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
  secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
  region: us-east-1  

如果我在 heroku 上的 rails 控制台中运行它:Rails.application.credentials.dig(:aws, :access_key_id),那么我看到了关键。所以它给出了“缺少凭据”错误,但我知道它可以看到凭据。很奇怪。

所以我来到了我认为我错过了一些(可能是基本的)步骤的地方,但我不知道是什么。

其他说明:

  • 我确认 rails master key 是通过运行 heroku run env 设置的,我可以看到它

【问题讨论】:

  • 您是否尝试在您的storage.yml 文件中添加bucke: your-bucketservice: S3

标签: ruby-on-rails amazon-web-services amazon-s3 heroku aws-sdk-ruby


【解决方案1】:

当您可以使用 AWS CLI 而不是 AWS 开发工具包访问 Amazon S3 时,请执行以下故障排除步骤:

  1. 验证您正在使用的 AWS CLI 和 AWS 开发工具包 配置了相同的凭据。

要获取在 AWS CLI 上配置的凭证,请运行以下命令:

aws iam 列表访问键

如果您使用与 AWS CLI 关联的 AWS Identity and Access Management (IAM) 角色,请运行以下命令以获取该角色:

aws sts 获取调用者身份

注意*如果 AWS CLI 和 AWS 开发工具包使用不同的凭证,请尝试将 AWS 开发工具包与存储在 AWS CLI 上的凭证一起使用。 p>

  1. 检查 AWS 开发工具包对 Amazon S3 的请求是否被 防火墙、HTTP 代理或 Amazon VPC 终端节点。
  • 如果配置的凭据相同,则检查请求是否 通过 AWS CLI 到 Amazon S3 和 AWS 开发工具包来自同一个 资源。例如,检查请求是否来自同一个亚马逊 弹性计算云 (Amazon EC2) 实例。

  • 如果请求来自不同的来源,则检查来源是否 使用 AWS 开发工具包通过防火墙、HTTP 代理发送请求, 或 VPC 终端节点。然后,验证防火墙、HTTP 代理或 VPC 端点允许您尝试发送到 Amazon S3 的请求。

例如,以下 VPC 终端节点策略允许 DOC-EXAMPLE-BUCKET 的下载和上传权限。如果您使用此 VPC 终端节点,您将被拒绝访问任何其他存储桶。

{
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 2017-11-16
    • 2016-06-26
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多