【入門者向け】Chat GPTに色々教えてもらいながらAWS S3にファイルをアップロードしてみる【2章: アクセス許可の設定編】

# 記事の目的

- 初学者でもAmazon S3(以降S3)について理解を深められるようにする
- S3を使って画像をアップロードできるアプリケーションを作成できるようにする

**関連記事**
[1章: バケット作成編](https://qiita.com/miumi/items/58fdb6cc3809f4203ef9)
[2章: アクセス許可の設定編](https://qiita.com/miumi/items/c07cb9bf958de7c7bb2a) ←今ここ
[3章: アップロード編](https://qiita.com/miumi/items/017d7595c724d03c4227)
※この記事の内容は1章の続きからになります


# 注意事項
- AWSのコンソール画面は2023/9時点のものです
- Chat GPTの出力が必ずしも正しいとは限りませんのでビジネスで使う場合にはご注意ください。(当記事で登場しているAWSのアカウントは完全個人用になります)
- **権限を設定できただけで挙動の保証はしてませんのでご了承ください**

# 1. バケットの作成した後は何をする?
[1章: バケット作成編](https://qiita.com/miumi/items/58fdb6cc3809f4203ef9)で質問したS3にアップロードするまでの流れの画像を再度掲載。今回はアクセス許可の設定を行おうと思います。
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/de3a8496-65c6-9a47-41a3-8b67c15c4c31.png">


# 2. アクセス許可の方法について質問
ChatGPTに聞いてみる。
バケットポリシーというものを設定すれば良さそうですね！
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/0dbed2b2-550b-4597-ed16-2f37ee77a028.png">


# 3.アクセス許可の設定画面にアクセス
<imgwidth="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/f17d99a4-43d5-783a-2d3d-3ca0275982b4.png">

[1章: バケット作成編](https://qiita.com/miumi/items/58fdb6cc3809f4203ef9)で作成したバケットをクリック

これっぽいですね！
<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/d437457e-9668-1083-c9b9-9c4b7afd4627.png">

呪文ぽいワードが色々出てきたので詳しくみていきましょう！
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/0c043e08-486c-f359-bd91-591cf1f0538c.png">

# 4.アクセスポリシー以外の設定について
アクセス許可の方法について質問でアクセスポリーの設定が必要とのことでしたのでそれ以外の設定が不要なのか確認しましょう。どうやら他の箇所は編集しなくても大丈夫そうですね
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/17d637ad-d1f3-f226-954b-3e696854a4ee.png">

ここで「オブジェクト」と「アクセス権」について確認。
オブジェクトはデータ、アクセス権は各種操作権という認識でいれば大丈夫ぽいですね(詳しい方に怒られそう・・・)
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/7ead4360-443f-8ad8-b5a4-274f08bd16d5.png">

# 5.アクセスポリシー設定の確認
2. アクセス許可の方法について質問 で確認した設定コードを引用

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-bucket-name/*"
        }
    ]
}
```

これに関して2つの疑問点が出てきました🤔

- これでS3にアップロードできるのか？
- ここでいう「誰でも」というのはこのS3のバケットを使っているアプリケーションの存在を知っている全ユーザー？

早速聞いてみましょう。後者は現状でいいとして前者に関してはS3にアップロードできないのでアクセスポリシーの変更が必要ですね。
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/c9a3f80f-7f03-5557-e7c5-eb8dd145550d.png">
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/4a973b77-035a-ebd7-a9d4-975f2ad18599.png">

早速アクセスポリシーの編集をお願いしましょう
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/3f8cd3a0-8a70-88fe-2dfa-7337d5e26007.png">

IMAというやつで設定する必要がありそうですね。
アップロード(自分だけ)とダウンロード(全員)の設定方法が異なるので設定方法について確認しておきましょう
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/e02cdd26-81ff-d6c3-658b-995edeadfae9.png">
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/4bcfb393-3efd-6e15-994b-ff9d4c39b3fb.png">


# 6.IMAでアップロードに関するポリシーを作成する
上記5で解説されたアップロードは自分(S3作成者)だけにする設定を行います

ページ上部の検索画面からIMAを入力
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/c237f4de-21e5-4772-1476-f1dde6f948c9.png">
左サイドバーからポリシーを選択して「ポリシーを作成をクリック」
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/b7d68132-7f9f-1593-6f12-0db19bd0211a.png">

ChatGPTに教えてもらった「JSON」タブを選択し、以下のようなアクセスポリシーを作成します。
your-bucket-nameは作成したバケット名、YOUR-USER-IDはユーザーIDに変更してください。
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/97423993-fd6c-87b3-2844-6f99f37b2909.png">

で、AWSのユーザーIDでどこで確認するのか・・・？🤔
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/dcdfd127-667e-8d3e-04dd-b5f39cd98858.png">
右上のユーザー名をクリックするとユーザーIDが見れるっぽいですね!
![スクリーンショット 2023-09-10 16.38.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/4aca361e-7473-c977-b2bc-460c46121805.png)

your-bucket-nameは作成したバケット名、YOUR-USER-IDはユーザーIDに変更して次に進むとポリシー名とコメントを残せるので適した命名を入力して右下の「ポリシー作成」をクリック
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/0e7e5161-6a48-8138-f5af-48ed32fc37f2.png">
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/3b1e828d-6b15-d153-127f-0051a885f68c.png">


# 7. 特定のユーザーにアップロードのポリシーを許可する
上記5で出力して頂いたここの部分の設定ですね
> IAMダッシュボードで、アップロードを許可するIAMユーザーを選択し、「アクセス許可」タブに移動します。
ユーザーのアクセス許可を編集し、アップロードのポリシーをアタッチします。これにより、特定のIAMユーザーのみがアップロードできるようになります

アクセス許可タブなんかないぞ・・・😭
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/b0df205a-8bb2-3d6a-2c6d-b2e09ee478a5.png">

早速聞いてみる。S3の方らしいが、IAMのポリシー使わないのかな・・・🤔
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/fd3d8fc3-31ec-d298-7507-9e8a9742d830.png">

聞いてみた。やっぱりIAMの画面でアップロード許可ユーザー(自分)の作成が必要らしい
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/d7ad406c-3cd5-7277-bc38-eeee835f69a4.png">
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/49582f71-da0b-417b-bfa6-082af897e657.png">
ここ↓
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/b0df205a-8bb2-3d6a-2c6d-b2e09ee478a5.png">

「AWS マネジメントコンソールへのユーザーアクセスを提供するに関して確認 
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/1e548202-0621-0afc-dfc0-2a157c78f558.png">
今はポリシー付与できればいいので後で必要になったら設定すれば大丈夫そう
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/eb49c76f-aa47-fd1a-03d5-5e333d3d8464.png">

なんか3つの選択肢がある。今回は1人だけなので一番右っぽい

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/2c0b8c06-4567-c9cf-1cce-7db6f27ffd77.png">
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/4b7abbbf-4c51-1fb0-ae4f-cc014741eee0.png">
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/c91ec95f-eaef-9ffb-e716-2538920c9c2d.png">

次にS3のバケットポリシー画面でアップロードとダウンロードの権限を設定していきます。
Principalのima::以降はIAMのユーザーの詳細画面から取得
(数字以外を入力するとエラーが出るので仮で1を11個記述)

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/60044ecd-381d-bd83-698a-dfec4486e62a.png">
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/3362d6f6-5bd0-eb5c-ed63-5c81c51e0b58.png">

変更をクリックしたらエラーがでた。バケットの設定ぽいですね。
![スクリーンショット 2023-09-10 17.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/b2e13b20-c504-c87d-ff3f-0a4235808c88.png)
確認してみた
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/c2dea0c3-2267-651c-c5e0-50eefb85a9c6.png">
これでいけるかな？
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/cb736c69-e6be-7a0d-31f0-62c8eb08fa61.png">
いけました！
![スクリーンショット 2023-09-10 17.50.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/dd6a1100-bf99-6ea7-ecfb-72c01e4e0861.png)



次は実際にアップロードしたいと思います！