LoginSignup
0
0

More than 3 years have passed since last update.

【Rails】HerokuでAWS s3に画像をアップロードしようとしたら<Message>Access Denied</Message>

Posted at

事前準備

Railsでcarrierwaveを使ってAWS S3に画像をアップロードする手順を画像付きで説明する

概要についてはこちらの記事がとても分かりやすかったので参考にさせていただきました。

ただしこのまま$ git pushすると、アクセスキーがアップロードされてしまうので注意です。
アクセスキーの隠し方については、heroku 環境変数とかgem 'dotenv-rails'$ heroku config:set ACCESS_KEY=aaaaaaとか調べると出てくると思います。

この記事を読むべき人

  1. https://myapp.herokuapp.com で画像をs3にアップロードしようとしてもうまくいかない
  2. $ heroku logsしたら<Message>Access Denied</Message>って言われる

この状況の人にはお役に立てるかもしれません。

手順

IAMのユーザーのARNを取得する

  1. 「AWSマネジメントコンソール」で「セキュリティ、ID、およびコンプライアンス /IAM」を選択
  2. 「IAMリソース」の「ユーザー: 2」を選択(数字は人それぞれ)
  3. 「ユーザー」を選択
  4. 「ユーザーの ARN」をコピーする

パブリックアクセスのブロックをオフにする

  1. 「AWSマネジメントコンソール」で「ストレージ /s3」を選択
  2. バケットを選択
  3. 「アクセス権限」タブを選択
  4. 「ブロックパブリックアクセス」タブを選択(デフォルトで選択されている)
  5. 全てのブロックをオフにする

バケットポリシーを使用する

  1. 「ブロックパブリックアクセス」から「バケットポリシー」タブに切り替える
  2. 「バケットポリシーエディター」に以下を適用して、保存する
{
    "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:::バケット名/*"にバケット名を入力する

以上

これでいけるはず。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0