Rails, Laravel(画像アップロード)向けAWS(IAM:ユーザ, S3:バケット)の設定

Rails、Laravel画像アップロード向けのAWSの設定です。
具体的には、IAMのユーザ作成とS3のバケットの作成手順になります。
※Rails、Laravel以外での環境での動作確認は未確認です。

RailsでAWSへアップロードは[こちら](https://qiita.com/nobu0717/items/a34a896f6e7ad68dc54e)
LaravelでAWSへアップロードは[こちら](https://qiita.com/nobu0717/items/51dfcecda90d3c5958b8)

# 前提

AWSのアカウント作成済み


# ユーザの作成

「サービス」->「IAM」をクリックし、IAMのトップページへ移動します。

![0.png](https://qiita-image-store.s3.amazonaws.com/0/288694/6f8f9256-1162-8949-dd36-35dd7a3b405e.png)


「個々のIAMユーザの作成」->「ユーザの管理」を順にクリックしてください。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/288694/c79e1575-f8f0-7af4-2bb0-103f5b416dda.png)

「ユーザを追加」をクリックしてください。

![02.png](https://qiita-image-store.s3.amazonaws.com/0/288694/bd871421-dab1-61f3-cadc-3fb4dc45e00a.png)

「ユーザ名」を入力し、「プログラムによるアクセス」にチェックを入れてください。
「次のステップ：アクセス権限」をクリックしてください。

![03.png](https://qiita-image-store.s3.amazonaws.com/0/288694/bcc89fa4-04b0-3d6a-9d1c-7cc557ba4a92.png)

「既存のポリシーを直接アタッチ」を選択し「AmazonS3FullAcces」にチェックを入れてください。
「次のステップ：タグ」をクリックしてください。

![04.png](https://qiita-image-store.s3.amazonaws.com/0/288694/9428beb6-ea4d-24d0-5f85-77f17bea07e0.png)

「次のステップ：確認」をクリックしてください。

![05.png](https://qiita-image-store.s3.amazonaws.com/0/288694/1a9f19fd-bd2d-893c-64f0-7408631a83a3.png)

設定した情報が表示されていることを確認し、「ユーザの作成」をクリックしてください。

![06.png](https://qiita-image-store.s3.amazonaws.com/0/288694/41f4c032-0f21-8867-f774-f0fc1e747ab1.png)

***<font color="Red">必ず「csvのダウンロード」をクリックし、認証情報を保存してください。</font>***

![07.png](https://qiita-image-store.s3.amazonaws.com/0/288694/f891d6ce-45b8-d107-21e2-63243922a8db.png)

# ユーザのパスワードの設定

IAMのトップページから「ユーザ」->「作成したユーザ名」をクリックしてください。

![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288694/e595a676-e6d1-fc56-511d-8f09e42e5f63.png)
)


「認証情報」->「管理」をクリックしてください。

![09.png](https://qiita-image-store.s3.amazonaws.com/0/288694/b4ac3df0-7056-2ba6-f92e-645b5b16416f.png)

コンソールへのアクセスを「有効化」、パスワードの設定を「自動生成パスワード」にチェックを入れ「適用」をクリックしてください。

![10.png](https://qiita-image-store.s3.amazonaws.com/0/288694/7cc255c9-d9eb-7049-f746-82092742b27a.png)

認証情報と同様に、***<font color="Red">必ず「csvのダウンロード」をクリックし、アカウント情報を保存してください。</font>***

![11.png](https://qiita-image-store.s3.amazonaws.com/0/288694/414ad47b-4618-6d28-df6c-f09206544fed.png)

# ログインの確認

IAMのトップページからIAMユーザのサインインリンクをコピーし、ブラウザのアドレスに貼り付けてください。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288694/6a89277a-4e5f-2382-27ba-3b2f48c8b29d.png)

ログイン画面が表示されたら、アカウント情報を入力してサインインをクリックしてください。

ログインできれば成功です。

# 二段階認証(推奨)

IAMのトップページから「ユーザー」->「対象のユーザー」->「認証情報」->「MFAデバイスの割り当て：管理」をクリックしてください。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288694/29a53fd2-082a-82ab-da80-ba0af686e52b.png)

「仮想MFAデバイス」->「続行」をクリックしてください。

![14.png](https://qiita-image-store.s3.amazonaws.com/0/288694/aa3ae77b-b0dc-5307-516a-8b856c668a23.png)

その後の手順は以下の記事を参考にしてください。
[AWSアカウントを2段階認証にしてみた（MFA&Google Authenticator）](https://qiita.com/takahashi-kazuki/items/ef409aa4b523469f6551)

# バケットの作成

上部のメニューから「サービス」->「S3」をクリックしてください。

![15.png](https://qiita-image-store.s3.amazonaws.com/0/288694/83ad1bd5-69fb-b071-9b2b-6d5a6f14a92b.png)

「バケットを作成する」をクリックしてください。

![16.png](https://qiita-image-store.s3.amazonaws.com/0/288694/80c001e6-67e9-ba24-3061-7cf7c99e8a79.png)

バケット名に任意の名前を入力、リージョンは「アジアパシフィック(東京)」を選択し「次へ」をクリックしてください。

![17.png](https://qiita-image-store.s3.amazonaws.com/0/288694/afd2eed4-4d0a-3bde-44cd-8aa03cbb89c0.png)



何も変更せずに「次へ」をクリックしてください。

![18.png](https://qiita-image-store.s3.amazonaws.com/0/288694/5b9d72e8-c6c9-51e1-5724-d8a63524b851.png)

以下の操作をし、「次へ」をクリックしてください。
・「パブリックアクセスをすべてブロック」のチェックを外す
・「新規のパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする」にチェックを入れる
・「任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする」にチェックを入れる

![s3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288694/1cbd9545-35d5-be6c-f73b-b4b144569a1c.png)

「バケットを作成」をクリックしてください。

![20.png](https://qiita-image-store.s3.amazonaws.com/0/288694/732e3316-c9f6-e2fc-4503-4cb4f1074d26.png)

以上でバケットの作成は完了です。


# バケットポリシーの追加

上部の「サービス」->「IAM」->「ユーザー」->「作成したユーザー」をクリックします。

![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288694/d2abf42b-5383-b875-2d22-000b05122d5e.png)

「ユーザのARN」の右側のアイコンをクリックして**<font color="Red">ユーザのARN</font>**をコピーします。

![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288694/1bd50fe0-e5d8-066e-c848-e3b3db1cdc84.png)


上部の「サービス」->「S3」->「作成したバケット」をクリックします。

![23.png](https://qiita-image-store.s3.amazonaws.com/0/288694/15a99acb-459c-801a-cf5c-63dac3b5b9ac.png)

「バケットポリシーエディタ ARN:」の右側の文字列をコピーします（**<font color="Red">バケットのARN</font>**）
「アクセス権限」->「バケットポリシー」->「ポリシージェネレーター」をクリックします。

![24.png](https://qiita-image-store.s3.amazonaws.com/0/288694/027cc6af-ce3d-288f-8d2c-6ab122656e14.png)


別ウィンドウでポリシージェネレーターが開かれるので、以下を設定して「Add Statement」をクリックしてください。

- 「Select Type of Policy」: S3 Bucket Policy
- 「Effect」: Allow
- 「Principal」: コピーしたユーザのARN
- 「AWS Service」: Amazon S3
- 「Actions」:All Actions('*')
- 「Amazon Resource Name(ARN)」:コピーしたバケットのARN

![25.png](https://qiita-image-store.s3.amazonaws.com/0/288694/43b42298-1c7e-47d9-68e6-fb76f0c1f4c9.png)

「Generate Policy」をクリックします。

![26.png](https://qiita-image-store.s3.amazonaws.com/0/288694/705c99e6-6986-9fc8-a8ff-aa62d5a10f07.png)

生成されたPolicyを全選択し、コピーしてください。

![27.png](https://qiita-image-store.s3.amazonaws.com/0/288694/dc879508-b4da-ad53-3ee6-b59d2c470023.png)

コピーしたPolicyをバケットポリシーエディタへ貼り付け、「保存」をクリックします。

![28.png](https://qiita-image-store.s3.amazonaws.com/0/288694/0bb1565d-45c4-2b94-785c-efc3966d9753.png)

これでバケットポリシーの設定は完了です。


# 最後に

以上でAWSの設定は完了です。
作成した認証情報を使用して、下記のように必要に応じて環境変数等に設定して下さい。

```
AWS_ACCESS_KEY_ID= csvの認証情報に記載されているAccess key ID
AWS_SECRET_ACCESS_KEY= csvの認証情報に記載されているSecret access key
AWS_DEFAULT_REGION=ap-northeast-1 （リージョンをアジアパシフィック東京で作成したため）
AWS_BUCKET= 作成したバケット名
```

###### 参考

[AWSアカウントを2段階認証にしてみた（MFA&Google Authenticator）](https://qiita.com/takahashi-kazuki/items/ef409aa4b523469f6551)