はじめに
こんにちは、kunimotoです。
今回は、EC2インスタンスにIAMロールをアタッチし、EC2インスタンス上で作成したサーバからS3バケットへアクセスする流れを確認していきます。
事前準備
S3へアクセスするEC2インスタンスを準備します。
IAMロールは作成後にアタッチします。
インスタンスの設定値は以下です。
| 項目 | 設定値 |
|---|---|
| 名前 | 任意のインスタンス名 |
| Amazonマシンイメージ | Amazon Linux 2023 kernel-6.1 AMI |
| インスタンスタイプ | t3.micro |
| キーペア | 作成したキーペア |
| VPC | 作成したVPC |
| サブネット | 作成したパブリックサブネット |
| パブリックIPの自動割り当て | 有効化 |
| セキュリティグループ | SSH接続を許可されたセキュリティグループ |
設定後、「インスタンスを起動」をクリックします。
作業1 IAMロールの作成
IAM画面の左ペイン「ロール」をクリックし、「ロールを作成」をクリックします。

信頼されたエンティティタイプは「AWSのサービス」を選択し、ユースケースは「EC2」を選択し「次へ」をクリックします。

許可ポリシーの画面に遷移するので今回は検証のため「AmazonS3FullAcess」ポリシーを選択し「次へ」をクリックします。

名前、確認、および作成画面では任意のロール名を入力し「ロールを作成をクリックします。」
クリック後、ロールが作成されたことを確認します。

作成後、IAMロールのアタッチを行います。
作成したインスタンスを選択し、右上の「アクション」→「セキュリティ」→「IAMロールを変更」をクリックします。

作成したIAMロールを選択し、「IAMロールの更新」をクリックします。
クリック後、IAMロールが正常にアタッチできていることを確認します。

作業2 S3バケットの作成
S3画面の左ペイン「汎用バケット」をクリックし、「バケットを作成」をクリックします。

任意の「バケット名」を入力しその他はデフォルトの設定にします。
バケット名の入力後「バケットを作成」をクリックします。

作成できたことを確認してS3バケットの作成は以上です。

作業3 サーバ作業
パブリックIPを確認し、TeraTerm等を使用しサーバへSSH接続します。
接続後、以下コマンドを実行しS3へアップロードするテストファイルの作成を行います。
vi S3test.txt
viエディタで以下を入力し(:wq)保存します
S3 Upload Test
テストファイルの作成後、S3へアップロードを行います。 S3へのアップロードは以下コマンドで実行することができます。
aws s3 cp S3test.txt s3://kunimoto-s3-access-test ~~~実行後~~~ upload: ./S3test.txt to s3://kunimoto-s3-access-test/S3test.txt
uploadが表示されていれば、サーバ上でS3にアクセスしサーバ上からS3へテストファイルのアップロードができています。
S3バケットの画面上でも、アップロードされていることを確認します。

アップロードされたテキストファイルを確認し、サーバ上で入力した内容が表示されていることも確認できました。

まとめ
今回は、EC2インスタンスにIAMロールをアタッチし、サーバにSSH接続したうえで、EC2からS3へアクセスする流れを確認しました。
今回は検証のためIAMロールに「AmazonS3FullAccess」を付与しましたがIAMポリシーを作成する際は、対象のS3バケットを限定し、必要な操作だけを許可することが大切です。
参照だけでよい場合はs3:ListBucketやs3:GetObject、アップロードも行う場合はs3:PutObjectを追加する、といった形で最小限の権限にしておきましょう。




