【初心者向け】AWS IAM 入門!完全ガイド
AWS Identity and Access Management(IAM)
☘️ はじめに
本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報については、AWS 公式ドキュメントをご参照ください。
👀 Contents
- IAM とは
- 認証・認可とは
- IAM ユーザー
- IAM ポリシー
- IAM ロール
- IAM Permissions boundary(アクセス権限の境界)
- パスワードポリシー
- IAM Policy Simulator
- IAM Access Advisor
- IAM Access Analyzer
- ベストプラクティス
- 📖 まとめ
IAM とは
ID と AWS のサービスおよびリソースへのアクセスを安全に管理するサービスです。
【AWS Black Belt Online Seminar】AWS Identity and Access Management (AWS IAM) Part1(YouTube)(48:03)
【AWS Black Belt Online Seminar】AWS Identity and Access Management (AWS IAM) Part2(YouTube)(55:37)
How to use IAM Access Analyzer policy generation | Amazon Web Services(YouTube)(5:32)
IAM の料金 はありません。
認証・認可とは
IAM を理解する前に、「認証・認可」について把握しておく必要があります。
- 認証
- 相手が誰(何)であるかを確認すること
- Wikipedia-認証 (セキュリティ)
- 認可
- リソースアクセスの権限を与えること
- Wikipedia-認可 (セキュリティ)
IAM ユーザー
AWS アカウントを利用するときに使用するユーザーです。ユーザーは、次のようなものを管理することができます。
MFA
ログインパスワードのほかに、仮想 MFA デバイスを有効化にして認証することで、セキュリティを高めることができます。
MFA は必ず設定するようにしましょう。
MFA を使用したログインを行っている場合のみ、IAM ロールを切り替えることができるという条件を付与することが可能です。
アクセスキー
AWS CLI や API を利用する際に使用することができる認証情報です。
ベストプラクティスでは、アクセスキーの利用は避け、一時的なセキュリティ認証情報 (IAM ロール) を使用することが推奨されています。
EC2 などから CLI を利用する場合は、EC2 内にアクセスキーの情報を保持しない IAM ロールを使用するようにしましょう。
ローカル端末から AWS CLI で作業するには、アクセスキーが必要なので、アクセスキーを適切に管理しましょう。さらに、 MFA を利用したスイッチロールを行うようにして、認証直後に強い権限を保持している状態にしないようにしましょう。
完全にアクセスキーを使用しない方法としては、CloudShell、SSM を利用した管理用 EC2 などの方法も検討しましょう。
SSH 公開鍵
SSH 公開鍵を登録できます。ここで登録した SSH 公開鍵を利用すると、次のようなことができるようになります。
- CodeCommit への SSH 接続
- CodeCommit へのアクセスは HTTPS もある。この場合、後述の
Git 認証情報
の方を利用します。
- CodeCommit へのアクセスは HTTPS もある。この場合、後述の
- EC2 の Linux ユーザ情報の管理
- SSH 公開鍵と、aws-ec2-ssh を利用することで、EC2 の Linux ユーザ情報を IAM と同期させることが出来ます。IAM のみで管理が完結できるようになります。
Git 認証情報
CodeCommit に HTTPS 接続するための認証情報(ユーザー名とパスワード)を発行することができます。
Git 認証情報を使用した HTTPS ユーザーのセットアップ
CodeCommit には、Git 認証情報を使用しなくても接続できます。Git 認証情報を作成することがない代わりに、git-remote-codecommit をインストールする必要があります。
git-remote-codecommit を使用して AWS CodeCommit への HTTPS 接続をセットアップする手順
IAM ポリシー
ポリシーとは、AWS リソースへのアクセス権限を定義した JSON ドキュメントです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ec2:AttachVolume", "ec2:DetachVolume"],
"Resource": ["arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*"],
"Condition": {
"ArnEquals": {
"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"
}
}
}
]
}
ポリシーには次の3つがあります。
-
AWS 管理ポリシー
-
AWS が提供しているポリシーです。各サービスを利用したり、職責のパターンで提供されています。
-
AWS 管理ポリシーには、次の2つがあります。
-
サービスの利用を想定した管理ポリシー
- AmazonS3FullAccess や AmazonS3ReadOnlyAccess など
-
職責を想定した管理ポリシー(ジョブ機能)
- AdministratorAccess や PowerUserAccess など
-
-
AWS 管理ポリシーは非推奨になることがあります。
-
-
カスタマー管理ポリシー
- 独自に定義したポリシーです。実際の要件にあった細やかな制御を実装できます。
- 最大5つまでの自動的にバージョン管理が行われます。
-
インラインポリシー
- ユーザーやロールに直接記述されるポリシーです。ここで記載したポリシーは他のリソースにアタッチすることが出来ません。
- ポリシーのバージョン管理ができません。
- 汎用性が不要な場合や、ポリシーの検証などの用途に適しています。
ポリシーの論理評価
基本的には、次の優先度で判定されます。
- 「明示的な拒否」
- ポリシー内に明示的に拒否(Deny)したものです。
- 「明示的な許可」
- ポリシー内に明示的に許可(Allow)したものです。
- Deny と Allow を両方記述した場合は、Deny になります。
- 「暗黙的な拒否」
- 何も記載されていない操作は、暗黙的にすべてが拒否(Deny)されます。
拒否と許可は上記で示した優先度ですが、アクセス許可は様々なところで設定することができます。
それらの判断順序については、アカウント内でのリクエストの許可または拒否の決定 にポリシーの決定フローチャートがあります。
IAM ロール
ロールとは、ある用途や職責など目的のために1つ以上のポリシーをまとめたものです。
ロール自体はユーザーやグループなどに直接付与することができませんので、ロールを引き受けること(sts:AssumeRole アクション)を許可した IAM ポリシーを作成する必要があります。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::account-id:role/Test*"
}
}
ロールには、セッション期間が設定できます。セッション期間に指定した時間が経過すると、セッションからサインアウトします。以前は 1 時間しか設定できませんでしたが、現在では 12 時間まで設定できます。あまり短くすると、マネジメントコンソールで作業していると、何度も「再ロード」画面がでますので作業内容を鑑みて設定しましょう。
マネジメントコンソールで変更する場合は、「1 時間 / 2 時間 / 4 時間 / 8 時間 / 12 時間 / カスタム期間」が選択できます。
カスタム期間では、秒数で 1 時間~ 12 時間を指定できます。AWS CLI を使った場合と同じです。
# 12時間にする場合
aws iam update-role --max-session-duration 43200
IAM Permissions boundary(アクセス権限の境界)
IAM ユーザーもしくはロールに付与できる権限の境界を定義したものです。IAM ポリシーで強力な権限(AdministratorAccess)が付与されたとしても、Permissions boundary を超えた権限は許可されません。
IAM ポリシーと Permissions boundary は AND 条件で評価されます。
パスワードポリシー
IAM ユーザーのパスワードポリシーを設定することができます。
ZDNET Japan-よくあるパスワード、約半数が AI ツールで 1 分以内に解読可能 という記事に、パスワードポリシー別の解析時間が記載されています。
この記事の引用元である、こちらのサイトでは、パスワードの長さから解析にどれくらいかかるか判定してくれます。
画像は、 password
と入れた例です。当然ですが、実際に使用しているパスワードを入れないようにしましょう。
IAM Policy Simulator
ユーザー、グループ、ロールに対して設定したポリシーが正しいかどうかをテストすることができます。
各項目を展開することで、どこのポリシーで拒否されたかを確認することができます。
IAM Access Advisor
アクセス可能なサービスと最終アクセス日時が表示されるので、未使用の権限を特定し削除することが可能になります。
アクセスアドバイザーは、ユーザー/グループ/ロール/ポリシーで使用することができます。
グループの場合は、グループに所属するユーザーが最後に利用したものが表示されます。
IAM Access Analyzer
AWS Identity and Access Management Access Analyzer を使用する
AWS リソースに紐付いているポリシーを検査し、他 AWS アカウントや外部のインターネット等からのアクセスを可能とするような設定がされているかどうかを検出および可視化してくれる機能です。
ベストプラクティス
- 最小特権アクセス許可を適用
- 多要素認証
- CloudTrail でモニタリング
- アクセスキーの利用は極力避ける
- ルートユーザーは使用しない
- 未使用のロールは定期的に棚卸を
- IAM Access Analyzer を活用しよう
Discussion