【AWS】IAMロールとIAMポリシーの違いとは?わかりやすく解説!

今回はAWSにおけるIAMロールとポリシーの違いについて整理していきたい。

AWSのIAMとは「Identity and Access Management」の略で、AWSの操作を行うユーザーや権限を一元管理するためのサービスだ。

IAMには下記4つの重要な要素がある。

  1. IAMユーザー
  2. IAMグループ
  3. IAMポリシー
  4. IAMロール

上記4要素の内、ユーザーやグループは比較的イメージがつきやすいのだが、IAMロールとIAMポリシーについてはAWSを使い始めた時の私は大混乱していた(笑)。

そのため、今回は備忘録もかねて、IAMロールとIAMポリシーの違いに焦点を当てて私が理解してきたことを整理していく。

スポンサーリンク

IAMポリシーとは?

IAMポリシーは「AWSのどのリソースに対してどのような操作を許可するか?」という権限を定めたものだ。

「AWSのリソース??」とまずここで私はつまづいたのだが(笑)、AWSのリソースというのは例えばEC2インスタンスとかS3バケットのことをイメージするとわかりやすくなる。

例えば、下記はデフォルトで用意されている「AmazonS3FullAccess」というポリシーを表示した例だが、これは簡単に説明すると「S3というAWSのリソースに対して全ての操作権限を許可する」というポリシーだ。

IAMポリシー

各ポリシーの内容は上記のようにJSON形式で記載されている。

今回はIAMロールとIAMポリシーの違いに焦点を当てたいので、設定内容の詳細については踏み込まないが、JSON形式により、「どのAWSサービスに対してどのような権限を付与するか?」「どういう条件の時にこのポリシーを発動させるか」などが書かれている。

IAMポリシーの3つの分類

IAMポリシーは実は下記のように3つのポリシーに分類することができる。

  1. AWS管理ポリシー
  2. カスタマー管理ポリシー
  3. インラインポリシー

AWS管理ポリシーはあらかじめ各AWSサービスを利用するためにAWS側で用意してくれているポリシーだ。

先ほど例に挙げた「AmazonS3FullAccess」もAWS管理ポリシーの1つだ。

AWS管理ポリシーは「AWSサービス名+FullAccess」とか「AWSサービス名+ReadOnlyAccess」というようなポリシー名が多い。

AWS管理ポリシーは1000個以上も用意されているが(23年7月時点で)、ユーザー側で編集することはできない。

そのため、より細かく権限を制御したいという場合はユーザー自身で作成・編集が可能なカスタマー管理ポリシーやインラインポリシーを使っていくことになる。

本記事ではこれ以上3つのポリシーの違いについてはこれ以上は触れないが、それぞれの特徴は下記の通りだ。

Noポリシー分類作成者概要
1AWS管理ポリシーAWS・AWSによってデフォルトで用意されているIAMポリシー
・複数のIAMユーザーやIAMグループ、IAMロールで使いまわしが可能
・ユーザーは編集不可
2カスタマー管理ポリシーユーザー・ユーザーが作成するIAMポリシー
・複数のIAMユーザーやIAMグループ、IAMロールで使いまわしが可能
・ユーザーによって追加/削除/修正が可能
3インラインポリシーユーザー・ユーザーが作成するIAMポリシー
・複数のIAMユーザーやIAMグループ、IAMロールでの使いまわし不可
・ユーザーによって追加/削除/修正が可能

IAMポリシーは単体では利用できない

IAMポリシーはそれ単体では利用することが出来ない。

IAMユーザーやIAMロールなどの権限を与える対象に対してIAMポリシーをアタッチ(適用)することで初めて利用することが出来る。

例えば、AWS管理ポリシーの1つである「AmazonS3FullAccess」というポリシーはそれが存在するだけでは何の効果も発揮しない。

このポリシーを「A」というIAMユーザーにアタッチ(適用)することで初めて「AmazonS3FullAccess」というポリシーは効果を発揮できるようになるのだ。

IAMポリシー適用例

IAMポリシーは上記例のようにIAMユーザーにアタッチすることも出来るし、ユーザーをまとめたIAMグループ、後述するIAMロールにもアタッチして利用することが出来るようになっている。

