
【グローバルサービス】
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のサンプルコード
IAMユーザを作成する
aws iam create-user \
--user-name my-user \
--tags Key=Name,Value=my-user Key=Department,Value=Engineering
IAMユーザを表示する
aws iam list-users
IAMユーザを削除する(IAMユーザ名 指定)
aws iam delete-user \
--user-name my-user
IAMグループを作成する
aws iam create-group \
--group-name developers
IAMグループを表示する
aws iam list-groups
IAMグループを削除する(IAMグループ名 指定)
aws iam delete-group \
--group-name developers
IAMグループにIAMユーザを追加する(IAMユーザ名、IAMグループ名 指定)
aws iam add-user-to-group \
--user-name my-user \
--group-name developers
IAMグループに所属するIAMユーザを表示する(IAMグループ名 指定)
aws iam get-group \
--group-name developers
IAMグループからIAMユーザを削除する(IAMユーザ名、IAMグループ名 指定)
aws iam remove-user-from-group \
--user-name my-user \
--group-name developers
IAMポリシー(カスタムポリシー)を作成する
aws iam create-policy \
--policy-name MyS3ReadPolicy \
--policy-document file://policy.json \
--tags Key=Name,Value=MyS3ReadPolicy Key=Environment,Value=production
IAMポリシー(カスタムポリシー)を表示する
aws iam list-policies \
--scope Local
IAMポリシー(カスタムポリシー)を削除する(IAMポリシーのARN 指定)
aws iam delete-policy \
--policy-arn arn:aws:iam::account-id:policy/MyS3ReadPolicy
IAMユーザにIAMポリシーをアタッチする(IAMユーザ名、IAMポリシーのARN 指定)
aws iam attach-user-policy \
--user-name my-user \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
IAMユーザにアタッチされたIAMポリシーを表示する(IAMユーザ名 指定)
aws iam list-attached-user-policies \
--user-name my-user
IAMユーザからIAMポリシーをデタッチする(IAMユーザ名、IAMポリシーのARN 指定)
aws iam detach-user-policy \
--user-name my-user \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
IAMグループにIAMポリシーをアタッチする(IAMグループ名、IAMポリシーのARN 指定)
aws iam attach-group-policy \
--group-name developers \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
IAMグループにアタッチされたIAMポリシーを表示する(IAMグループ名 指定)
aws iam list-attached-group-policies \
--group-name developers
IAMグループからIAMポリシーをデタッチする(IAMグループ名、IAMポリシーのARN 指定)
aws iam detach-group-policy \
--group-name developers \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
IAMロールを作成する
aws iam create-role \
--role-name MyEC2Role \
--assume-role-policy-document file://trust-policy.json \
--tags Key=Name,Value=MyEC2Role Key=Environment,Value=production
IAMロールを表示する
aws iam list-roles
IAMロールを削除する(IAMロール名 指定)
aws iam delete-role \
--role-name MyEC2Role
IAMロールにIAMポリシーをアタッチする(IAMロール名、IAMポリシーのARN 指定)
aws iam attach-role-policy \
--role-name MyEC2Role \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
IAMロールにアタッチされたIAMポリシーを表示する(IAMロール名 指定)
aws iam list-attached-role-policies \
--role-name MyEC2Role
IAMロールからIAMポリシーをデタッチする(IAMロール名、IAMポリシーのARN 指定)
aws iam detach-role-policy \
--role-name MyEC2Role \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
アクセスキーを作成する(IAMユーザ名 指定)
aws iam create-access-key \
--user-name my-user
アクセスキーを表示する(IAMユーザ名 指定)
aws iam list-access-keys \
--user-name my-user
アクセスキーを削除する(IAMユーザ名、アクセスキー 指定)
aws iam delete-access-key \
--user-name my-user \
--access-key-id AKIAIOSFODNN7EXAMPLE
Instance Profileを作成する(推奨:Instance Profile名をIAMロール名と同じにする)
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にIAMロールを追加する(Instance Profile、IAMロール名 指定)
aws iam add-role-to-instance-profile \
--instance-profile-name SSMInstanceProfile \
--role-name SSMInstanceRole
Instance ProfileのIAMロールを表示する(Instance Profile 指定)
aws iam get-instance-profile \
--instance-profile-name SSMInstanceProfile
Instance ProfileからIAMロールを削除する(Instance Profile、IAMロール名 指定)
aws iam remove-role-from-instance-profile \
--instance-profile-name SSMInstanceProfile \
--role-name SSMInstanceRole
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| IAM自体は無料 | - |