IAMロールを使ってEC2からS3にアクセスする。

はじめに

こんにちは、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を追加する、といった形で最小限の権限にしておきましょう。