1

Я использую журавль из тумана с несущей волной для загрузки файлов на s3. Загрузка идет нормально, и работает отлично, но после того, как я стараюсь, чтобы удалить некоторый экземпляр моей модели с вложенным файлом, он отправляет запрос удаления и возвращает Access Denied, как показано ниже:Fog Gem - доступ запрещен при удалении файла S3

лексемы
[fog][WARNING] fog: followed redirect to bucket-name.s3-us-west-2.amazonaws.com, connecting to the matching region will be more performant 
Excon::Error::Forbidden: Expected(204) <=> Actual(403 Forbidden) 
excon.error.response 
    :body   => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>EB625F4C97AD368E</RequestId><HostId>E+We/GvBslMHoNn9nTT6Uw3t0qfJ9jXHCNkJRu0KOk5sk8WoFZbkaIyUB0WcWNPZuH2uCeoZTIo=</HostId></Error>" 
    :cookies  => [ 
    ] 
    :headers  => { 
    "Content-Type"  => "application/xml" 
    "Date"    => "Wed, 21 Dec 2016 14:48:53 GMT" 
    "Server"   => "AmazonS3" 
    "x-amz-id-2"  => "E+We/GvBslMHoNn9nTT6Uw3t0qfJ9jXHCNkJRu0KOk5sk8WoFZbkaIyUB0WcWNPZuH2uCeoZTIo=" 
    "x-amz-request-id" => "EB625F4C97AD368E" 
    } 
    :host   => "bucket-name.s3.amazonaws.com" 
    :local_address => "192.168.2.106" 
    :local_port => 51425 
    :path   => "/uploads/conta/pdf_conta/375/1530_09-2016.pdf" 
    :port   => 443 
    :reason_phrase => "Forbidden" 
    :remote_ip  => "52.216.66.16" 
    :status  => 403 
    :status_line => "HTTP/1.1 403 Forbidden\r\n" 

    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/expects.rb:7:in `response_call' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/response_parser.rb:9:in `response_call' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/connection.rb:388:in `response' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/connection.rb:252:in `request' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/idempotent.rb:27:in `error_call' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/base.rb:11:in `error_call' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/base.rb:11:in `error_call' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/connection.rb:272:in `rescue in request' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/connection.rb:215:in `request' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/idempotent.rb:27:in `error_call' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/base.rb:11:in `error_call' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/base.rb:11:in `error_call' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/connection.rb:272:in `rescue in request' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/connection.rb:215:in `request' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/idempotent.rb:27:in `error_call' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/excon-0.54.0/lib/excon/middlewares/base.rb:11:in `error_call' 
... 36 levels... 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands/console_helper.rb:9:in `start' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:78:in `console' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands.rb:18:in `<top (required)>' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `block in require' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require' 
    from /home/ronanlopes/HY Brazil/HyBrazil/bin/rails:9:in `<top (required)>' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:287:in `load' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:287:in `block in load' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency' 
    from /home/ronanlopes/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:287:in `load' 
    from /home/ronanlopes/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
    from /home/ronanlopes/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
    from -e:1:in `<main>' 

пользователя I» m, используя в моей конфигурации AmazonS3FullAccess - AWS Managed policy, поэтому для меня это не имеет смысла. Есть идеи?

+0

Что происходит, когда вы вызываете 'AWS s3 rm' с теми же учетными данными на одном и том же объекте? –

+0

извините, но как и где именно я должен запускать эту команду? –

+0

Загрузите/установите AWS CLI, если вы еще этого не сделали, и запустите его в командной строке. https://aws.amazon.com/cli/ –

ответ

2

Из того, что я вижу, вы устанавливаете переменную bucket_name на драгоценный камень тумана, чтобы быть 'bucket-name', либо это, либо вы отредактировали его для публикации здесь. Ваш config/initializer/carrierwave.rb должен выглядеть примерно так

CarrierWave.configure do |config| 
     config.fog_credentials = { 
     # Configuration for Amazon S3 should be made available through an Environment variable. 
     # For local installations, export the env variable through the shell OR 
     # if using Passenger, set an Apache environment variable. 
     # 
     # In Heroku, follow http://devcenter.heroku.com/articles/config-vars 
     # 
     # $ heroku config:add S3_KEY=your_s3_access_key S3_SECRET=your_s3_secret S3_REGION=eu-west-1 S3_ASSET_URL=http://assets.example.com/ S3_BUCKET_NAME=s3_bucket/folder 

     # Configuration for Amazon S3 
     :provider    => 'AWS', 
     :aws_access_key_id  => ENV['S3_KEY'], 
     :aws_secret_access_key => ENV['S3_SECRET'], 
     :region    => ENV['S3_REGION'] 
     } 

     # For testing, upload files to local `tmp` folder. 
     if Rails.env.test? || Rails.env.cucumber? 
     config.storage = :file 
     config.enable_processing = false 
     config.root = "#{Rails.root}/tmp" 
     else 
     config.storage = :fog 
     end 

     config.cache_dir = "#{Rails.root}/tmp/uploads"     # To let CarrierWave work on heroku 

     config.fog_directory = ENV['S3_BUCKET_NAME'] 
     config.s3_access_policy = :public_read       # Generate http:// urls. Defaults to :authenticated_read (https://) 
     config.fog_host   = "#{ENV['S3_ASSET_URL']}/#{ENV['S3_BUCKET_NAME']}" 
    end 

Вы можете быть настройки ENV['S3_BUCKET_NAME'] или ENV['S3_ASSET_URL'] переменных неправильно, или даже установить его ручное ее закрытие, проверить те, в файле .env