AWS IAM role の機能を実際に設定して理解する
目次
はじめに
AWS の学習を始めると、IAM ユーザーとIAM ロールという似たような名前の概念が出てきて、何が違うのか分からなくなったことはないでしょうか。さらに「EC2 から S3 にアクセスしたいけれど、アクセスキーを使わずに権限を与えるにはどうすればいいのか」と言われると、余計に混乱してしまいます。
本記事では、まず IAM ユーザーと IAM ロールの違いを整理し、その上で実際に EC2 用の IAM ロールを作成して S3 への読み取り権限を付与するまでの手順を一通り体験します。手を動かして確認することで、IAM ロールが「誰に」「何の」権限を与えているのかがイメージしやすくなります。
IAMユーザーとIAMロールの違い
IAMユーザーとは
IAM ユーザーとは、人やアプリケーションが AWS のリソースにアクセスするためのアカウントです。AWS の全リソースにアクセスできる root ユーザーとは異なり、IAM ユーザーの作成にメールアドレスは不要です。IAM ユーザーがどのリソースにアクセスできるかは、アタッチされている IAM ポリシーによって決まります。
ここで言う「リソース」とは、EC2 や S3 といった AWS のサービスのことを指します。
IAMロールとは
IAM ロールとは、AWS のリソースにアタッチして一時的な権限を与えるための仕組みです。EC2 などの AWS リソースが他のリソースにアクセスできるかどうかは、そのリソースにアタッチされた IAM ロールに、どの IAM ポリシーがアタッチされているかによって決まります。
例えば、S3 にアクセス(リード)したい EC2 には、AmazonS3ReadOnlyAccess ポリシーがアタッチされた IAM ロールが必要です。このポリシーが無ければ、EC2 から S3 にアクセスすることはできません。
(AWS のアクセスキー・シークレットキーを EC2 に直接設定すれば同様のことは可能ですが、キーが漏洩するリスクがあるため推奨されていません。IAM ロールを使えば、キーを管理する必要なく安全にアクセス権限を付与できます。)
| 項目 | IAMユーザー | IAMロール |
|---|---|---|
| アタッチ対象 | 人・アプリケーションなど | EC2 など AWS のリソース |
| 認証情報 | アクセスキー・シークレットキーを発行 | 一時的な認証情報が自動で発行・更新される |
| 主な用途 | コンソールログインや CLI 操作用のアカウント | リソース間でのアクセス権限の委譲 |
IAMロールをEC2にアタッチしてS3へのアクセス権限を与える3つのステップ
概念を理解したところで、実際にEC2 用の IAM ロールを作成し、S3 への読み取り権限を付与するまでの流れを、3 つのステップで確認していきます。
1. IAMロールなしでS3へアクセスし、エラーになることを確認する
課題:IAM ロールが無い状態の EC2 から AWS のリソースにアクセスすると、どうなるのかを確認したい。
解決策:何もアタッチしていない EC2 上で AWS CLI コマンドを実行し、認証エラーが発生することを確認する。
立ち上げた EC2 上で以下のコマンドを実行し、S3 バケットの一覧を取得してみます。
aws s3 ls
IAM ロールが何もアタッチされていないため、credentials に関するエラーが発生し、S3 の情報を取得することができませんでした。

2. EC2用のIAMロールを作成し、S3への読み取り権限を付与する
課題:EC2 から S3 にアクセスするための権限をどのように用意するか。
解決策:IAM サービスで EC2 用のロールを作成し、AmazonS3ReadOnlyAccess ポリシーをアタッチする。
IAM サービスの「ロール」メニューから「ロールの作成」をクリックします。

どの AWS サービスにアタッチするロールなのかを選択します。今回は EC2 から S3 にアクセスするため、「EC2」を選択します。

次に、ロールにアタッチするポリシーを選択します。フィルターに「S3」と入力し、表示された一覧から「AmazonS3ReadOnlyAccess」にチェックを入れます。

タグの設定は任意です(今回は特に設定せず進めます)。

最後にロール名を入力し、「ロールの作成」をクリックすればロールの作成は完了です。

3. 作成したIAMロールをEC2にアタッチして動作確認する
課題:作成した IAM ロールを EC2 インスタンスに反映させる必要がある。
解決策:EC2 のセキュリティ設定から IAM ロールを変更し、再度 S3 へアクセスして権限が反映されていることを確認する。
EC2 サービスから対象のインスタンスを選択し、「アクション」→「セキュリティ」→「IAM ロールを変更」をクリックします。

作成した IAM ロールを選択し、「保存」をクリックします。

改めて EC2 上で以下のコマンドを実行してみます。
aws s3 ls
今度は S3 バケットの一覧が正常に取得できました。IAM ロールにアタッチした AmazonS3ReadOnlyAccess ポリシーが反映され、EC2 から S3 への読み取りアクセスが許可されていることが確認できます。

まとめ:IAMロールはAWSリソースに権限を委譲する仕組み
本記事で紹介したポイントをまとめます。
- IAM ユーザーは人やアプリケーション向けのアカウント、IAM ロールは AWS リソースにアタッチして権限を委譲する仕組み
- リソースが他のリソースにアクセスできるかどうかは、アタッチされた IAM ロールのポリシーによって決まる
- アクセスキーを直接設定する方法もあるが、漏洩リスクがあるため IAM ロールの利用が推奨される
- EC2 用のロールを作成し、AmazonS3ReadOnlyAccess をアタッチすることで、EC2 から S3 への読み取りアクセスが可能になることを確認した
IAM ロールにアタッチするポリシーは、必要最小限の権限のものを選ぶのが基本です。今回のように「読み取りだけ許可したい」という場合は ReadOnly 系のポリシーを使うなど、目的に合ったポリシーを選ぶようにしましょう。






ディスカッション
コメント一覧
まだ、コメントがありません