ruby/rubygems · error · Gem::S3URISigner::ConfigurationError

s3_source for #{host} missing id or secret

Error message

s3_source for #{host} missing id or secret

What it means

Error "s3_source for #{host} missing id or secret" thrown in ruby/rubygems.

Source

Thrown at lib/rubygems/s3_uri_signer.rb:137

    provider = auth[:provider] || auth["provider"]
    case provider
    when "env"
      id = ENV["AWS_ACCESS_KEY_ID"]
      secret = ENV["AWS_SECRET_ACCESS_KEY"]
      security_token = ENV["AWS_SESSION_TOKEN"]
    when "instance_profile"
      credentials = ec2_metadata_credentials_json
      id = credentials["AccessKeyId"]
      secret = credentials["SecretAccessKey"]
      security_token = credentials["Token"]
    else
      id = auth[:id] || auth["id"]
      secret = auth[:secret] || auth["secret"]
      security_token = auth[:security_token] || auth["security_token"]
    end

    raise ConfigurationError.new("s3_source for #{host} missing id or secret") unless id && secret

    region = auth[:region] || auth["region"] || "us-east-1"
    S3Config.new(id, secret, security_token, region)
  end

  def base64_uri_escape(str)
    str.gsub(%r{[\+/=\n]}, BASE64_URI_TRANSLATE)
  end

  def ec2_metadata_credentials_json
    require_relative "vendored_net_http"
    require_relative "request"
    require_relative "request/connection_pools"
    require "json"

    # First try V2 fallback to V1
    res = nil
    begin

View on GitHub (pinned to 86cbb817a3)

Solutions

  1. Add both id and secret keys to the host's s3_source entry in ~/.gemrc (or use a provider such as iam_instance_profile)

When it happens

Trigger: Thrown at lib/rubygems/s3_uri_signer.rb:137 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ruby/rubygems@86cbb817a3 (2026-08-23). Data as JSON: /api/errors/bb7debb2bf9faaa6. Report an issue: GitHub.