AWS IAM権限管理完全ガイド:ユーザー、ロール、ポリシー設定に関する実践チュートリアル

ある国内SaaS企業は、AWSを6ヶ月間利用した後、ある日AWSから異例の請求メールを受け取った。月額料金が突然2,000ドルから18,000ドルに跳ね上がったのだ。

調査の結果、元従業員のアカウントが期限内に削除されず、アクセスキーが漏洩していたことが判明した。ハッカーはこのキーを利用して、複数の地域で仮想通貨マイニング用の高性能GPUインスタンスを起動していた。

そもそもAWS IAMを正しく設定していれば、この事件は完全に回避できたはずだった。

IAM(アイデンティティおよびアクセス管理)は、AWSアカウントのセキュリティにおける第一の防衛線ですが、同時に最も見落とされやすいものでもあります。


1. AWS IAMとは何ですか?どのような問題を解決しますか?

AWS IAMは、AWSが提供するIDおよびアクセス管理サービスです。その主な機能は…AWSリソースへのアクセス権限と、アクセス可能な操作内容を制御します。

IAMが存在しない世界では、何が起こるだろうか?

  • 全員がルートアカウントのユーザー名とパスワードを共有します。
  • インターン生はCTOと同じ権限を持つ。
  • 外部パートナーがS3バケットにアクセスすると、すべてのRDSデータベースも閲覧できるようになります。

IAM を使用すると、次のようなことを正確に制御できます。

  • 誰が(人員/システム)はアクセスできます
  • どれのAWSのサービスとリソース
  • どんな作戦ですか?(読み取り/書き込み/削除/管理)
  • どのような条件下で(IPアドレス制限/時間制限/多要素認証)

IAMは無料サービスであり、追加料金は一切かかりません。


II. IAMの4つのコアコンセプト

実際に運用する前に、まずIAMの基本構成要素を理解しておく必要があります。

1. IAMユーザー

特定の人物またはアプリケーション各IAMユーザーは、固有のログイン認証情報(ユーザー名+パスワード、またはアクセスキー)を持っています。

適切なシナリオ:

  • 開発チームのメンバーごとに、個別のアカウントを作成してください。
  • 自動化スクリプト/CI/CDツール専用のアカウントを作成する

2. IAMユーザーグループ

複数のユーザーを1つのグループにまとめることで、管理権限を一元化できます。ユーザーグループにポリシーを割り当てると、グループ内のすべてのユーザーに自動的にポリシーが継承されます。

適切なシナリオ:

  • 開発チーム、運用チーム、データチームにはそれぞれ異なる権限が割り当てられた。
  • 新入社員は、別途権限を設定する必要なく、自動的に該当するグループに追加されます。

3. IAMポリシー

戦略は権限ルールのJSONドキュメント「許可される操作と拒否される操作」を定義します。

AWSは2種類の戦略を提供しています。

  • AWS マネージド ポリシー管理者アクセスや読み取り専用アクセスなど、一般的に使用されるAWSポリシー。
  • クライアント主導型戦略独自の戦略により、より高い精度を実現できます。

4. IAMロール

キャラクターは一時的に引き受けることができる権限固定のユーザー名とパスワードはありません。

適切なシナリオ:

  • EC2インスタンスはS3にアクセスする必要があります(コード内でアクセスキーを記述するのではなく、EC2インスタンスにロールをバインドすることによって)。
  • クロスアカウントアクセス(AアカウントのサービスがBアカウントのリソースにアクセスする)
  • AWSアカウントにサードパーティサービス(GitHub Actionsなど)をデプロイする
コンセプト 類推 主な用途
IAMユーザー 社員証 特定の担当者/システムのログインID
IAMユーザーグループ 部門 同一タイプのユーザーに対する権限の一括管理
IAM戦略 権限リスト 何ができるか、何ができないかを明確に定義する。
IAMロール 一時滞在者パス AWSサービス間/アカウント間の一時的なアクセス許可

III. 最小権限の原則:IAMセキュリティの中核概念

IAM権限を設定する前に、次の原則を念頭に置いておく必要があります。

最小特権の原則

各ユーザー/役割/サービスに、必要最低限の権限のみを付与し、それ以上の権限は付与しない。