ただし、AWSリソース(EC2やS3等)に直接アタッチすることはできない。

そのため、対象のAWSリソースから別のAWSリソースに対して何か操作をさせたい場合はこれから紹介するIAMロールが必要になってくる。

スポンサーリンク

IAMロールとは?

IAMロールはあるAWSリソース(EC2とかLambda等)に対して、他のAWSリソース(S3とかAurora等)を操作する権限を認可する仕組みのことだ。

AWSにおいて、AWSリソース(EC2とかS3などを指す)を操作する主体としては大きく下記2つに分類できるのだが、

  1. IAMユーザーがAWSリソースを操作する場合
  2. AWSリソースが別のAWSリソースを操作する場合

IAMロールが必要になるのは、2の「AWSリソースが別のAWSリソースを操作する場合」だ。

例えば、「あるEC2インスタンスからS3にアクセスできるようにしたい」という場合を考えてみよう。

これがもし「あるIAMユーザーがS3にアクセスできるようにしたい」という場合であれば、前述したようにそのIAMユーザーにS3のアクセス権限を定めたIAMポリシーを直接アタッチすれば解決する。

しかし、IAMポリシーはAWSリソースに対して直接アタッチすることが出来ない。
※例外はあるのだが、ややこしくなるので本記事では割愛する

IAMロール

では、AWSリソースに対して権限を付与するにはどうすればいいのか?

ここでIAMロールの出番となるわけである。

IAMロールはIAMポリシーと異なり、AWSリソース(EC2とかLambda等)に直接アタッチすることが出来る。

そして、このIAMロールには必要な操作権限を定義したIAMポリシーを複数アタッチすることが出来るのだ。

つまり、「EC2からS3を操作したい!」という場合は、例えば下記のような「EC2forS3FullAccess」という名称のIAMロールを作成し、S3の操作権限を定義したIAMポリシー(今回はAmazonS3FullAccess)をそのIAMロールにアタッチする。

IAMロール②

そして、そのIAMロールを対象のEC2にアタッチすれば、該当のEC2からS3にアクセスをすることが出来るようになる。

IAMロール③

 

このようにIAMロールはAWSリソースが別のAWSリソースを操作できるようにするために使われる。

1つのAWSリソースに対してIAMロールは1つのみアタッチできる

1つのAWSリソースにアタッチできるのは1つのIAMロールだけだ。

例えば、あるEC2に「A」というIAMロールがアタッチされていた場合、「B」というIAMロールを同じEC2にアタッチすることはできない。

もし「B」というIAMロールをEC2にアタッチしたい場合は、「A」のIAMロールを外して、「B」のIAMロールをアタッチする必要がある。

「じゃ対象のEC2に追加のアクセス権を付与したい場合はどうすればいいの??」

という疑問が出てくるかもしれない。

その場合は対象のEC2にアタッチされているIAMロールに対して付与したいアクセス権が定義されたIAMポリシーを追加でアタッチすればOKだ。

IAMポリシーは1つのIAMロールに対して複数アタッチすることが出来るので、既にEC2にアタッチされているIAMロールに必要なアクセス権が定義されたポリシーを追加でアタッチするのだ。

 

紛らわしいのだが、同じIAMロールを複数のAWSリソースにアタッチする(使いまわす)ことは可能だ。

例えば、AというEC2とBというEC2に同じIAMロールをアタッチすることは出来る、という意味である。

IAMロールとポリシーの違い

最後にこれまで説明してきたIAMロールとポリシーの違いを整理すると下記の通りだ。

概要アタッチ先アタッチ先への適用可能数
IAMロール対象のAWSリソースが他のAWSリソースを
操作する権限を認可する仕組み
AWSリソース
(EC2やLambda等)
1つのAWSリソースに対して1つのみ
IAMポリシー「AWSのどのリソースに対してどのような操作を
許可するか?」という権限を定めたもの
IAMユーザー/IAMグループ/
IAMロール
同じIAMロールやIAMユーザーに複数適用可能

IAMロールはIAMポリシーをグルーピングして対象のAWSリソース(EC2など)に権限を付与するものだとイメージすると2つの違いが整理しやすくなるだろう。

AWSの関連記事
    おすすめの記事