AWS IAM(AWS Identity and Access Management)
Overview
AWSサービスをよりセキュア(安全)に利用できるように認証と認可の仕組みを行う権限管理サービス。
認証は本人性の確認(Authentication)
認可はリソースアクセスへの利用権限の付与(Authorization)
IAMの機能は大きく分けて以下の4つになる。
- IAMユーザー
- IAMユーザーグループ
- IAMロール
- IAMポリシー
参考
初心者にも分かりやすいIAM入門~ロールとグループとポリシーの違い,設計・設定手順について~
AWSセキュリティのベストプラクティス(reference)
iamベストプラティクス
AWSにおけるクレデンシャル
多分普通に作る流れのやつ
ルートユーザー
ルートユーザーを使用しないことです。
代わりに、最初のIAMユーザーを作成するためにのみ、ルートユーザーを使用するのがベストプラクティス。
AWSを使い始める際、サインアップの時にメールアドレスとパスワードを登録します。
これがAWSアカウントのパスワード
AWSアカウントというのは権限制御ができない。
言い換えれば、常にそのアカウント内のリソースに対する全権を持つ。
つまり、AWSアカウントとしてAWSにログインするのは危険。
IAMユーザー
IAMユーザーは、AWSを操作するために使用する利用者単位のID。
従業員毎の個別アカウントをイメージすれば問題ない。
デフォルトでは何の権限も設定されていない。
IAMユーザーは必ず利用者ごとに作成するのがポイント
複数の人が共通で使用できてしまうと後で誰がこの操作をしていたのか追跡すること が不可能になるため、共有はしてはいけない。
- AWSでアカウントを作る(ルートユーザー)
- ルートユーザーでIAMユーザーを作成する(admin権限で)
- admin権限で操作を今後する。人によってIAMユーザーを作ってあげる
- サービスごとのロールをアタッチする。
IAMユーザーは長期的な認証情報であるアクセスキーを生成可能。
IAMユーザのパスワード
また、IAMのManagement Consoleにおいてユーザを作成した場合、そこで設定したパスワードがIAMユーザのパスワード
これに対して、IAMユーザは設定により権限を制御可能。
たとえ管理作業を行う場合でも、別にIAMユーザを作成し、そのIAMユーザに管理権限を与えて、普段はIAMユーザを利用すべき。
IAMユーザのAPIキー
IAMのManagement Consoleにおいてユーザを作成した場合、そこで生成したアクセスキーが「IAMユーザのAPIキー」
そしてAWSのAPI操作のために必要なアクセスキーとシークレットキーをクレデンシャル情報と呼ぶ。
IAMユーザーから生成したアクセスキーをサー ビスの env
などに配置するのは重大なインシデントにつながる可能性があるので、サービスにはIAMロールを設定する。
そのためIAMユーザーのアクセスキーは決して他者に共有することなく、定期的にローテーションすることが推奨されている
IAMユーザーグループ
大規模なシステム開発・運用する場合、IAMユーザーを利用者毎に設定していくのは大変。
そのため、同じ権限を持った複数のIAMユーザーをまとめて管理したい場合にIAMユーザーグループを作成する。
各IAMユーザーをグループに所属させ、グループにIAMポリシーを割り当てることで、グループ単位で役割別の権限設定ができます。
なお、IAMユーザは複数のグループに所属できます(最大10グループ)
IAMロール
IAMロールとは、EC2インスタンスやLambda関数などのAWSリソースへ権限を付与する機能。
IAMロールにはIAMポリシーを複数付与して権限をひとまとめにできる。
IAMポリシーはIAMユーザーに直接付与できますが、IAMロールはIAMユーザーだけでなく、EC2インスタンスやLambda関数(後述)などのAWSリソースにも付与できる。
デフォルトで用意されているロールがあるがそれは基本使わない。
自分達でロールは作成するのがベスト。
IAMユーザーへの付与
IAMロールは1つのIAMユーザー・AWSリソースに対し、1つしか割り当てられない。
たとえば「開発者」が使用しているIAMユーザーを「運用者」の権限に変更したい場合、IAMロールを切り替えることで変更できる。
この切り替え(IAMロールを引き受けること)をAssumeRoleという。
PassRole
IAM ロールの PassRole と AssumeRole をもう二度と忘れないために絵を描いてみた
AssumeRole
IAMユーザを作成してCredentialを発行しなくても、一時的にAWSリソースへのアクセス権限を得る事が可能な仕組み(sudoみたいな)
EC2などにIAMロールをアサインした際にも内部で同一の処理が発生している。
AWSリソースへの付与
利用者を介さずに「AWSリソースがAWSリソースを操作したい」ケースもある。
たとえば、EC2とS3、EC2とLambda関数のようなAWSリソース同士を操作するケースでは、IAMロールを使用することで、AWSリソースに権限を付与できる。