はじめに
IAMってナントカポリシーとか色々あってわかりにくい!と思ったので自分なりにまとめてみました。
AWS初心者向けの記事となります。
そもそもIAMって?
AWS IAM(Identity and Access Management)とは、AWSにおける認証や認可を行うサービスです。
マネージメントコンソールへのログインや、AWS CLIを使ったリソース操作、AWSのサービス同時の連携などに利用されるサービスとなっています。
IAMには以下表のとおり、複数のコンポーネントがあります。
コンポーネント | 説明 |
---|---|
IAMユーザー | AWSアカウントへのアクセスの認証単位 |
IAMポリシー | 操作権限の認可を行う仕組み |
IAMグループ | IAMユーザーをグループ単位で管理する機能 |
IAMロール | AWSリソースへの操作権限の認可を行う機能 |
それぞれのコンポーネントについて解説していきます。
IAMユーザー
IAMユーザーとは、AWSアカウント上に作成するユーザーです。
IAMユーザーには、権限を割り当てることで、必要な操作を行うことができます。
権限を割り当てる際には、AWS Well-Architected Frameworkの設計原則の一つである「最小権限の原則」に従い、必要最低限の操作が行える権限を付与しましょう。
作成したIAMユーザーは、AWSマネージメントコンソールへのログインや、AWS CLI、AWS SDKなどのツールから操作を行う場合に利用します。
AWSマネージメントコンソールへのアクセスには、ユーザー名とパスワードによる認証、ツールからのアクセスには、アクセスキーとシークレットアクセスキーを使用した認証という違いがあるのも覚えておきましょう。
IAMポリシー
IAMポリシーとは、操作権限の認可を行うための仕組みです。
IAMユーザーの説明に書いた、「権限」と表記したものの実態がIAMポリシーです。
IAMポリシーは単体で利用するのではく、何かのIAMエンティティにアタッチして利用します。
IAMポリシーには、以下のようなポリシーの種別があります。
ポリシー分類 | 概要 |
---|---|
AWS管理ポリシー | AWSが提供しているポリシー群で、複数のIAMエンティティで使いまわしができる。 IAMユーザーによる編集はできない。 |
カスタマー管理ポリシー | ユーザー自身が作成するポリシー群で、複数のIAMエンティティで使いまわしができる。 IAMユーザによる編集が可能なため、必要に応じてポリシーの追加/削除/修正が可能。 |
インラインポリシー | IAMエンティティ固有のポリシー群で複数のIAMエンティティで使いまわしができない。 ユーザーによる編集が可能なため、必要に応じてポリシーの追加/削除/修正が可能。 |
(補足)カスタマー管理ポリシーとインラインポリシーの利用用途
上の表では、いまいちカスタマー管理ポリシーとインラインポリシーの差がわかりにくかったと思います。
カスタマー管理ポリシーは、複数のIAMエンティティで使いまわしができるため、例えば、IAMユーザAとIAMユーザBに対し、一つのIAMポリシーをそれぞれアタッチすることで同じ権限を持たせるといった運用ができます。
インラインポリシーでは、上記のような使い方ができないため、IAMユーザAに対するインラインポリシーと、IAMユーザBに対するインラインポリシーをそれぞれ作成する必要があります。
つまり、汎用的に使いたいポリシーは、カスタマー管理ポリシーで管理し、
特権操作など、特定のIAMエンティティに対し、固有の権限を付与したい場合は、インラインポリシーで管理するといった運用がおすすめです。
IAMグループ
IAMグループとは、IAMユーザをグループで管理するための仕組みです。
IAMグループに対してIAMポリシーを設定して、IAMユーザを作成したIAMグループに振り分けることで、それぞれのIAMユーザにポリシーを設定しなくても権限管理ができます。
IAMロール
IAMロールとは、AWSリソースに対して、他のAWSリソースの操作権限を認可するための仕組みです。EC2インスタンスから、S3バケットへの操作を行う場合など、AWSリソースからAWSリソースへの操作(アクセス等)を行う場合に利用します。
IAMロールは、IAMユーザーやIAMグループ同様、IAMポリシーを設定して権限の認可を行います。作成したIAMロールをAWSリソースにアタッチすることで利用が可能となります。
ここで出てくるのが、「信頼ポリシー」です。
信頼ポリシーとは、IAMロールがどのAWSリソースへアタッチできるかを設定するポリシーです。信頼ポリシーは、JSONと呼ばれる記法で定義します。
信頼ポリシーには、Principalという要素にアタッチ先のAWSリソース(サービス名)を記載し、Actionという要素に権限の委任を行うというアクションを記載することで、IAMロールをアタッチしたAWSリソースに対し、権限制御が可能になります。
おわりに
IAMについて概要を解説しました。
この記事が誰かの学習の助けになれば幸いです。