AWS IAM(Identity and Access Management)
AWSにおいて「どのユーザーが」「どのAWSリソースに対して」「どのような操作ができるか(できないか)」を定義する、「認証」「認可」の仕組みを提供するサービス。ユーザーの操作ミスによりEC2インスタンスを削除してしまう事故を防げたり、アカウントが乗っ取られた際の影響を限定することができます。AWSで無料で提供。
IAMでは、AWSのリソースに対する権限を「IAMポリシー」として定義。定義したIAMポリシーは、「IAMユーザー(IAMグループ)」やAWSリソースに対してアタッチ(付与)・デタッチ(剥奪)することができる。IAMユーザーやAWSリソースはアタッチされているIAMポリシーの範囲で操作を行うことができ、IAMポリシーによって許可されていない操作は実行できない。
アカウントの種類
■AWSアカウントとIAMユーザー
AWSには「AWSアカウント(ルートユーザー)」「IAMユーザー」という2種類のアカウントがある。
1、AWSアカウント(ルートユーザー)・・・全てのサービスに対する全ての権限をもつユーザー。多要素認証ログインを推奨。
2、IAMユーザー・・・初期状態では存在せず、AWSアカウントにログイン後作成するアカウント。
これらのユーザーは「ユーザーIDとパスワード」または「アクセスキーとシークレットアクセスキー」を用いて認証することで、WebやコマンドなどからAWSリソースへアクセスします。
○ユーザーIDとパスワード ... 任意のIDと自分で設定したパスワードを用いた認証方法。マネジメントコンソールにログインする際に使用する。
○アクセスキーとシークレットアクセスキー ... AWSによって作成されるアクセスキーIDと、対になるシークレットアクセスキーを用いた認証方法。AWS CLIやAWS APIからAWSリソースにアクセスする際に使用する。
AWSアカウントは非常に強力な権限を持つため、AWSではAWSアカウントを極力使用しないことを推奨。AWSアカウントの運用は、強力なパスワードの採用や定期的なパスワード変更に加えてMFA(多要素認証)を有効にするなど、厳重なセキュリティ対策を取る必要あり。
多要素認証とは、パスワードやアクセスキーによる認証に加えて認証コードやワンタイムパスワードなどの複数の要素を使う認証方式。AWSでは、AWSアカウントのほかIAMユーザーにも多要素認証を有効にできます。
また、AWSアカウントはIAMユーザーに対するパスワードポリシーも設定できます。パスワードポリシーとは、パスワードの文字列長や大文字・数字・記号を含むか、パスワードの有効期限などの設定のことで、IAMユーザーをセキュアに運用するために使用します。ただし、IAMユーザーに対するパスワードポリシーはAWSアカウントには適用されません。
・AWS Organizations
複数のAWSアカウントをまとめて管理する機能。AWS Organizationsでは、管理するAWSアカウントに対して権限を設定したり、管理するAWSアカウントへの請求情報をひとまとめにすることができます。
Organizationsでは複数の組織を階層構造で管理します。
Organizationsに属している個々のアカウントや組織(OU)に対し、利用できるAWSサービスやアクションを制限する「サービスコントロールポリシー(Service Control Policy:SCP)」を設定することもできます。SCPを用いると、例えばテスト用のアカウント(群)は特定のサービスにしかアクセスできないようにしたり、全てのアカウントに対してMFA(多要素認証)を強制するように設定することなどができます。
・IAMグループ
IAMグループは複数のIAMユーザーをまとめたもののこと。複数のIAMユーザーに対してまとめてアクセス制御を行う際に使用。
ただし、グループにグループを所属させることはできません。
・IAMロール
IAMロールは、AWSのリソースやアプリケーション、他のアカウントに対して一時的にAWSリソースへのアクセス権限を付与する際に利用。
AWSのリソースはユーザーが利用するものだけではなく、AWSサービスやアプリケーションが使用するものもあります。例えばEC2インスタンス上で動作するアプリケーションがS3バケットを利用する場合、アプリケーションはアクセスキーおよびシークレットアクセスキーを使用して認証したのちにS3バケットへアクセスします。しかしアプリケーションプログラムに認証情報を埋め込むのはセキュリティリスクが高く危険。
IAMロールを使用すると、このようなリスクを回避できます。IAMロールでは一時的なアクセスキーを生成・使用することにより認証します。生成したアクセスキーは短時間で使用できなくなるため、漏洩してもリスクは高くありません。
EC2インスタンスにIAMロール(インスタンスプロファイル)を付与することにより、一時的なアクセスキーを使ってS3バケットへアクセス。
・インスタンスプロファイル
マネジメントコンソールからEC2のIAMロールを作成すると、「インスタンスプロファイル」が自動的に作成。インスタンスプロファイルとはIAMロールを格納する入れ物のようなもので、EC2インスタンスは起動時にインスタンスプロファイルを読み込み、設定されたIAMロールの権限で動作。
・IAMポリシー
IAMポリシーとはAWSリソースに対する権限を定義したもの。Resource(どのAWSリソースに対して)、Action(どのAWSサービスのどの操作を)、Effect(許可または拒否)の3つの要素で定義。
例えば「S3バケットMyBucketに対する書き込み・読み込みを許可する」というIAMポリシーを作成しIAMユーザーにアタッチすることで、対象のユーザーはMyBucketのオブジェクトを読み書きできるようになります。一方、許可されていない削除等のアクションは実行できません
さらに、ポリシーを適用する条件(送信元IPアドレスの指定など)も加えることができます。
IAMポリシーには「アイデンティティ(ユーザー)ベースのポリシー」と「リソースベースのポリシー」がある。
アイデンティティベースのポリシーは、IAMユーザー、IAMグループ、IAMロールにアタッチするポリシーのことをいい。
アイデンティティベースのポリシーには以下の種類がある。
・管理ポリシー・・・1つのポリシーを複数にアタッチできる。
・AWS管理ポリシー・・・AWSによってあらかじめ定義されたポリシー
・カスタマー管理ポリシー・・・ユーザーによって定義。世代管理ができる。
・インラインポリシー・・・ユーザーが個別に定義。複数の対象へはアタッチできない。
リソースベースのポリシーは、AWSリソース(S3バケットやSQSなど)に対してアタッチするポリシー
・Permissions Boundary(アクセス許可境界)
IAMでは、IAMユーザーやIAMロールに対して「ここまでの範囲内であれば自由に操作を行える」という境界を設定できる。これを「Permissions Boundary(アクセス許可境界)」。アクセス許可境界が設定されたユーザーは、境界で許可された範囲とIAMポリシーの両方で許可されている範囲でアクションを行えます
アクセス許可境界は、例えばLambda関数の作成をしている開発者に対して、必要なリソースへのアクセス権は都度自由に設定できるようにしておきたいが、開発者自身のアクセス権を操作させたくないようなケースで有用。開発者にある程度の権限を与えておくことにより、アクセス権が必要になった際にいちいち管理者が対応する必要がなくなります。一方、権限を超えた操作をしないようにアクセス許可境界を設定しておけば、セキュリティリスクも抑えられます