mutao.net

いわゆる雑記。

AWSの薄い本 IAMのマニアックな話

1章 AWSとIAM

  • 認証と認可
  • AWSアカウントについて
    • AWSアカウント(ルートユーザ)
    • IAMユーザ

docs.aws.amazon.com

2章 IAMの機能

  • IAMの機能
  • IAMユーザ
    • ID と PASSWORD
    • アクセスキーID と シークレットアクセスキー
      • アクセスキーの発行は原則しない。必要なときに最小権限で発行する。
  • IAMユーザの発行単位
    • 実際に誰が利用していたのかを把握するため、利用者毎・プログラム・ツール毎に発行する
  • IAMグループ
    • 同一の役割をもつユーザをグループ化し、権限を付与できる。
    • Admin, Developer...
  • IAMロール
    • AWSサービス、アプリケーションに対して操作権限を付与する
    • IAMユーザを割り振れない場合等に使う
  • パーミッションバウンダリー
    • IAMユーザ、IAMロールに対するアクセス権限
    • 付与した権限とバウンダリーで許可した権限と重なりあう部分のみ有効な権限として動作する。
    • バウンダリーで許可していない場合は、IAMユーザ、IAMロールで権限を付与しても操作することができない。

第3章 IAMチュートリアル

  • GUIでの操作の解説
  • IAMの許可・拒否ポリシーの挙動
    • 明示的なDeny > 明示的なAllow > 暗黙的なDeny(デフォルト)

第4章 IAMポリシーのデザインパターン

ホワイトリストパターン

  • 許可する権限のみを付与
  • 他はデフォルトの挙動で暗黙的なDenyで制限される
  • メリット
    • 必要最小限の権限のみを付与するためセキュリティにおける信頼性が高い
  • デメリット
    • 事前に付与する権限が決まっていないと付与することができない
    • 探索的に開発を進めていく場合、都度、権限付与する必要があり、IAMポリシーを管理する手間がある
  • 業務や運用設計が確率している場合、高いセキュリティを求められる場合に有効

ブラックリストパターン

  • 許可してはいけない権限を剥奪する
    • ex. NotActionでIAMの権限以外の権限を許可した後にパスワード変更等の権限を明示的にAllowで設定する。
  • メリット
    • 禁止事項のみを定義するだけでいいのでIAMポリシーの設計・設定が最小でよくなる
    • 利用者は高い自由度を持つことができる
  • デメリット
    • NotActionで指定するため、AWSに新しいサービスが始めると自動的に新しい機能が使えるようになってしまう。
  • AWSの権限は暗黙的なDenyのため、新しいサービスを使いたくても権限がなく、すぐにサービスを利用したくても使えないが、ブラックリストパターンではすぐに利用できる。
  • 探索的な開発を行う場合等に適している。

ハイブリットパターン

  • ホワイトリストブラックリストパターンの組み合わせ
  • メリット
    • AWSの定義済みポリシーと作成したブラックリストを組み合わせることで最小の労力でポリシーを作成することができる。
    • ポリシーの組み合わることで権限の設定するため個々のポリシーはシンプルになる

第5章 IAMグループのデザインパターン

  • 以下の2パターンには機能的な優劣は存在せず、運用面で組織やチームにあったものを選択すればよい
  • 複数のグループに所属するパターン
    • 必須の全ユーザ向けIAMポリシーを持つIAMグループに所属させ、開発者向けまたは運用者向け等の役割毎IAMグループに所属させる。
  • グループ内に複数のポリシーを設定するパターン
    • ユーザーが一つのグループに所属するという前提に権限を管理する
    • 1つのグループにしか所属しないため、シンプルさがある

第6章 IAMとセキュリティ

  • IAMのベストプラクティスにはIAMだけではなくAWSアカウントの管理を含めて記載されている。

docs.aws.amazon.com

  • すべてのIAMユーザにMFAを設定しておくこと
    • 将来的に特権ユーザーになる場合があるため、初期段階ですでにMFAの設定をしておく
  • Lambdaリソースベース権限
    • AWSリソースへのアクセスはIAMポリシーで管理されていて、Lambda関数の実行ロールとして紐付けることができる。
    • Lambdaはリソースベースのポリシーを利用することができ、リソース毎に他のアカウントに使用許可を与えることができる
    • リソースベースのポリシーはIAMの権限を利用せずともアクセス権限を得られることになるので最小権限を付与することが望ましい
  • インターネット公開系の権限
    • EC2のように権限が多岐に渡るものはネットワーク系の操作を明示的に拒否する方法と併用するとよい
  • S3へのアクセス元権限はIAMポリシーを使って制限を行うよりも、S3側のバケットポリシーを使うとよい。
    • IAMでリソース制限をする際にはプライベートIPを使用することができないため、InternetGatewayを通らない場合は、VPCのIDを元に権限を付与する。
  • アクセスキーの原則禁止
    • アクセスキー・シークレットアクセスキーの流出防止策はあるものの、作らないに越したことはない。
  • Capital Oneは2019/7に1億人を超える個人情報の流出事件
    • WAFの脆弱性を利用してIAMロールのクレデンシャルを取得した。
    • 原因はWAFにあるものの、大きな権限をもったIAMロールが存在することがリスクとなる
    • IAMロールやバケットポリシーは最小権限にすること

