如何向 AWS 用户授予访问 Hartl 的 rails 教程的权限
How to grant permissions to AWS user for Hartl's rails tutorial
我不知道如何(或在何处)从 AWS 向用户授予读写权限,以便用户可以在生产环境中 post sample_app 上的图片。这是第11章的最后一个任务,教程中没有涉及,我在任何地方都找不到解决方案。
这是 carrier_wave.rb
文件:
if Rails.env.production?
CarrierWave.configure do |config|
config.fog_credentials = {
# Configuration for Amazon S3
:provider => 'AWS',
:aws_access_key_id => ENV['lalala'],
:aws_secret_access_key => ENV['oloalle']
}
config.fog_directory = ENV['name of bucket']
end
end
这是教程中的过程:
1) 创建 AWS IAM 用户并记录访问权限和密钥 - 完成
2) 创建 S3 存储桶 - 完成
3) 为上一步创建的用户授予读写权限 - 如何???
4) 然后我 运行 这三个命令:
$ heroku config:set S3_ACCESS_KEY=lalala
$ heroku config:set S3_SECRET_KEY=oloalle
$ heroku config:set S3_BUCKET=name of bucket
5) 推送到 git 和 heroku - 完成
6) heroku pg:reset DATABASE
- 完成
7)heroku run rake db:migrate
在这里我收到这条消息:
Running `rake db:migrate` attached to terminal... up, run.7906
rake aborted!
ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/core/service.rb:244:in `validate_options'
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/core/service.rb:268:in `handle_settings'
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/core/service.rb:98:in `new'
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/storage.rb:25:in `new'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:83:in `eager_load_fog'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:96:in `fog_credentials='
/app/config/initializers/carrier_wave.rb:3:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:118:in `configure'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave.rb:14:in `configure'
/app/config/initializers/carrier_wave.rb:2:in `<top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:652:in `block in load_config_initializer'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/notifications.rb:166:in `instrument'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:651:in `load_config_initializer'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `block in <class:Engine>'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `instance_exec'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `run'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:55:in `block in run_initializers'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:44:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:44:in `tsort_each_child'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:54:in `run_initializers'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:352:in `initialize!'
/app/config/environment.rb:5:in `<top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:328:in `require'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:328:in `require_environment!'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:443:in `block in run_tasks_blocks'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)
在 Services -> IAM
中,点击 IAM Resources
下面的 1 User(s)
。 Select 您希望获得权限的用户。在此用户的个人资料中,单击 Attach User Policy
。单击 Select
以获得 Amazon S3 Full Access
,最后单击 Apply Policy
。
对于以后的其他人,。
继续 Heroku,在您的应用程序上,转到设置,点击显示配置变量。
点击右侧的“编辑”并在那里输入您的秘密:
S3_BUCKET: name of your bucket goes here
S3_ACCESS_KEY: xxxxx
S3_SECRET_KEY: xxxx
在 config/initializers/carrierwave.rb 或任何你输入秘密的地方应该有:
CarrierWave.configure do |config|
config.root = Rails.root.join('tmp') # adding these...
config.cache_dir = 'carrierwave' # ...two lines
config.fog_credentials = {
:provider => 'AWS', # required
:s3_access_key_id => ENV['S3_ACCESS_KEY'], # required
:s3_secret_access_key => ENV['S3_SECRET_KEY'], # required
:region => 'eu-west-1', # optional, defaults to 'us-east-1'
:host => 's3.example.com', # optional, defaults to nil
:endpoint => 'https://s3.example.com:8080' # optional, defaults to nil
}
config.fog_directory = ENV['S3_Bucket'] # required
config.fog_public = false # optional, defaults to true
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
end
我发现上面选择的正确答案不适合我。经过多次试验和错误,这最终对我有用。
我按照第一步手动输入上面列出的秘密信息...
Go on Heroku, on your application, go to settings, hit Reveal Config Vars.
Click on on Edit on the right side and enter your secrets there:
S3_BUCKET: name of your bucket goes here
S3_ACCESS_KEY: xxxxx
S3_SECRET_KEY: xxxx
但是 carrier_wave 文件中的细微差别似乎起作用了。
注意包围 if Rails.env.production?
行和 end
。
carrier_wave.rb
if Rails.env.production?
CarrierWave.configure do |config|
config.root = Rails.root.join('tmp') # adding these...
config.cache_dir = 'carrierwave' # ...two lines
config.fog_credentials = {
:provider => 'AWS', # required
:aws_access_key_id => ENV['S3_ACCESS_KEY'],
:aws_secret_access_key => ENV['S3_SECRET_KEY'],
:region => 'eu-west-2', # optional, defaults to 'us-east-1'
:host => 's3.example.com', # optional, defaults to nil
:endpoint => 'https://s3.example.com:8080' # optional, defaults to nil
}
config.fog_directory = ENV['S3_Bucket'] # required
config.fog_public = false # optional, defaults to true
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
end
end
不确定这是否是问题所在。
进行更改后,我根据 Michael Hartl 的说明完成了这一章。
We’re now ready to commit the changes on our topic branch and merge
back to master:
$ bundle exec rake test
$ git add -A
$ git commit -m "Add user microposts"
$ git checkout master
$ git merge user-microposts
$ git push
Then we deploy, reset the database, and reseed the sample data:
$ git push heroku
$ heroku pg:reset DATABASE
$ heroku run rake db:migrate
$ heroku run rake db:seed
这是我创建的教程,目的是在 Rails 教程(第 3 版)第 11 章 Ruby 末尾的 Michael Hartl 离开的地方接手。它应该回答你的问题和更多
让 railstutorial.org 示例应用程序在 Heroku 和 AWS 之间运行是一件非常痛苦的事情。但我做到了。如果您找到本教程,则意味着您可能遇到了无法克服的错误。没关系。我有几个。
2020 Note: It's possible that everything here referencing a Region for S3 is no longer needed, or perhaps was never needed. When I originally got this all to work properly it was after adding the region information. However, S3 Buckets all share a global namespace. So if anybody is still reading this, try it all without the region stuff first, and leave a comment about whether it works or not. Anyway, back to the tutorial...
您需要做的第一件事是回顾 Hartl 提供的代码。确保您完全按照显示的方式输入(或 copy/pasted 它)。在本节的所有代码中,您可能只需要添加一小部分。 “区域”环境变量。如果您创建不在默认美国区域的存储桶,则需要此变量。稍后会详细介绍。这是 /config/initializers/carrier_wave.rb
:
的代码
if Rails.env.production?
CarrierWave.configure do |config|
config.fog_credentials = {
# Configuration for Amazon S3
:provider => 'AWS',
:aws_access_key_id => ENV['S3_ACCESS_KEY'],
:aws_secret_access_key => ENV['S3_SECRET_KEY'],
:region => ENV['S3_REGION']
}
config.fog_directory = ENV['S3_BUCKET']
end
end
那条线 :region => ENV['S3_REGION']
对很多人来说都是个问题。稍后会详细介绍。
您应该完全按照所示使用该代码块。 请勿将您的实际密钥放在那里。我们会单独将它们发送到 Heroku。
如果您必须添加那行代码,请不要忘记将其提交到 git 并将其推送到 Heroku。
现在让我们继续讨论您的 AWS 账户和安全性。
- 首先,创建您的 AWS 帐户。 在大多数情况下,这就像注册任何网站一样。制作一个漂亮的长密码并将其存储在安全的地方,例如加密的密码管理器。当您创建帐户时,您将获得第一组 AWS 密钥。您不会在本教程中使用它们,但您可能在将来的某个时候需要它们,因此请将它们保存在安全的地方。
- 去S3部分做一个bucket。它必须有一个唯一的
名字,所以我通常只是把日期放在最后就行了。例如,您可以将其命名为“my-sample-app-bucket-20160126”。一旦您
已创建您的存储桶,单击名称,然后单击属性。
了解您的存储桶位于哪个“区域”对您来说很重要。找到它,
并记下它。稍后你会用到它。
- 您的主帐户可能拥有对所有内容的完全权限,因此我们不要使用它在两个网络服务之间传输随机数据。如果它泄露出去,你可能会损失很多钱。我们将创建一个有限的用户。 在IAM部分新建一个User。我将其命名为“fog”,因为这是处理发送和接收的云服务软件。创建它时,您可以选择显示 and/or 下载与新用户关联的密钥。重要的是你把这个放在安全的地方
和安全的地方。它不会进入您的代码,因为那可能会
最终出现在其他人可以看到的存储库中。另外,不要给这个
新用户密码,因为它不会登录到 AWS 仪表板。
- 新建一个群组。我称我的为“s3railsbucket”。这是
将分配权限。将“雾”添加到该组。
- 转到“政策”部分。单击“创建策略”,然后单击 select“创建您的
Own Policy”。给它起一个以“Allow”开头的名称,这样它就会显示在附近
策略列表的顶部。这是一个巨大的清单。这是我所做的:
策略名称: AllowFullAccessToMySampleAppBucket20160126
说明:允许远程write/delete访问名为
my-sample-app-bucket-20160126.
政策文件:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-sample-app-bucket-20160126",
"arn:aws:s3:::my-sample-app-bucket-20160126/*"
]
}
]
}
- 返回组部分,select你创建的组,然后添加
您对小组的新政策。
AWS 配置到此结束。我不需要制定政策来允许
“fog”列出存储桶的内容,即使我尝试过大多数教程
说那是必要的。我认为只有当你想要一个用户时才有必要
可以通过仪表板登录。
现在进行 Heroku 配置。这些东西被输入到你的
命令提示符,就像 'heroku run rake db:migrate' 之类的。这是
在其中输入您从之前创建的“fog”用户那里获得的 实际 访问密钥和秘密密钥。
$ heroku config:set S3_ACCESS_KEY=THERANDOMKEYYOUGOT
$ heroku config:set S3_SECRET_KEY=an0tHeRstRing0frAnDomjUnK
$ heroku config:set S3_REGION=us-west-2
$ heroku config:set S3_BUCKET=my-sample-app-bucket-20160126
再看最后一张。记得当你查看的属性时
你的 S3 桶?这是您输入与您的相关联的代码的地方
地区。如果您的存储桶不在俄勒冈州,则必须将 us-west-2
更改为您的实际区域代码。这 link 在编写本教程时有效:
http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
如果这不起作用,Google“AWS S3 区域代码”。
完成所有这些之后 double-checking 由于代码中的错误,我得到了
Heroku 与 AWS 合作存储图片!
我不知道如何(或在何处)从 AWS 向用户授予读写权限,以便用户可以在生产环境中 post sample_app 上的图片。这是第11章的最后一个任务,教程中没有涉及,我在任何地方都找不到解决方案。
这是 carrier_wave.rb
文件:
if Rails.env.production?
CarrierWave.configure do |config|
config.fog_credentials = {
# Configuration for Amazon S3
:provider => 'AWS',
:aws_access_key_id => ENV['lalala'],
:aws_secret_access_key => ENV['oloalle']
}
config.fog_directory = ENV['name of bucket']
end
end
这是教程中的过程: 1) 创建 AWS IAM 用户并记录访问权限和密钥 - 完成
2) 创建 S3 存储桶 - 完成
3) 为上一步创建的用户授予读写权限 - 如何???
4) 然后我 运行 这三个命令:
$ heroku config:set S3_ACCESS_KEY=lalala
$ heroku config:set S3_SECRET_KEY=oloalle
$ heroku config:set S3_BUCKET=name of bucket
5) 推送到 git 和 heroku - 完成
6) heroku pg:reset DATABASE
- 完成
7)heroku run rake db:migrate
在这里我收到这条消息:
Running `rake db:migrate` attached to terminal... up, run.7906
rake aborted!
ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/core/service.rb:244:in `validate_options'
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/core/service.rb:268:in `handle_settings'
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/core/service.rb:98:in `new'
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/storage.rb:25:in `new'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:83:in `eager_load_fog'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:96:in `fog_credentials='
/app/config/initializers/carrier_wave.rb:3:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:118:in `configure'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave.rb:14:in `configure'
/app/config/initializers/carrier_wave.rb:2:in `<top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:652:in `block in load_config_initializer'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/notifications.rb:166:in `instrument'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:651:in `load_config_initializer'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `block in <class:Engine>'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `instance_exec'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `run'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:55:in `block in run_initializers'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:44:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:44:in `tsort_each_child'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:54:in `run_initializers'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:352:in `initialize!'
/app/config/environment.rb:5:in `<top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:328:in `require'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:328:in `require_environment!'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:443:in `block in run_tasks_blocks'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)
在 Services -> IAM
中,点击 IAM Resources
下面的 1 User(s)
。 Select 您希望获得权限的用户。在此用户的个人资料中,单击 Attach User Policy
。单击 Select
以获得 Amazon S3 Full Access
,最后单击 Apply Policy
。
对于以后的其他人,
继续 Heroku,在您的应用程序上,转到设置,点击显示配置变量。
点击右侧的“编辑”并在那里输入您的秘密:
S3_BUCKET: name of your bucket goes here
S3_ACCESS_KEY: xxxxx
S3_SECRET_KEY: xxxx
在 config/initializers/carrierwave.rb 或任何你输入秘密的地方应该有:
CarrierWave.configure do |config|
config.root = Rails.root.join('tmp') # adding these...
config.cache_dir = 'carrierwave' # ...two lines
config.fog_credentials = {
:provider => 'AWS', # required
:s3_access_key_id => ENV['S3_ACCESS_KEY'], # required
:s3_secret_access_key => ENV['S3_SECRET_KEY'], # required
:region => 'eu-west-1', # optional, defaults to 'us-east-1'
:host => 's3.example.com', # optional, defaults to nil
:endpoint => 'https://s3.example.com:8080' # optional, defaults to nil
}
config.fog_directory = ENV['S3_Bucket'] # required
config.fog_public = false # optional, defaults to true
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
end
我发现上面选择的正确答案不适合我。经过多次试验和错误,这最终对我有用。
我按照第一步手动输入上面列出的秘密信息...
Go on Heroku, on your application, go to settings, hit Reveal Config Vars.
Click on on Edit on the right side and enter your secrets there:
S3_BUCKET: name of your bucket goes here
S3_ACCESS_KEY: xxxxx
S3_SECRET_KEY: xxxx
但是 carrier_wave 文件中的细微差别似乎起作用了。
注意包围 if Rails.env.production?
行和 end
。
carrier_wave.rb
if Rails.env.production?
CarrierWave.configure do |config|
config.root = Rails.root.join('tmp') # adding these...
config.cache_dir = 'carrierwave' # ...two lines
config.fog_credentials = {
:provider => 'AWS', # required
:aws_access_key_id => ENV['S3_ACCESS_KEY'],
:aws_secret_access_key => ENV['S3_SECRET_KEY'],
:region => 'eu-west-2', # optional, defaults to 'us-east-1'
:host => 's3.example.com', # optional, defaults to nil
:endpoint => 'https://s3.example.com:8080' # optional, defaults to nil
}
config.fog_directory = ENV['S3_Bucket'] # required
config.fog_public = false # optional, defaults to true
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
end
end
不确定这是否是问题所在。
进行更改后,我根据 Michael Hartl 的说明完成了这一章。
We’re now ready to commit the changes on our topic branch and merge back to master:
$ bundle exec rake test
$ git add -A
$ git commit -m "Add user microposts"
$ git checkout master
$ git merge user-microposts
$ git push
Then we deploy, reset the database, and reseed the sample data:
$ git push heroku
$ heroku pg:reset DATABASE
$ heroku run rake db:migrate
$ heroku run rake db:seed
这是我创建的教程,目的是在 Rails 教程(第 3 版)第 11 章 Ruby 末尾的 Michael Hartl 离开的地方接手。它应该回答你的问题和更多
让 railstutorial.org 示例应用程序在 Heroku 和 AWS 之间运行是一件非常痛苦的事情。但我做到了。如果您找到本教程,则意味着您可能遇到了无法克服的错误。没关系。我有几个。
2020 Note: It's possible that everything here referencing a Region for S3 is no longer needed, or perhaps was never needed. When I originally got this all to work properly it was after adding the region information. However, S3 Buckets all share a global namespace. So if anybody is still reading this, try it all without the region stuff first, and leave a comment about whether it works or not. Anyway, back to the tutorial...
您需要做的第一件事是回顾 Hartl 提供的代码。确保您完全按照显示的方式输入(或 copy/pasted 它)。在本节的所有代码中,您可能只需要添加一小部分。 “区域”环境变量。如果您创建不在默认美国区域的存储桶,则需要此变量。稍后会详细介绍。这是 /config/initializers/carrier_wave.rb
:
if Rails.env.production?
CarrierWave.configure do |config|
config.fog_credentials = {
# Configuration for Amazon S3
:provider => 'AWS',
:aws_access_key_id => ENV['S3_ACCESS_KEY'],
:aws_secret_access_key => ENV['S3_SECRET_KEY'],
:region => ENV['S3_REGION']
}
config.fog_directory = ENV['S3_BUCKET']
end
end
那条线 :region => ENV['S3_REGION']
对很多人来说都是个问题。稍后会详细介绍。
您应该完全按照所示使用该代码块。 请勿将您的实际密钥放在那里。我们会单独将它们发送到 Heroku。
如果您必须添加那行代码,请不要忘记将其提交到 git 并将其推送到 Heroku。
现在让我们继续讨论您的 AWS 账户和安全性。
- 首先,创建您的 AWS 帐户。 在大多数情况下,这就像注册任何网站一样。制作一个漂亮的长密码并将其存储在安全的地方,例如加密的密码管理器。当您创建帐户时,您将获得第一组 AWS 密钥。您不会在本教程中使用它们,但您可能在将来的某个时候需要它们,因此请将它们保存在安全的地方。
- 去S3部分做一个bucket。它必须有一个唯一的 名字,所以我通常只是把日期放在最后就行了。例如,您可以将其命名为“my-sample-app-bucket-20160126”。一旦您 已创建您的存储桶,单击名称,然后单击属性。 了解您的存储桶位于哪个“区域”对您来说很重要。找到它, 并记下它。稍后你会用到它。
- 您的主帐户可能拥有对所有内容的完全权限,因此我们不要使用它在两个网络服务之间传输随机数据。如果它泄露出去,你可能会损失很多钱。我们将创建一个有限的用户。 在IAM部分新建一个User。我将其命名为“fog”,因为这是处理发送和接收的云服务软件。创建它时,您可以选择显示 and/or 下载与新用户关联的密钥。重要的是你把这个放在安全的地方 和安全的地方。它不会进入您的代码,因为那可能会 最终出现在其他人可以看到的存储库中。另外,不要给这个 新用户密码,因为它不会登录到 AWS 仪表板。
- 新建一个群组。我称我的为“s3railsbucket”。这是 将分配权限。将“雾”添加到该组。
- 转到“政策”部分。单击“创建策略”,然后单击 select“创建您的 Own Policy”。给它起一个以“Allow”开头的名称,这样它就会显示在附近 策略列表的顶部。这是一个巨大的清单。这是我所做的:
策略名称: AllowFullAccessToMySampleAppBucket20160126
说明:允许远程write/delete访问名为
my-sample-app-bucket-20160126.
政策文件:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-sample-app-bucket-20160126",
"arn:aws:s3:::my-sample-app-bucket-20160126/*"
]
}
]
}
- 返回组部分,select你创建的组,然后添加 您对小组的新政策。
AWS 配置到此结束。我不需要制定政策来允许 “fog”列出存储桶的内容,即使我尝试过大多数教程 说那是必要的。我认为只有当你想要一个用户时才有必要 可以通过仪表板登录。
现在进行 Heroku 配置。这些东西被输入到你的 命令提示符,就像 'heroku run rake db:migrate' 之类的。这是 在其中输入您从之前创建的“fog”用户那里获得的 实际 访问密钥和秘密密钥。
$ heroku config:set S3_ACCESS_KEY=THERANDOMKEYYOUGOT
$ heroku config:set S3_SECRET_KEY=an0tHeRstRing0frAnDomjUnK
$ heroku config:set S3_REGION=us-west-2
$ heroku config:set S3_BUCKET=my-sample-app-bucket-20160126
再看最后一张。记得当你查看的属性时
你的 S3 桶?这是您输入与您的相关联的代码的地方
地区。如果您的存储桶不在俄勒冈州,则必须将 us-west-2
更改为您的实际区域代码。这 link 在编写本教程时有效:
http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
如果这不起作用,Google“AWS S3 区域代码”。
完成所有这些之后 double-checking 由于代码中的错误,我得到了 Heroku 与 AWS 合作存储图片!