EC2（リモートデスクトップ接続）からS3バケットにアクセスする

自分用の備忘メモになります。
EC2で作成したインスタンスからS3に格納されたファイルにPythonで読み込むまでの手順です。
開発等で一時的にアクセスするのであれば、“boto3”ライブラリを用いる方法があるようなのですが、ここではAWSの機能を活用したパターンです。Python等でファイルを読み込む際に、コードの記述が正しくても“HTTP 403: Access Denied”となります。EC2とS3は違う環境になるので、ネットワークと権限の設定が必要になります。

１．VPCの設定（EC2とS3間の接続ポイントの作成）
２．IAMロールを作成
３．IAMユーザーを作成
４．IAMロールをEC2インスタンスに紐づけ
５．Python3でファイル読み込み
６．その他参考

１．VPCの設定（EC2とS3間の接続ポイントの作成）
ネットワーク設定の位置づけです。
１）エンドポイントの作成
（１）サービスメニューから“ネットワーキングとコンテンツ配信”＞“VPC”をクリックする。
![vpcメニュー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/ac8db265-3990-3cf2-f6ec-caca51dbd8cf.png)

（２）左側のパネルの“エンドポイント”をクリック後、“エンドポイントの作成”をクリックする。
![vpc作成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/7693c5f4-dc41-250f-d5c5-9d44df5ab0e6.png)
（３）サービスカテゴリーに“”を選択後、サービス“com.amazonaws.xxxxxxx(リージョン).s3”を選択し、
![vpcs3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/5fa431fa-0a41-4406-8f58-9209cbd0b010.png)

（３）作成したエンドポイントとEC2Cの紐づけ
VPC欄に、EC2インスタンス作成時のVPC IDを選択（プルダウンから選択できます。）し、対象のルートテーブルにチェックをします。
![vpc作成2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/b55f9540-414b-d5f1-55e8-22b46a83e2e4.png)

選択後、最下部の“エンドポイントの作成”を押す。

２．IAMロールを作成する。
権限設定のはじめのステップになります。
（１）サービスメニューから“ネットワーキングとコンテンツ配信”＞“IAM”をクリックする
![iamメニュー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/d45d5cec-a0ab-31cf-6ee9-8a42b696f669.png)

（２）左側のパネルの“ロール”をクリック後、“ロールの作成”をクリックする
![ロールの作成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/8b2121e3-9dbe-d07d-da92-35aff544180b.png)

（３）EC2のあたりをクリック後、下の“次のステップ：アクセス権限”をクリックする
![ロールの作成２.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/9b94f108-d1c3-3370-9c64-b40eb9bdfcdb.png)

（４）ポリシーのフィルターに“S3”を入力後、“AmazonS3FullAccess”を選択（もしくは、ファイル読み込みのみであれば、“AmazonS3ReadOnlyAccess”を選択）し、下の“次のステップ：タブ”をクリックする
![ロールの作成２.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/c7ba2316-3ee8-efd1-6724-302da46c3696.png)

（５）“次のステップ：確認”をクリックする

（６）ロール名（任意）を入力し、下の“ロールの作成”をクリックするとロールが完成します
![ロールの作成3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/7e8d0cb6-73ee-15a5-a832-b12524df659a.png)

詳細は下記URLです。
https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/java-dg-roles.html

３．IAMユーザーの作成
EC2のリモートデスクトップ接続のユーザーIDで作成します。
（１）左側のパネルの“ユーザー”をクリック後、“ユーザーを追加”をクリックする
![ユーザー追加.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/0331bf3d-644e-1e4b-4f99-a58a3094d6b1.png)

（２）ユーザー名（リモートデスクトップ接続のユーザID）を入力し、アクセスの種類に“プログラムによるアクセス”を選択し、下の“次のステップ：タグ”をクリックする。
![ユーザー追加2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/df16e7b7-94a2-8b07-1ce8-ec61f363a45d.png)

（３）“次のステップ：確認”をクリックする
（４）“ユーザーの作成：確認”をクリックする
（５）アクセスキーID、シークレットアクセスキーのCSVファイルをダウンロードする。
CSVファイルは１回しかダウンロードできませんので、取扱いに注意してください。
![ユーザー追加3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/1f9a13b1-2c79-9ba1-fa6d-6fc0acb2c65b.png)



４．IAMロールをEC2インスタンスに紐づけ
下記URLが手順になります。
https://aws.amazon.com/jp/blogs/news/easily-replace-or-attach-an-iam-role-to-an-existing-ec2-instance-by-using-the-ec2-console/

５．EC2上でpythonを実行する際のファイルアクセスのコード
AWSのサービスでは、“boto3”のライブラリーを使用します。
![コード.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156361/f2b4155c-ad05-0638-fedf-d7f9d3537a20.png)

boto3ライブラリーの解説URL
https://boto3.amazonaws.com/v1/documentation/api/latest/index.html

６．その他参考
・AWSで“HTTP 403: Access Denied”の対応一覧
https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-troubleshoot-403/

・特定のS3バケットにアクセスさせる場合
https://qiita.com/komazawa/items/988c346274666023d9dd