Table of Contents
AWS Identity and Access Management
Def: AWS IAM
AWS Identity and Access Management (IAM) は, AWSのリソースへのアクセスを管理するためのサービスのこと. IAMを使用することで,
- 認証(Athetification): 誰が環境にアクセスできるか
- 認可(Authorization): 認証されたユーザーがどのような権限を持つか?
といったきめ細かいアクセス許可を一元管理する事が可能となる
IAMを用いることで, AWSにアクセスできるIAMユーザーやIAMグループ, IAMロールをAWSアカウントは定義することができます. ここで注意が必要なのは「IAMユーザーは個別のアカウントではなく, アカウント内のユーザー」であることです. AWS CLIやSDKを利用してAWSサービスを操作するときは, 基本的にはIAMユーザーを利用します.
Column: AWSアカウントとIAMユーザー
- AWSアカウント
- IAMユーザー
の2種類のアカウントがAWSではあります. AWSアカウントは, AWSへサインアップするときに作成されるアカウントのことで, AWSのすべてのサーのスをネットワーク上のどこからでも利用可能なため, ルートアカウントとも呼ばれます. ルートアカウントは権限が非常に強力なので, AWSアカウントの利用は極力避け, IAMユーザーを利用することが推奨されます
IAMの仕組み
human userまたはアプリケーションがサインイン認証情報を使用して AWS と認証. 認証は、サインイン認証情報を AWS アカウント が信頼するプリンシパル (IAM ユーザー、フェデレーションユーザー、IAM ロール、またはアプリケーション) と照合することによって行われるれます.
次に、プリンシパルにリソースへのアクセスを許可するリクエストが行われます. アクセスは承認リクエストに応じて許可されます. 例えば, コンソールに初めてサインインしてコンソールのホームページを開いたときは, 特定のサービスにアクセスしているわけではありません.
- サービスを選択すると, 承認リクエストがそのサービスに送信さる
- ユーザーの ID が認証されたユーザーのリストに含まれているかどうか, 付与されるアクセスレベルを制御するためにどのようなポリシーが適用されているか確認
という流れで承認が決定されます. 承認されると, プリンシパルはユーザー内の AWS アカウント リソースに対してアクションを実行したり, 操作を実行したりできます(例: S3でのバケットの作成やlocalとのsyncなど).
Principal
プリンシパルとは, AWS リソースに対するアクションまたはオペレーションをリクエストできるIDまたはワークロードです. 認証後, プリンシパルにはプリンシパルのタイプに応じて, AWS にリクエストを行うための永続的または一時的な認証情報を付与できます.
- IAM ユーザーとルートユーザー: 永続的な認証情報が付与される
- IAMロール: 一時的な認証情報が付与される
という違いがあります.
IAMグループ
- IAMグループは同じ権限を持ったユーザーの集まり
- IAMグループ自体は, AWSへのアクセス認証情報は保持せず, 認証自体はあくまでユーザー単位で行う
- IAMグループの目的は権限を容易に, かつ正確に管理すること
複数のユーザーに同一の権限を個別に与えると, 権限付与漏れや過剰付与などミスが発生する可能性が高くなるので, Linuxにおけるグループと同じようにまとめて管理することを可能にした機能と理解できます. 1つのユーザーに対して複数のグループを割り当てることもできますが, グループ自体を階層化して管理するということはできません.
IAMロール
IAMロールは永続的な権限を保有するIAMユーザーやIAMグループと異なり, 一時的にとあるIAMユーザーに 一時的にAWSリソースへアクセス権限を付与する場合などに使用します.
ロールの使い方 | 状況 |
---|---|
AWSリソースへの権限付与 | インスタンス作成時にロールを付与することでEC2インスタンス上で稼働するアプリに一時的にAWSリソースへアクセス権限を与える |
クロスアカウントアクセス | 複数のAWSアカウント間のリソースを1つのアカウントで操作するときに使用 |
IDフェデレーション | 社内サーバに登録されているアカウントにAWSリソースアクセスを許可する場合 |
Web IDフェデレーション | SNSアカウントを使用してAWSリソースアクセスを許可する場合 |
AWS CLI で IAM ロールを使用する
IAMロールを使用するようにAWS CLIを設定するには、~/.aws/config
ファイルでIAMロールのプロファイルを定義する必要があります.
ただし, 個別のプロファイルを設定する形で対応することが推奨です.
- credential fileで
user1
と設定されてたprofileを利用 - Amazon リソースネーム (ARN)
arn:aws:iam::123456789012:role/marketingadminrole
のロールを引き受ける
という条件でロールプロファイルを設定する場合は~/.aws/config
ファイルで以下のように設定します
1
2
3
[profile hoohoo]
role_arn = arn:aws:iam::123456789012:role/marketingadminrole
source_profile = user1
上記の設定をすることでAWS CLI はリンクされた user1
プロファイルの認証情報を自動的に検索し, それらを使用して, 指定された IAM ロールの一時的な認証情報をリクエストします.
CLI では, バックグラウンドで sts: AssumeRole
オペレーションを使用してこれを実現します.
利用方法としては, --profile
optionで設定したprofileを参照することで, IAMロールを使用することができます. 例として,
1
% aws s3 ls --profile marketingadmin
References
(注意:GitHub Accountが必要となります)