はじめに
Railsで画像アップロードするときのS3バケットの設定方法を紹介します。
必要最低限の権限だけ付与するようにしようと思います。
RailsからAWSへアクセスするためにはアプリケーション用のIAMユーザーを作成して、アクセスキーとシークレットアクセスキーを使います。
作成したIAMユーザーにS3へのアクセス権をつけることでRailsからS3へアクセスできます。
環境
Rails 6.1.6
ruby 3.0.6
S3バケットの設定
バケットのアクセス許可の設定はブロックパブリックアクセス、バケットポリシー、オブジェクト所有者で行います。
ブロックパブリックアクセス
チェックボックスが4つ並んでいるUIのところです。
今回のユースケースでは新しいパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする
と任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする
にチェックをつけます。
バケットポリシー
次にJSONでバケットポリシーを設定します。
特定のIAMユーザーのみがバケットへアクセスできるようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowIAMUserUpload",
"Effect": "Allow",
"Principal": {
"AWS": "IAMユーザーのARN"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::バケット名/*"
}
]
}
オブジェクト所有者
ACL有効にチェックをつけます。