これはつまり:

  • 開発者は開発環境においてEC2とRDSへのアクセス権のみを必要とし、本番環境の権限は必要ありません。
  • データアナリストに必要なのはS3の読み取り権限のみであり、EC2の起動権限は必要ありません。
  • Lambda関数はDynamoDBへの書き込み権限のみを必要とし、S3への読み取り権限は必要ありません。

多くの企業は、時間を節約するために、全員に管理者権限を付与するが、これは最も危険な行為である。


IV.実践的な設定:安全なIAMシステムをゼロから構築する

ステップ1:ルートアカウントを保護する

ルートアカウントはAWSアカウントシステムにおいて「最高権限」を持つアカウントであり、もし盗まれた場合、その影響は予測不可能です。

ルートアカウントを安全に保つための3つのポイント:

  • 多要素認証(MFA)を有効にするAWSコンソールで、[セキュリティ認証情報] → [多要素認証を有効にする] に進み、認証アプリを携帯電話にリンクします。
  • AccessKey は作成しないでくださいルートアカウント用のプログラミングアクセスキーを生成しないでください。
  • 請求管理専用IAMユーザーアカウントに切り替えることで、すべての定型操作が完了しました。

ステップ2:管理者IAMユーザーを作成する

日常的な運用とメンテナンスのために、IAMコンソールで管理者ユーザーを作成し、ログインに使用するrootアカウントを置き換えてください。

設定ポイント:

  • ユーザー名は、admin-zhangsan のように、実名または社員番号を使用してください。
  • アクセスタイプ:「AWSマネジメントコンソール経由でアクセス」を選択してください。
  • アクセス制御ポリシー:管理者アクセス権限を追加(正規の管理者のみ対象)
  • このユーザーに対しても多要素認証(MFA)が有効になっています。

今後は、このIAMユーザーを使用してAWSにログインしてください。ルートアカウントは今後の使用のためにロックしておいてください。

ステップ3:ユーザーグループを作成し、権限を割り当てる

チームの機能に基づいてユーザーグループを作成し、各グループに適切な戦略を割り当てます。

推奨される基本的なユーザーグループ構成:

ユーザーグループ名 適任者 追加の戦略が推奨されます。
開発者 開発エンジニア Amazon EC2 FullAccess + Amazon S3 FullAccess(開発環境のみ)
データアナリスト データアナリスト AmazonS3読み取り専用アクセス + AmazonAthenaフルアクセス
DevOps オペレーションエンジニア PowerUserAccess(IAM管理者権限は除く)
請求する 財務・経営 AWS請求読み取り専用アクセス
読み取り専用 監査/コンプライアンス 読み取り専用アクセス

ステップ4:EC2/LambdaのIAMロールを設定する

これは最も見落とされやすいステップであり、安全事故が発生しやすい高リスク領域でもある。

不適切な実践これは、アクセスキーIDとシークレットキーをEC2インスタンスのコードまたは設定ファイルに直接書き込むことを意味します。これらのキーがGitHubに送信されたり、漏洩したりすると、攻撃者はすぐにそれらを悪用できるようになります。

正しいアプローチIAMロールを作成し、それをEC2インスタンスにバインドします。

具体的な手順:

  • IAMコンソールで、[ロール] → [ロールの作成]に移動します。
  • 信頼できるエンティティとして「AWSサービス」→「EC2」を選択してください。
  • 追加で必要な戦略(Amazon S3の読み取り専用アクセスなど)
  • キャラクターに名前を付けます。例: ec2-s3-readonly-role
  • EC2インスタンスの設定で、このロールをインスタンスにアタッチしてください。

EC2インスタンス上のコードは、インスタンスのメタデータから一時的な認証情報を自動的に取得するため、コード内にキーをハードコーディングする必要がなくなります。

ステップ5:独自のきめ細かな戦略を作成する

AWSのマネージドポリシーでは粒度が不十分な場合、カスタムポリシーを作成する必要があります。

典型的なシナリオとしては、すべてのS3バケットではなく、特定のS3バケットのみをユーザーが読み取れるようにする、といったことが挙げられます。

カスタム戦略の中核となる要素は、以下の4つの分野から構成されます。

  • 効果許可または拒否
  • アクションs3:GetObjectやec2:DescribeInstancesなどの特定のAPI操作
  • リソース: 特定のリソースの ARN (Amazon リソース ネーム) を指定します。ワイルドカードもサポートされています。
  • 状態(オプション):IP制限、MFA要件などの追加条件

