
【グローバルサービス】
IAM(Identity and Access Management)は、IAMユーザ、IAMグループ、IAMロール、IAMポリシーを用いて、AWSリソースへのアクセス権限を最小限に付与するための基盤となるサービスです。
IAMポリシーはJSON形式で記述されるアクセス制御ルールであり、許可ポリシーは、「どのリソースに対して、どの操作を、どの条件下で許可するか」を定義できます。信頼ポリシーはIAMロールに関連付けられ、「どのエンティティ(ユーザ・サービス・アカウント)がそのロールを引き受けることを許可されているか」を定義します。
また、STS(Security Token Service)を利用することで、一時的な認証情報を発行し、サービス間の委任や外部システムからの安全なアクセスを実現します。これにより、システム内に秘密情報を埋め込む必要がなくなり、セキュリティリスクを大幅に低減できます。
IAMでは、MFA認証(多要素認証)によってアカウント保護を強化し、アクセスキーの管理やSAML/OIDCフェデレーションによる企業のIdP(アイデンティティプロバイダ)との連携にも対応しています。さらに、IAM Identity Centerを利用することで、複数アカウントや外部アプリケーションへのSSO(シングルサインオン)を実現し、ユーザ管理を一元化できます。
組織全体でのアクセス制御には、Organizationsを活用し、複数アカウントを統合的に管理できます。OrganizationsのSCP(サービスコントロールポリシー)とIAMポリシーを組み合わせることで、より強固なセキュリティガバナンスを構築できます。
また、CloudTrailを用いてIAM操作やAPI呼び出しを記録し、Configでリソース構成やポリシーの準拠状況を監査することで、変更履歴とコンプライアンスを継続的に可視化します。
さらに、IAM Access Analyzerを利用することで、過剰な公開設定や外部からアクセス可能なリソースを自動的に検出し、最小権限の原則に基づいたセキュアな運用を支援します。
重要用語
ユースケース
| ユーザーと権限の管理 | AWSアカウントの利用者にIAMユーザーやIAMロールを割り当て、最小権限のポリシーで操作可能な範囲を細かく制御する。 |
| アプリケーション用ロールでの一時認証 | EC2・Lambda・ECSなどにIAMロールを付与し、長期アクセスキーを使わずに一時的な認証情報でAWSリソースへアクセスさせる。 |
| グループ・ポリシーによる組織的権限設計 | 職務(管理者・開発者・閲覧者など)ごとにIAMグループとポリシーを定義し、ユーザーをグループに所属させることで権限を一括管理する。 |
ベストプラクティス
| 最小権限の原則 | 必要な操作とリソースだけを許可するポリシーを設計する。 |
| IAMロール優先の設計 | 長期アクセスキーではなくロールベースの一時クレデンシャルを利用する。 |
| アクセスアナライザーとレポート確認 | 不要な権限や外部公開を検出し、定期的に見直す。 |
高可用性・バックアップ・リトライ
| 高可用性・バックアップ・リトライ設計のポイント |
|---|
| 【デフォルト】AWS内部で冗長化 ・データプレーンの各リージョン独立配置 ・データプレーンのマルチAZ配置 ・AZ損失を許容する容量設計 ・データプレーンの読み取り専用レプリカ構成 |
セキュリティ
| 関連サービス | 設定内容 |
|---|---|
| Secrets Manager(機密情報の安全管理) | -シークレット(秘密情報)の作成が推奨 アプリ用一時資格情報や外部システムのキー- |
| SSM Parameter Store(設定情報の一元管理) | - |
| CloudTrail(操作履歴の記録・監査・追跡) | 【自動記録】 作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI) データ操作は追跡できない(データプレーンAPI) |
| Config(リソースの構成状態・設定変更を記録) | 【Configが有効な場合】 「パスワードポリシー/ルートMFA/不要なアクセスキー」等の準拠評価(※グローバル記録有効時) |
| GuardDuty(脅威を自動検出) | 【GuardDutyが有効な場合】 ユーザー/ロール/ポリシー改ざんのAPI異常検知 |
ログ・監視
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
制限値(固定値/ハードリミット/ソフトリミット)
| 固定値 | 制限値 |
|---|---|
| グループあたりのユーザー数 | 制限なし |
| ハードリミット | 制限値 |
|---|---|
| ポリシーのサイズ | 6,144文字 |
| ユーザーあたりのグループ数 | 10 |
| ロールあたりの管理ポリシー数 | 20 |
| MFAデバイス数/ユーザー | 8 |
| アクセスキー数/ユーザー | 2 |
| ソフトリミット | 制限値 |
|---|---|
| ユーザー数/アカウント | 5,000 |
| グループ数/アカウント | 300 |
| ロール数/アカウント | 1,000 |
| カスタマー管理ポリシー数/アカウント | 1,500 |
| インスタンスプロファイル数/アカウント | 1,000 |
| サーバー証明書数/アカウント | 20 |
AWS CLIのサンプルコード
ユーザを作成する
aws iam create-user \
--user-name my-user \
--tags Key=Name,Value=my-user Key=Department,Value=Engineering
ユーザを表示する
aws iam list-users
ユーザを削除する(ユーザ名 指定)
aws iam delete-user \
--user-name my-user
グループを作成する
aws iam create-group \
--group-name developers
グループを表示する
aws iam list-groups
グループを削除する(グループ名 指定)
aws iam delete-group \
--group-name developers
グループにユーザを追加する(ユーザ名、グループ名 指定)
aws iam add-user-to-group \
--user-name my-user \
--group-name developers
グループに所属するユーザを表示する(グループ名 指定)
aws iam get-group \
--group-name developers
グループからユーザを削除する(ユーザ名、グループ名 指定)
aws iam remove-user-from-group \
--user-name my-user \
--group-name developers
| 権限設定のパターン | IAMポリシーのアタッチ方法 |
|---|---|
| ユーザの権限設定(常時必要な権限) | ユーザにポリシーをアタッチ |
| 複数ユーザの権限設定 | グループにIリシーをアタッチ |
| ユーザのの権限設定( 一時的・条件付き権限) サービスの権限設定 | ロールにポリシーをアタッチ ロールをユーザ、サービスが引き受ける |
| ポリシーの種類 | 作成方法 |
|---|---|
| AWS管理ポリシー | ユーザーは作成・変更できない |
| カスタマー管理ポリシー | コマンドで作成する aws iam create-policy |
| インラインポリシー | コマンドで作成する aws iam put-user-policy aws iam put-group-policy aws iam put-role-policy |
カスタマー管理ポリシーを作成する
aws iam create-policy \
--policy-name MyS3ReadPolicy \
--policy-document file://policy.json \
--tags Key=Name,Value=MyS3ReadPolicy
カスタマー管理ポリシーを表示する
aws iam list-policies \
--scope Local
カスタマー管理ポリシーを削除する(ポリシーのARN 指定)
aws iam delete-policy \
--policy-arn arn:aws:iam::account-id:policy/MyS3ReadPolicy
ユーザに管理ポリシーをアタッチする(ユーザ名、ポリシーのARN 指定)
aws iam attach-user-policy \
--user-name my-user \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
ユーザにアタッチされた管理ポリシーを表示する(ユーザ名 指定)
aws iam list-attached-user-policies \
--user-name my-user
ユーザから管理ポリシーをデタッチする(ユーザ名、ポリシーのARN 指定)
aws iam detach-user-policy \
--user-name my-user \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
グループに管理ポリシーをアタッチする(グループ名、ポリシーのARN 指定)
aws iam attach-group-policy \
--group-name developers \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
グループにアタッチされた管理ポリシーを表示する(グループ名 指定)
aws iam list-attached-group-policies \
--group-name developers
グループから管理ポリシーをデタッチする(グループ名、ポリシーのARN 指定)
aws iam detach-group-policy \
--group-name developers \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
IAMロールを作成する(信頼ポリシーのファイル名 指定)
iam-trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/MyUser"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name IAMAssumeRole \
--assume-role-policy-document file://iam-trust-policy.json
IAMロールを表示する
aws iam list-roles
IAMロールを削除する(ロール名 指定)
aws iam delete-role \
--role-name IAMAssumeRole
IAMロールに管理ポリシーをアタッチする(ロール名、ポリシーのARN 指定)
aws iam attach-role-policy \
--role-name IAMAssumeRole \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
IAMロールにアタッチされた管理ポリシーを表示する(ロール名 指定)
aws iam list-attached-role-policies \
--role-name IAMAssumeRole
IAMロールから管理ポリシーをデタッチする(ロール名、ポリシーのARN 指定)
aws iam detach-role-policy \
--role-name IAMAssumeRole \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
ユーザーがIAMロールを引き受ける(ロールのARN 指定)
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/IAMAssumeRole \
--role-session-name MySession
# 応答された一時的な認証情報(AccessKeyId, SecretAccessKey, SessionToken)を環境変数に設定する
export AWS_ACCESS_KEY_ID=<AccessKeyId>
export AWS_SECRET_ACCESS_KEY=<SecretAccessKey>
export AWS_SESSION_TOKEN=<SessionToken>
ユーザーの現在のIAMロール状態を表示する
aws sts get-caller-identity
ユーザーがIAMロールの引き受けを解除する(有効期限切れで自動解除される:1時間)
# 一時的な認証情報(AccessKeyId, SecretAccessKey, SessionToken)を環境変数から削除する
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
アクセスキーを作成する(ユーザ名 指定)
aws iam create-access-key \
--user-name my-user
アクセスキーを表示する(ユーザ名 指定)
aws iam list-access-keys \
--user-name my-user
アクセスキーを削除する(ユーザ名、アクセスキー 指定)
aws iam delete-access-key \
--user-name my-user \
--access-key-id AKIAIOSFODNN7EXAMPLE
Instance Profileを作成する(推奨:Instance Profile名をロール名と同じにする)
aws iam create-instance-profile \
--instance-profile-name SSMInstanceProfile
Instance Profileを表示する
aws iam list-instance-profiles
Instance Profileを削除する(Instance Profile 指定)
aws iam delete-instance-profile \
--instance-profile-name SSMInstanceProfile
Instance Profileにインスタンスロールを追加する(Instance Profile、ロール名 指定)
aws iam add-role-to-instance-profile \
--instance-profile-name SSMInstanceProfile \
--role-name SSMInstanceRole
Instance Profileのインスタンスロールを表示する(Instance Profile 指定)
aws iam get-instance-profile \
--instance-profile-name SSMInstanceProfile
Instance Profileからインスタンスロールを削除する(Instance Profile、ロール名 指定)
aws iam remove-role-from-instance-profile \
--instance-profile-name SSMInstanceProfile \
--role-name SSMInstanceRole
現在の実行ユーザーを確認
aws sts get-caller-identity
ユーザのインラインポリシーの一覧を表示する(ユーザ名 指定)
aws iam list-user-policies \
--user-name MyUser
グループのインラインポリシーの一覧を表示する(グループ名 指定)
aws iam list-group-policies \
--group-name MyGroup
ロールのインラインポリシーの一覧を表示する(ロール名 指定)
aws iam list-role-policies \
--role-name MyRole
ユーザのインラインポリシーの内容を表示する(ユーザ名、ポリシー名 指定)
aws iam get-user-policy \
--user-name MyUser \
--policy-name MyInlinePolicy
グループのインラインポリシーの内容を表示する(グループ名、ポリシー名 指定)
aws iam get-group-policy \
--group-name MyGroup \
--policy-name MyInlinePolicy
ロールのインラインポリシーの内容を表示する(ロール名、ポリシー名 指定)
aws iam get-role-policy \
--role-name MyRole \
--policy-name MyInlinePolicy
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| IAM自体は無料 | - |