この記事について
この記事は、AWSの重要サービスの1つであり、認定試験の勉強で理解に苦労した分野でもあるIAM
について、自分なりに整理した内容をまとめたメモです。
AWS IAMとは
IAMとは、Identity and Access Management
の略称であり、「アイアム」と読みます。
公式のユーザーガイドでは、以下のように説明されています。
AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM により、誰を認証 (サインイン) し、誰にリソースの使用を承認する (アクセス権限を持たせる) かを制御します。
これだけでもIAMがどのようなサービスなのか、何となく理解はできますが、もう少し具体例を挙げてみたいと思います。
認証と認可
認証
認証とは、本人しか知り得ない情報や本人特有の情報を用いて、相手が誰なのかを判別することを言います。
例えば、ID・パスワードの組み合わせや、生体認証(指紋や虹彩など)がこれに該当します。
AWSでは、IAMユーザーによって認証が実現されます。
認可
認可とは、対象の権限を制御する、つまりやっても良い事とダメな事を決めることを言います。
オフィスに例えれば、ある社員Aさんは執務スペースへの入室は認めるが、セキュリティルームへの入室は認めない、といったことが認可にあたります。
AWSでは、IAMポリシーによって認可が実現されます。
認証したユーザーに関連付けられたIAMポリシーで、各サービスの利用可否を制御しています。
IAMの中心となる機能
IAMユーザー
IAMユーザーによって、AWSは利用者(ユーザー)の判別を行います。
IAMユーザーを利用するのは、マネジメントコンソールを使用する人間だけではなく、AWSのAPIを実行するプログラムも含まれます。
誰が使っていたのかを判別できるよう、利用者ごとにIAMユーザーを作成することが推奨されます。
ユーザーがマネジメントコンソールを使うときは12桁のアカウントID・ユーザー名・パスワード、
プログラムからAWSのサービスを利用するときはアクセスキーID・シークレットアクセスキーを使うことが一般的です。
IAMグループ
同じ権限や役割を持ったIAMユーザーの集まりをIAMグループといいます。
IAMグループには権限を付与することができるため、「開発担当」や「運用担当」といったグループを作成しておくと、IAMユーザーが所属するグループを変更するだけで、適切な権限管理が可能になります。
(ユーザー個別に権限を付与すると、権限の付け忘れや付けすぎなどのミスを招きやすくなります)
以下のイメージのように、1ユーザーを複数のグループに所属させることも可能です。
IAMポリシー
アクセス権限を設定するドキュメントのことをIAMポリシーといいます。JSONフォーマットで記述します。
IAMポリシーは、ターゲットに対して関連付けをする(アタッチする)ことで、初めて効力を発揮します。つまり、どこにも関連付けされていないポリシーを作っただけでは、何の効力も持たないということになります。
よく利用されるIAMポリシーは、以下のように分類されます。
-
アイデンティティベース:ユーザーやグループ、ロール(=アイデンティティ)に設定するポリシー
- インラインポリシー:各ターゲットに個別で直接指定するポリシー。同じ設定を複数の対象に適用するには向かないため、管理ポリシーの使用が推奨される
- 管理ポリシー
- AWS管理ポリシー:AWSが管理しているポリシー。汎用的なパターンが予め用意されており、ポリシーのバージョンアップも適宜行われる
- カスタマー管理ポリシー:利用者が独自に作成するポリシー。利用者が責任を持って適切な管理を行う必要がある
-
リソースベース:S3バケットなど、AWSリソースに対して設定するポリシー。リソースが主体なので、誰に対して許可(拒否)するのか、明示的な指定が必要
- インラインポリシー:AWSリソースに対しては、インラインポリシーのみ適用可能
ポリシーは拒否が優先
一方で許可、他方で拒否という相反するポリシーが設定されている場合は、順序やポリシーの種別に関係なく拒否が優先されます。
とあるサービス全般の許可をAWS管理ポリシーでしておき、カスタマー管理ポリシーでシステムにあわせた特定の操作のみ拒否するという手法をとることができます。
明示的な許可も拒否も設定されていない操作は拒否されるため、許可対象の操作が多い場合に有効です。
IAMロール
AWSのサービスなどに対して、一時的にAWSへのアクセス権限を付与するために使用する機能です。
シークレットキーなどの認証情報をプログラムに記述する必要がなくなるため、セキュリティを向上させることができます。
IAMロール 信頼ポリシー
IAMロールに設定するリソースベースのポリシーです。
なんでもアクセス権限を取得できてしまっては困るため、このポリシーで一時的なアクセス権限の取得を認める対象を設定します。
許可する対象のことを「プリンシパル」といいます。
- EC2インスタンスを対象とした信頼ポリシーの設定例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com" },
"Action": "sts:AssumeRole",
}
]
}
なお、EC2インスタンスとIAMロールを関連付ける場合は、インスタンスプロファイルを経由しなければなりません。
マネジメントコンソールでEC2インスタンスとIAMロールを関連付けると、自動的にインスタンスプロファイルが作成されるため、あまり意識することはありませんが、CloudFormationなどで構築する場合は指定が必要になります。