AWSのS3で本番環境でも画像を保存できるようにしよう。【vol1】

### 【概要】
---
AWSのS3についてのアウトプット(備忘)、また、これからはじめて触れるよ！って方の参考になればと思います〜。
設定に若干苦戦したのと、他の記事で情報の過不足の部分があったので初めての方でもわかりやすく設定できればと思います！！
(画面は2023年11月時点のものとなります。)

### 【対象】
---
・S3でクラウド環境に画像を保存したい。
・renderでdeployをしたい。(Herokuなどでも可ですが、環境ヘ変数の設定が少し異なります。)
・.envファイルで管理したい。(credentialファイルでも設定可ですが、今回は.envで管理します。)

### 【環境】
---
・Rails7系
・Ruby3.2.2
・CarrierWave導入済。(carrierwaveについては省略します。)
・Docker ver3
・render

### 【前提条件】
---
・[・AWSのS3で本番環境でも画像を保存できるようにしよう。【vol1】 ](https://qiita.com/iijima-naoya-45b/items/0bdf75bde960787c9c04)←イマココ
・[・AWSのS3で本番環境でも画像を保存できるようにしよう。【vol2】 ](https://qiita.com/iijima-naoya-45b/items/ff16c778a7cea2ea18af)
・[・AWSのS3で本番環境でも画像を保存できるようにしよう。【vol3】 ](https://qiita.com/iijima-naoya-45b/items/1b966b3152d4b0d73e49) 

### 【手順】
---

1.初めに
2.バケットの作成
3.バケットポリシーの設定

### 【1.初めに】
---
今回は、S3を導入していきます。まずは、用語の解説をします。

`S3`
AWSの中のサービスの1つであり、Simple Storage Serviceを略してと呼びます。
なぜ

`バケット`
自分のデータを保存する場所のことをバケットと呼びます。

`リージョン`
S3に保存されたデータは実在の施設に分散して保管されています。
その実在の施設が所在している場所をリージョンといいます。

なぜ、S3で格納するかというと、理由は2つです。

1.サーバの使用用途を分けるべきだから
2.render無料枠の場合、デプロイし直すと写真のイメージが残らないから。

特に、自分自身は個人開発の本番環境で`2.`の問題に当たったので、S3を導入しております。
(renderの有料枠だと可能なのかもしれません。)

### 【2.バケットの作成】
---
ここから導入していきましょう。
まず、バケットの作成からです。

この作業は`ルートユーザー`で設定を進めます。
ルートユーザーではないと確認できない情報があるからです。そのため、自身がルートユーザーどうか確認してください。
では早速作業に取り掛かりましょう〜！


AWSのトップ画面から、下記の検索ボックスから`S3`と検索して、S3を新規作成していきます！！
![スクリーンショット 2023-11-01 22.19.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/4cae4ccc-60dd-f3e0-f489-470dcddf6091.png)

バケットを作成ボタンを押下。
![スクリーンショット 2023-11-01 22.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/39317c7d-a743-2854-be2e-47c08841b4ce.png)

バケット名を打鍵。
AWSリージョンは、アジアパシフィックで設定。
![スクリーンショット 2023-11-01 22.25.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/2b19c1f9-cfcf-9d20-6795-88c0a7074892.png)


下記の設定がとても重要になります。
今回はバケットポリシーというものを使用して、S3のセキュリティ対策を行います。
まずは、パブリックアクセスをすべてブロックのチェックを外し、画像のように3つのチェックボックスにチェックを入れます。
この設定が誤っているとファイルのアップロードができなくなってしまいます。
![スクリーンショット 2023-11-01 22.54.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/c3f64b20-4a92-e9bd-b29c-68d9d808acf4.png)

ここの設定以外は変更点はないので、確認できたら`バケットを作成`を打鍵しましょう〜！

![スクリーンショット 2023-11-01 22.28.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/42df1c69-ae7f-3493-407f-0db93db44b44.png)
バケットの作成ができました。
この画面に出ている`Amazon リソースネーム(ARN)`は後の設定で使用します。メモしておきましょう〜！！

### 【3.バケットポリシーの設定】
---
次に、バケットポリシーの設定を行います。
バケットポリシーとは、バケットに対して、どのユーザーがどの処理をできるか取り決めをするものです。
今回は、IAMユーザーのみバケットにアクセスできるよう設定していきます。

まずは先ほど同様にS3を選択し、先ほど作成したバケット名をクリックします。
次に、画面中央の`アクセス許可`をクリックし、`バケットポリシー設定`の、`編集`をクリックします。

![スクリーンショット 2023-11-01 22.37.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/21c17eb5-f055-af5f-fa66-bdec25323aee.png)


ここで、バケットポリシーを下記のように編集します。
ここは、自身で作成する方法もありますが、特にこだわりがない(S3に触れたいだけ)という方は、下記をコピーしてそのままご使用ください。

![スクリーンショット 2023-11-01 22.38.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/7e6e4035-2439-81c3-cf38-e224aa3fc4f6.png)

```ruby:バケットポリシー
{
   "Version": "2012-10-17",
   "Id": "Policy1544152951996",
   "Statement": [
       {
           "Sid": "Stmt1544152948221",
           "Effect": "Allow",
           "Principal": {
               "AWS": "①" #ユーザーのARNを入力
           },
           "Action": "s3:*",
           "Resource": "arn:aws:s3:::②" #バケット名を入力
       }
   ]
}
```
「①」の箇所に、先ほどコピーした「ユーザーのARNを入力」を入力します。
「②」の箇所に、作成したバケット名を入力します。

自身でカスタマイズする方法は下記をご参照ください。(ポリシージェネレーターの作成方法)

https://qiita.com/libra_lt/items/284b2723eaae26c5a39b

問題なければ画面下にスクロールして、「変更の保存」をクリックしましょう。
問題なくバケット作成ができれば成功です。

### 【引用】
---
https://qiita.com/oak1331/items/b9b77200ad7c921f8961

https://qiita.com/libra_lt/items/284b2723eaae26c5a39b