「読み取り専用の特定のS3バケット」を例にとると、戦略ロジックは次のようになります。s3:GetObjectとs3:ListBucketの2つの操作の実行を許可しますが、リソースをすべてのS3リソースではなく、特定のバケットのARNに限定します。


V. 高度なIAMセキュリティ:見落としがちな4つの重要な設定

パスワードポリシーを設定する

IAMコンソール → アカウント設定 → パスワードポリシーで、以下の設定を行うことをお勧めします。

  • パスワードの最小文字数:12文字以上
  • 大文字、小文字、数字、および特殊記号を含める必要があります。
  • パスワードの有効期間:90日間
  • 過去5回のパスワードは再利用しないでください。

アクセスキーを定期的に見直し、ローテーションする

IAMの「認証情報レポート」機能を使用すると、以下のユーザーを含むすべてのユーザーのアクセスキー使用情報をエクスポートできます。

  • 鍵は90日以上回転されていませんか?
  • そのキーは一度も使用されていないか(使用されていない場合は直ちに削除すべきか)?
  • ユーザーの最終ログイン時刻(長期間ログインがない場合は、この機能を無効にする必要がある場合があります)。

四半期ごとに伝票監査を実施することをお勧めします。

AWS CloudTrailを有効にして、すべてのIAM操作をログに記録します。

CloudTrailは、IAM構成の変更、ユーザーログイン、リソースアクセスなど、アカウント内のすべてのAPI呼び出しを記録します。

これは、セキュリティインシデントの発生源を追跡するための重要なツールです。異常が発生した場合、どのユーザー/役割/サービスがいつ、どのような操作を実行したかを正確に特定できます。

CloudTrailのログをS3に同期し、暗号化ストレージを有効にして、少なくとも1年間は保存することをお勧めします。

権限の境界を設定してください。

下位の管理者(DevOpsリーダーなど)にIAMユーザーの作成権限を与える必要があるものの、作成されたユーザーの権限が自身の権限を超えてしまうことを懸念している場合は、「権限境界」機能を使用できます。

権限の境界は、ユーザーまたは役割を定義します。ユーザーが持つことができる権限の最大数ポリシーでより高い権限が指定されていたとしても、実際の実行は依然として境界制約の対象となる。


VI. 一般的なIAMの問題のトラブルシューティング

質問1:ログイン時に「アクセスが拒否されました」というメッセージが表示されます。

捜査命令:

  • ユーザーがポリシーの対象となっているか(または、そのユーザーグループにポリシーが適用されているか)を確認してください。
  • リソースARNが正しく記述されているか確認してください(多くの人がARNを誤って記述しています)。
  • 許可ポリシーを上書きする明示的な拒否ポリシーが存在するかどうかを確認してください(拒否の方が優先度が高いです)。

質問2:EC2はS3にアクセスできません

最も一般的な原因は、EC2インスタンスがIAMロールにバインドされていないか、バインドされているロールポリシーにS3のアクセス許可が含まれていないことです。

質問3:アカウント間アクセスに失敗しました。

アクセスされるアカウントのリソースポリシーが他のアカウントのARNを許可するように、またアクセスするアカウントのユーザー/ロールが想定されるターゲットロールの権限を持つように、両側で設定する必要があります(sts:AssumeRole)。


結論は

AWS IAMの設定は複雑に見えるかもしれませんが、その核心となるロジックは実際には非常にシンプルです。最小権限、ロールベースのキー、および定期的な監査

これら3つのことを行うことで、80%のクラウドセキュリティリスクを回避できます。

創業当初に2万ドル近くの損失を被りかけたこの会社は、「従業員ごとに固有のIAMユーザーを作成し、退職時にアカウントを即座に削除する」という対策を講じていれば、このような事態は起こらなかっただろう。

クラウドセキュリティのコストは、多くの場合、過失が発生した時点で既に決まっている。

AWS 環境をセットアップしている場合、または既存の IAM 構成が安全かどうか不明な場合は、aws-oncloudai.comの技術チームへのお問い合わせをお待ちしております。弊社では、無料のAWSアカウントセキュリティ評価サービスを提供しています。


この記事は、aws-oncloudai.comのクラウドアーキテクチャチームによって執筆されました。転載の際は出典を明記してください。

さらに詳しく

何が必要か教えてください