前の記事では、AWSのアクセス権限を定義する IAMポリシーについて学びました。
IAMポリシーを使えば、 「S3を読み取れる」「EC2を起動できる」といった権限を定義できます。
しかし、実際にAWSを利用すると次のような場面が出てきます。
EC2からS3へ安全にアクセスさせたい。
この2つは同じ仕組みで実現する?
ここで登場するのが IAMグループとIAMロールです。
名前が似ているため混同しやすいですが、 この2つは目的が大きく異なります。
IAMグループとIAMロールの役割を理解し、 「ユーザーをまとめるならグループ」「一時的に権限を利用するならロール」 と判断できる状態を目指します。
IAMグループとIAMロールの違い
まずは、2つの違いをシンプルに整理してみましょう。
複数のIAMユーザーをまとめて権限管理する
必要な主体が一時的な権限を利用する
まずはこの違いを覚えてから、 それぞれの仕組みを詳しく見ていきましょう。
IAMグループとは?
IAMグループ(IAM User Group)とは、 複数のIAMユーザーをまとめて管理するための仕組みです。
たとえば、3人の開発担当者がいて、 全員に同じ権限を与えたいとします。
それぞれへ個別に同じIAMポリシーを設定することもできますが、 ユーザーが増えるほど管理が複雑になります。
そこで、たとえば DevelopersというIAMグループを作成します。
IAMポリシーをDevelopersグループへ設定すると、 グループに所属するIAMユーザーがその権限を利用できます。
実際にAWSへアクセスするのはIAMユーザーです。 IAMグループは、IAMユーザーの権限管理をしやすくするための仕組みです。
IAMユーザーは複数のグループに所属できる
1人のIAMユーザーが所属できるIAMグループは、 1つだけではありません。
たとえば、あるユーザーを DevelopersとReadOnlyの 両方へ所属させることもできます。
IAMグループを利用することで、 役割ごとに権限を整理しやすくなります。
IAMグループについて覚えておきたいこと
複数ユーザーの権限を管理しやすくする
グループのユーザーがその権限を利用する
IAMグループの中へ別のIAMグループは入れられない
IAMロールとは?
続いて、 IAMロール(IAM Role)を見てみましょう。
IAMロールは、 必要な主体が引き受けることで、決められた権限を一時的に利用できる仕組み です。
IAMユーザーとの大きな違いは、 IAMロールには通常のIAMユーザーのような 長期的なパスワードやアクセスキーが紐付いていない ことです。
IAMロールを引き受けると、 そのロールに応じた 一時的な認証情報を利用できます。
IAMロールはどんなときに使う?
IAMロールの代表的な利用例が、 AWSサービスから別のAWSサービスへアクセスする場面 です。
例として、 EC2上で動作するアプリケーションから S3のファイルを取得する場合を考えてみましょう。
アクセスキーをEC2へ保存する方法
EC2内部へ長期的なアクセスキーを保存すると、 認証情報の管理が必要になり、 漏えいなどのリスクも生まれます。
IAMロールを利用する方法
EC2に適切なIAMロールを関連付けることで、 アプリケーションは必要な権限を 一時的な認証情報を使って利用できます。
AWSサービスから別のAWSサービスへアクセスするときは、 IAMロールが重要な役割を持ちます。
IAMロールはEC2だけが使うものではない
IAMロールはEC2専用の仕組みではありません。
EC2やLambdaなどが必要な権限を利用
必要に応じて別の権限を持つロールを引き受ける
クロスアカウントアクセスなどで利用
初級ではすべての利用パターンを覚える必要はありません。
まずは 「IAMロールは必要な主体が権限を一時的に利用するための仕組み」 と理解しておきましょう。
IAMポリシーとIAMロールは何が違う?
ここは初心者が特に混同しやすいポイントです。
S3を読み取れる
EC2を起動できる
などの権限を定義
AWSサービスやユーザーなどが 必要に応じて引き受ける
つまりIAMロールの権限も、 IAMポリシーによって定義されます。
IAMユーザー・グループ・ロールを整理しよう
ここまで学んだ3つを並べると、 違いが分かりやすくなります。
| 項目 | IAMユーザー | IAMグループ | IAMロール |
|---|---|---|---|
| 主な役割 | 個別のIAMアイデンティティ | IAMユーザーをまとめる | 権限を引き受ける |
| IAMポリシー | 設定できる | 設定できる | 設定できる |
| 長期認証情報 | 持つ場合がある | 持たない | 持たない |
| 代表的な用途 | 特定用途のIAMアクセス | IAMユーザーの権限管理 | AWSサービス・一時的な権限委任 |
現在のAWSでは、人がAWSへアクセスする場合、 長期的なIAMユーザー認証情報だけに依存するのではなく、 フェデレーションなどを利用して一時的な認証情報を使用する方法が推奨されています。
理解度チェック:グループとロールを使い分けよう
実際の状況を見て、 IAMグループとIAMロールのどちらを使うか判断してみましょう。
この場面では何を使う?
「ユーザーをまとめる」のか「権限を引き受ける」のかがポイントです。
初心者が間違えやすいポイント
① IAMグループとIAMロールは同じもの
IAMグループは IAMユーザーをまとめて権限管理する仕組みです。
IAMロールは 必要な主体が権限を引き受けるための仕組みです。
② IAMロールにはアクセスキーを保存しておく
IAMロールはIAMユーザーのような 長期的なアクセスキーを持つ仕組みではありません。
ロールを引き受けると、 一時的な認証情報が利用されます。
③ IAMグループの中にIAMグループを作れる
IAMグループには IAMユーザーを所属させます。
グループの中へ別のグループを入れる グループの入れ子構造は作れません。
確認問題:IAMグループとIAMロールを理解できたか確認しよう
IAMグループの主な役割はどれですか?
IAMグループを利用すると、 複数のIAMユーザーへ共通する権限をまとめて管理できます。
EC2からS3へ安全にアクセスさせたい場合、適切なのはどれですか?
EC2などのAWSサービスから別のAWSサービスへアクセスするときは、 IAMロールを利用することで長期的なアクセスキーを EC2へ保存せずに権限を利用できます。
IAMロールの特徴として正しいものはどれですか?
IAMロールは長期的な認証情報を持たず、 ロールを引き受けた際に一時的な認証情報を利用します。
3問に挑戦してみましょう。
まとめ
IAMグループは 複数のIAMユーザーをまとめて権限管理する仕組み
IAMグループへポリシーを設定すると、 所属するIAMユーザーがその権限を利用できる
IAMロールは 必要な主体が権限を引き受けるための仕組み
IAMロールは長期認証情報ではなく、 一時的な認証情報を利用する
EC2などのAWSサービスから別のサービスへアクセスするときも IAMロールが重要
次はAmazon Cognitoを理解しよう
ここまで学習したIAMでは、 AWS環境へアクセスするための 認証・認可や権限管理について学んできました。
しかし、AWS上にWebアプリケーションを作った場合、 もう1つ別の「ユーザー」を考える必要があります。
たとえばECサイトを作った場合、 そのサイトを利用する一般ユーザーに IAMユーザーを1人ずつ作成するわけではありません。
そこで登場するサービスの1つが Amazon Cognitoです。
次の記事では、 アプリケーションのユーザー認証を実現する Amazon Cognitoの基本を学びます。
次は「Amazon Cognito」を学びましょう
AWSを操作するユーザーではなく、 Webサイトやアプリケーションを利用するユーザーを どのように認証するのかを学びます。
IAMとCognitoの違いにも注目しましょう。
Amazon Cognitoの基本を理解する →
