はじめに
ローカルでは画像を投稿できるのに、本番環境では画像を投稿できないエラー。
一度解決したかと思いましたが再度デプロイ等を行うとやはりエラー。
AWSのS3が関係しているかもしれないので、実際行った設定を残しておきたいと思います。
(画像は特になく、本当に私が行った流れを把握するためのものなので見にくいというをご承知おきください。)
環境
- Windows, WSL
- Docker
- Ruby 3.2.3
- Rails 7.1.3
1
awsログイン
サービス一覧からCtrl+Fで「S3」を検索
【バケットを作成】
バケット名を入力
ヘッダー右上のユーザー名の隣にあるタブからAWSリージョンをアジア・パシフィック(東京)で設定
【オブジェクトの所有者】
・ACL 有効
・オブジェクトライター選択
【ブロックパブリック・アクセス設定】
バケットポリシーというものを使用して、S3のセキュリティ対策を行うので、下3つと警告ボックス?の中のチェックボックスにチェックを入れる
バケット作成を押し完了
「詳細確認」のボタンが表示されるので押す。
作成したバケットの「プロパティ」タブを押すと「Amazon リソースネーム (ARN)」の欄があるのでコピーしておく
2【ルートユーザーでログイン後、IAMユーザーを作成】
サービス一覧から「IAM」を選択
ユーザーを選択
ユーザーを作成を選択
ユーザー詳細:ユーザー名。「AWS マネジメントコンソールへのユーザーアクセスを提供する - オプション」にチェック。「IAM ユーザーを作成します」にチェック。「カスタムパスワード」を選択して入力。「ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります - 推奨」チェックはずす。
- 次へから、許可を設定に移動
「ユーザーグループに追加」から「グループを作成」ボタンを押す
「administratoraccess」
で検索し、グループに追加。ユーザーグループ名も入力
「ユーザーグループを作成」ボタンを押す。
「許可を設定」のページに今作成したグループ名のものがあるのでチェックを入れる
「次へ」を押す
「確認して作成」ページへ移動。「ユーザーの詳細」「許可の概要」を確認
「ユーザー作成」ボタンを押し、正常に作成されたことを確認。
3【budgets】
budgetsと検索をかけて選択。
「請求とコスト管理>予算>概要」から「予算を作成」を選択
カスタマイズを選択し、「コスト予算」を選択して「次へ」
・予算名:AWS予算(例)
・間隔:月別
・予算有効日:定期予算
・開始日:そのまま
・予算設定方法:固定
予算額:2.00(例)
・予算のスコープ(全てデフォルト)
「次へ」で「アラートの閾値を設定」
今回は、60%を閾値とします。E-mail受信者も設定
「次へ」次の項目は確認?
最後に「予算を作成」で正常に作成されたことを確認する
4【MFA導入(多段階認証)】
IAMのページにアクセスして左側のメニューバーからユーザー
を選択
先ほど作成した「ユーザー名」を選択。
「セキュリティ認証情報」のタブからMFA デバイスの割り当て
を選択
「デバイス名」を入力。「MFA device」で「認証アプリケーション」を選択
「次へ」
デバイスの設定から、ワンタイムパスワードをそれぞれ打鍵。
(※30秒ごとにワンタイムパスが切り替わるので、連続するパスを打鍵してください。)
.MFAに作成できていれば完了。「仮想~」という欄が新たに作成されている
5【バケットポリシーの設定】
作成したバケットの「アクセス許可」タブを選択
バケットポリシー設定
の、編集
をクリック
以下ジェネレーターで作成したものを貼り付ける
Select Type of Policy → S3バケットのポリシーを選択
Effect → Allow
AWS Service → S3の場合はS3のみしか選択できない
アクション → GET、PUT、Deleteを選択
設定が終わったら Add Statement を押します。
押すと、ボタンの下に詳細が表示されます。
いくつか同時にポリシーを設定できるので、他にも設定したい場合は、再度入力し、Add Statementを押すと、このエリアに表示されていきます。
最後に Generate Policy ボタンを押すと、ポリシーが表示されます。
このポリシーをS3のポリシー設定に貼り付ければOKです。
若しくは参考サイトの下記で👇(今回は上記コードだとうまくいかなかったためこちらで)
{
"Version": "2012-10-17",
"Id": "Policy1699409320136",
"Statement": [
{
"Sid": "Stmt1699409298149",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::◯◯◯◯◯:user/××××××" # IAMユーザーARN
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::バケット名" # バケットARN
}
]
}
「変更を保存」ボタンを押し、「 バケットポリシーが正常に編集されました。」となったら完了
本番環境で、画像に関する知識とか。参考サイトとか