IAM

【グローバルサービス】

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を利用することで、過剰な公開設定や外部からアクセス可能なリソースを自動的に検出し、最小権限の原則に基づいたセキュアな運用を支援します。

重要用語

関連サービス
Organizations

ユースケース

ユーザーと権限の管理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自体は無料-

公式ページ

AWSドキュメント IAM