AWS IAMとは?ロール?プリンシパル?全体像を体系的に解説【AWS認定試験 SAA/DVA/CLF対策】
本ページでは、AWSのアクセス管理サービスであるAWS IAM (Identity and Access Management)について、初心者向けにその特徴や用途を紹介します!
私自身が「初めて勉強したとき、これを知りたかった!」と感じた内容を中心にまとめていますので、ぜひ最後までご覧ください!

AWS 認定クラウドプラクティショナー
(AWS Certified Cloud Practitioner, CLF)
AWS 認定ソリューションアーキテクト アソシエイト
(AWS Certified Solutions Architect – Associate, SAA)
AWS 認定デベロッパー アソシエイト
(AWS Certified Developer – Associate, DVA)
AWS IAMの概要
AWS IAM(Identity and Access Management、アイアム)は、AWSリソースへのアクセスを管理するためのサービスです。
IAMについて、先にざっくり言ってしまうと…
となっています!
いつなんどきもセキュリティは大事ですが、AWSのようなクラウドサービスではその理解がますます重要になってきます。なぜなら、その利用の手軽さゆえに、あんまり深く考えなくても便利に使えてしまうからです。
一方、セキュリティのことを理解しようとしても、サーバーなどの実体が目に見えているわけではないので、イメージが付きにくく分かりにくい部分も多いです。以下では、IAMの具体的な使い方というより、IAMを理解するための知識を出来るだけ体系的解説したいと思います。

アイコン

こちらが、アーキテクチャ図で用いられるIAMのアイコンです。
いかにもセキュリティって感じで分かりやすいですね。簡略化された図では省略されている場合も多いですが、必ず使用されているサービスです。
IAM アクセス管理の全体像
全体像を図にしてみました。
この図に出てくる単語は重要単語なので、押さえておくと良いです!各単語の解説はこの下で行っていますので、適宜参照してください。

なお、この図では、サインイン認証情報による認証(Authentication)が済んでいる前提となっています。

認証もIAMの機能の一つですが、AWSを使うエンジニアがよく気にするのは、どちらかというと認可の方(ポリシーの設定など)であるため、そこにフォーカスしています!
IAM 単語解説
プリンシパル
IAMの仕組みにおいて、リソースに対してアクセスしようとしている「アクセス元」に相当するものです。IAMユーザーや、IAMロールといったものが代表的なプリンシパルです。
ポリシー(下記の解説参照)を記述するときに、”Principal”という要素があり、ここで「そのポリシーの適用先となるプリンシパル」を指定できます。
例えば、ここでワイルドカード (*)を使うと「全てのプリンシパル」という意味になります。セキュリティの観点では、全てのプリンシパルに対して何かの操作を許可するのは非常に危険ですので、ワイルドカードは慎重に利用しましょう。
"Principal": "*"ユーザー

AWSを利用するために、各利用者にIDが与えられます。
そのIDを用いてAWSを使う人/ものがユーザーです。
ユーザーには下記の種類があります。
1.ルートユーザー
AWSアカウント作成と同時に作成される、いわゆる管理者用アカウントです。権限が非常に強力であるため、ルートユーザーでしかできない作業以外は、下記のIAMユーザーの使用が推奨されています。

会社など大きな組織においては、大半の開発者はこのルートユーザーに触れる機会は無い(マネージャーやリーダー職の人が管理している)と思います!
2.IAMユーザー
マネジメントコンソール上から作成できるユーザーで、AWSを利用する各利用者向けに作成します。IAMユーザーごとに権限を設定することで、安全にAWSを利用可能になります。
例えば、データの閲覧だけできれば良いメンバーに対しては、閲覧権限だけを付与したIAMユーザーを渡すことで、誤ってデータを削除したりするリスクを排除できます。
3.フェデレーテッドユーザー
外部のID(Google、Azure ADなど)からAWSへアクセスするユーザーのことです。例えば会社において、下記のような使い方をされたりします。
- 社員が社内アカウント(例:Microsoft Azure AD)でログイン
- そのままAWSにフェデレーテッドユーザーとしてログイン(シングルサインオン)
ロール (IAMロール)

アクセス権限を付与できる「役割」に相当する概念です。
AWSリソースに対してアクセス権限を付与するときに使用します。
そのヘルメット(キャップ?)のアイコンを連想させて、「AWSリソースに、役割付きのヘルメット(=ロール)を被せることで、AWSリソースはそれに応じた権限が付与される」と覚えておくのが良いです。
なお、AWSにおける「ロール」は「IAMロール」のことであり、これら2つは同じものです。また、各種ドキュメントで「~ロール」という様々な名前が出てくることがありますが、いずれもIAMロールのことであり、使い方や文脈によって様々な名前が付いているだけです。

AWSとは関係なしに、シンプルに英単語の「ロール」という意味で使われている可能性も一応あるので、その点は注意してください!
リクエスト
プリンシパルがAWSサービス/リソースに対してアクセスし、何らかの操作を実行するために送信する要求(リクエスト)です。プリンシパルが実行する操作は、操作元に応じて下記のように呼び分けがされています。
- アクション:AWSマネジメントコンソールからの操作
- オペレーション:AWS SDKまたはCLIからの操作
ポリシー
「どのリソースに対して、どんな操作を許可(あるいは拒否)するか」という具体的なルールを定義したものです。大別すると下記2種類があります。
1.アイデンティティベースポリシー
ユーザーやグループ(ユーザーの集まり)、ロールに対して付与するポリシー。
対象ごとに個別に直接設定するインラインポリシーと、複数のユーザーやグループ等に付与できる独立したポリシーである管理ポリシーに分類されます。
2.リソースベースポリシー
S3などのAWSリソースに対して直接付与するポリシー。クロスアカウントアクセスを許可したいときなどに使用します。アイデンティティベースポリシーに比べると、使用頻度は低めです。
最後に、簡単なポリシーの具体例を紹介します。下記は、S3にファイルアップロードを許可するポリシーです。何も分からなくても、文字だけ見れば何となく意味は伝わるかと思います。例えばこのポリシーをIAMユーザーに付与することで、そのユーザーはS3にファイルがアップロードできるようになります。
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}まとめ
ここまで、IAMの概要や関連した重要単語の解説を行いました。
実際にAWSを使うとなった時には必ずIAMポリシーの設定が必要ですので、実用的には非常に重要な部分になっています。また、このためAWS認定のソシューションアーキテクト アソシエイト等の試験でも、非常によく出題されます。
本記事で、IAMの全体像の理解が少しでも深まれば幸いです!
