0

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)、キーが表示されます。したがって、「資格情報がありません」というエラーが表示されますが、資格情報を確認できることはわかっています。変。

それで、私はいくつかの(おそらく基本的な)ステップを逃したと思うところに来ましたが、何がわからないのですか。

その他の注意事項:

4

1 に答える 1

0

AWS SDK ではなく AWS CLI を使用して Amazon S3 にアクセスできる場合は、次のトラブルシューティング手順に従ってください。

  1. 使用している AWS CLI と AWS SDK が同じ認証情報で設定されていることを確認します。

AWS CLI で構成された認証情報を取得するには、次のコマンドを実行します。

aws iam リスト アクセス キー

AWS CLI に関連付けられた AWS Identity and Access Management (IAM) ロールを使用している場合は、次のコマンドを実行してロールを取得します。

aws sts get-caller-identity

: * AWS CLI と AWS SDK が異なる認証情報を使用している場合は、AWS CLI に保存されている認証情報で AWS SDK を使用してみてください。

  1. Amazon S3 への AWS SDK リクエストが、ファイアウォール、HTTP プロキシ、または Amazon VPC エンドポイントによって許可されているかどうかを確認します。
  • 設定された認証情報が同じ場合は、AWS CLI と AWS SDK を介した Amazon S3 へのリクエストが同じソースからのものかどうかを確認します。たとえば、リクエストが同じ Amazon Elastic Compute Cloud (Amazon EC2) インスタンスからのものかどうかを確認します。

  • リクエストが異なるソースからのものである場合、AWS SDK を使用するソースがファイアウォール、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/*"
            ]
        }
    ]
  }
于 2020-12-20T22:30:26.550 に答える