#事前準備
Railsでcarrierwaveを使ってAWS S3に画像をアップロードする手順を画像付きで説明する
概要についてはこちらの記事がとても分かりやすかったので参考にさせていただきました。
ただしこのまま$ git push
すると、アクセスキーがアップロードされてしまうので注意です。
アクセスキーの隠し方については、heroku 環境変数
とかgem 'dotenv-rails'
、$ heroku config:set ACCESS_KEY=aaaaaa
とか調べると出てくると思います。
#この記事を読むべき人
- https://myapp.herokuapp.com で画像をs3にアップロードしようとしてもうまくいかない
-
$ heroku logs
したら<Message>Access Denied</Message>
って言われる
この状況の人にはお役に立てるかもしれません。
#手順
##IAMのユーザーのARNを取得する
- 「AWSマネジメントコンソール」で「セキュリティ、ID、およびコンプライアンス /IAM」を選択
- 「IAMリソース」の「ユーザー: 2」を選択(数字は人それぞれ)
- 「ユーザー」を選択
- 「ユーザーの ARN」をコピーする
##パブリックアクセスのブロックをオフにする
- 「AWSマネジメントコンソール」で「ストレージ /s3」を選択
- バケットを選択
- 「アクセス権限」タブを選択
- 「ブロックパブリックアクセス」タブを選択(デフォルトで選択されている)
- 全てのブロックをオフにする
##バケットポリシーを使用する
- 「ブロックパブリックアクセス」から「バケットポリシー」タブに切り替える
- 「バケットポリシーエディター」に以下を適用して、保存する
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:user/IAMユーザー名"
},
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::バケット名/*"
}
]
}
-
"arn:aws:iam::111111111111:user/IAMユーザー名"
はコピーしてきたIAMユーザーのARN -
"Resource": "arn:aws:s3:::バケット名/*"
にバケット名を入力する
以上
これでいけるはず。