自分用の備忘メモになります。
EC2で作成したインスタンスからS3に格納されたファイルにPythonで読み込むまでの手順です。
開発等で一時的にアクセスするのであれば、“boto3”ライブラリを用いる方法があるようなのですが、ここではAWSの機能を活用したパターンです。Python等でファイルを読み込む際に、コードの記述が正しくても“HTTP 403: Access Denied”となります。EC2とS3は違う環境になるので、ネットワークと権限の設定が必要になります。
1.VPCの設定(EC2とS3間の接続ポイントの作成)
2.IAMロールを作成
3.IAMユーザーを作成
4.IAMロールをEC2インスタンスに紐づけ
5.Python3でファイル読み込み
6.その他参考
1.VPCの設定(EC2とS3間の接続ポイントの作成)
ネットワーク設定の位置づけです。
1)エンドポイントの作成
(1)サービスメニューから“ネットワーキングとコンテンツ配信”>“VPC”をクリックする。
(2)左側のパネルの“エンドポイント”をクリック後、“エンドポイントの作成”をクリックする。
(3)サービスカテゴリーに“”を選択後、サービス“com.amazonaws.xxxxxxx(リージョン).s3”を選択し、
(3)作成したエンドポイントとEC2Cの紐づけ
VPC欄に、EC2インスタンス作成時のVPC IDを選択(プルダウンから選択できます。)し、対象のルートテーブルにチェックをします。
選択後、最下部の“エンドポイントの作成”を押す。
2.IAMロールを作成する。
権限設定のはじめのステップになります。
(1)サービスメニューから“ネットワーキングとコンテンツ配信”>“IAM”をクリックする
(2)左側のパネルの“ロール”をクリック後、“ロールの作成”をクリックする
(3)EC2のあたりをクリック後、下の“次のステップ:アクセス権限”をクリックする
(4)ポリシーのフィルターに“S3”を入力後、“AmazonS3FullAccess”を選択(もしくは、ファイル読み込みのみであれば、“AmazonS3ReadOnlyAccess”を選択)し、下の“次のステップ:タブ”をクリックする
(5)“次のステップ:確認”をクリックする
(6)ロール名(任意)を入力し、下の“ロールの作成”をクリックするとロールが完成します
詳細は下記URLです。
https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/java-dg-roles.html
3.IAMユーザーの作成
EC2のリモートデスクトップ接続のユーザーIDで作成します。
(1)左側のパネルの“ユーザー”をクリック後、“ユーザーを追加”をクリックする
(2)ユーザー名(リモートデスクトップ接続のユーザID)を入力し、アクセスの種類に“プログラムによるアクセス”を選択し、下の“次のステップ:タグ”をクリックする。
(3)“次のステップ:確認”をクリックする
(4)“ユーザーの作成:確認”をクリックする
(5)アクセスキーID、シークレットアクセスキーのCSVファイルをダウンロードする。
CSVファイルは1回しかダウンロードできませんので、取扱いに注意してください。
4.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/
5.EC2上でpythonを実行する際のファイルアクセスのコード
AWSのサービスでは、“boto3”のライブラリーを使用します。
boto3ライブラリーの解説URL
https://boto3.amazonaws.com/v1/documentation/api/latest/index.html
6.その他参考
・AWSで“HTTP 403: Access Denied”の対応一覧
https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-troubleshoot-403/
・特定のS3バケットにアクセスさせる場合
https://qiita.com/komazawa/items/988c346274666023d9dd