第7章 IAMの運用

  • セキュリティ保持のために手間がかかる運用であればいつかは形骸化する
  • IAM運用の目的
    • AWSを安全な状態の保持
    • 維持するために手間がかからず、利用者によってセキュリティレベルの差異がでないように標準化する。
  • ツール・プログラム利用・関係者の洗い出し
  • AWSアカウント(ルートユーザ)は原則的に使用しない
    • アカウント作成後は、ルートユーザを使用せずとも支障がないような設定を行うべき
  • IAMユーザの管理
    • 最小権限の付与
    • 不要になったユーザーの削除
    • Croud Trailで利用状況のログを取得、Configで設定変更の監視をするなどして定期的にIAMユーザの棚卸しをすべき
  • 人間用のIAMユーザー
    • ユーザー毎に作成し、共有アカウントの作成は禁止
    • 異動や退職などの入れ替わりに応じて棚卸しルールを作成する
  • CLIやプログラムから利用するIAMユーザー
    • 人の出入りに関しては比較的わかりやすい
    • プログラムから利用されなくなったIAMユーザは観測しにくい
    • IAMユーザごとの担当者を明確化する
    • 最終利用日から一定期間過ぎたIAMユーザーは継続確認を行う
  • アクセスキーの管理とCLI
    • アクセスキーは限られたIAMユーザーのみで作成する
    • アクセスキーを作成するIAMユーザーの権限は最小にする
    • CLIでもスイッチロールは可能なため、必要な場合はIP単位でIAMユーザの制限をし、スイッチロールする
  • MFA未利用時に権限を制限し、MFA利用を促す
    • MFAを設定していない場合は、IAM以外の権限を拒否するポリシーをアタッチすることでMFAの設定を促す
  • マルチAWSアカウントでの運用
    • IAMユーザをそれぞれのアカウントで作成するのは手間がかかる
    • 踏み台のAWSアカウントを作成し、そのアカウントでIAMユーザーを作成ののちにスイッチロールすることで手間が省ける

第8章 IAMとCloudFormation

  • CloudFormaion等のIaCでAWSアカウントを管理しておけば手間を省き、人的なミスを防ぐことができる

第9章 IAMのテンプレート集

  • CloudFormationのテンプレートがあったが割愛する
  • 共通ポリシー
    • 自身のパスワードをMFAの設定権限
    • IP制限とMFA必須化のポリシー
  • 管理者グループ
    • 全権限の付与
    • 全ユーザからのSwitchRoleをされることを抑制するポリシー
      • ロールにスイッチ可能なユーザを記載するパターン
      • 特定ユーザーにスイッチロール可能な権限を付与するパターン
  • ネットワーク管理者グループ
    • VPC作成、VPN設定などのネットワーク、セキュリティグループ、ネットワークACLの権限を持つ
    • AWS管理ポリシーのNetworkAdministratorの利用すると必要な権限がほぼ網羅されている
  • 開発者グループ
    • 多くのリソース制御が必要
    • 本書ではPowerUserAccessとネットワーク権限、Lambdaの権限付与をしているが、組織に適したポリシーをアタッチすることが必要
  • オペレーターグループ
    • どこまでが職務範囲かに依存
    • AWSサポートに問い合わせが必要な場合は、AWSSupportAccessを付与する
  • 経理担当者グループ
    • BillngにアクセスするためのAWS管理ポリシーをアタッチ
  • お一人様AWS(個人開発等)
    • Admin権限を普段扱いせず、参照権限のみを付与
    • 必要に応じて管理者ロールにスイッチロールするのが安全

第10章 IAM以外のAWSサービスの活用

  • AWS Organizations
    • AWS利用料金の一括請求
    • 組織内のAWSアカウントに対するポリシーコントロール
    • マスターアカウントで設定したポリシーは個々のアカウント単位で打ち消すことはできない
  • CloudTrailとConfig
  • 監査可能な状態にする
  • 誰いつAWSを操作し、リソースがどのような状態になったのかを把握できる状態

CloudTrail

  • 誰がどの操作を行ったのか実行履歴ログを取得することができる

Config

  • AWSリソースがどういう状態か、状態に対してどのようなアクションをするかを設定できる
  • ex. EC2インスタンスにタグでNameをつけることを必須化する運用ルールを策定し、それを満たしていない場合、強制的にシャットダウンさせる

GuardDuty

  • 驚異検出と継続的なモニタリングができ、それに対する防御を機械的に実行する

ControlTower

  • 複数のアカウントの設定及び管理するサービス

SecurityHub

  • 複数のアカウントの状況を一括してモニタリングするサービス

mutaonet.hatenablog.com