AWS Identity and Access Management

# AWS Identity and Access Management

https://d1.awsstatic.com/webinars/jp/pdf/services/20190129_AWS-BlackBelt_IAM_Part1.pdf

https://d1.awsstatic.com/webinars/jp/pdf/services/20190130_AWS-BlackBelt_IAM_Part2.pdf

 

## IAM とは

  • AWS リソースをセキュアに操作するために、認証・認可の仕組みを提供するマネージドサービス

 

## AWS IAM のベストプラクティス

  • ID と認証情報の管理
    • ルートユーザーを極力利用しない
    • 個々のIAMユーザーを作成
    • ユーザーの強力なパスワードポリシーを設定
    • アクセスキーを共有しない
      • コード内にハードコードしてしまったり、ドキュメントに記載するのはNG
    • 特権ユーザーに対してMFAを有効化する
  • アクセス権限の管理
    • AWS管理ポリシーを使用したアクセス許可の使用
    • インラインポリシーではなく、カスタマー管理ポリシーを使用
    • 追加セキュリティに対するポリシー条件を使用
      • Principal 要素(AWSリソースへのアクセスが許可or拒否されるIAMエンティティを指定する)
      • Action 要素
      • Condition 要素
        • リクエストを許容するソースIPアドレスの範囲
        • 日付または時間の範囲
        • MFAバイスの要求
        • SSL 使用の要求
      • 要素はAND または OR条件
      • アクセス可否のロジック
        • 明示的なDeny > 明示的なAllow > 暗黙的なDeny
    • 最小権限
      • AWS Organization サービスコトロールポリシーとのAND条件で決定
      • AND条件で決定されるかOR条件で決定されるかを確認する
    • グループにIAMユーザーを割り当てる
      • IAM グループにIAMユーザーを集合させて管理する
  • 権限の委任
    • インスタンスプロファイルを利用する
    • IAMロール
      • IAM ユーザやグループには紐づかない
      • ユーザーまたはアプリケーションがロールを一時的に引き受けることで関連づけられたアクセス許可を受けることができる
    • 一時的なセキュリティ認証情報
      • 有効期限つきのアクセスキー・シークレットキー・セキュリティトーク
      • ユーザーのリクエストによってAWS Security Token Service(STS) が動的に作成
        • 発行した認証期限の変更はできない(したい場合は特定時点より前のトークンを全て無効にすることはできる)
        • グローバルサービスとして提供
        • CloudTrail が利用可能
      • STS で利用できるAPI
        • Assume Role
          • 既存のIAMユーザを用いて一時的な認証情報を取得
        • AssumeRoleWithWebIdentity
        • AssumeRoleWithSAML
        • GetSessionToken
        • GetFederationToken
    • ロールを利用したアクセス許可の委任
      • IAMロールによるクロスアカウントアクセス
      • クロスアカウントアクセスによる権限管理を効率化(Switch Role)
      • SAML2.0ベースのIDフェデレーション
        • 組織で生成したSAMLアサーションを認証レスポンスの一部として使用し、一時的セキュリティ認証情報を取得
        • 組織内の全員についてIAMユーザを作成しなくても、ユーザはAWSを利用可能
      • SAML2.0ベースのAWSマネジメントコンソールへのシングルサインオン
        • 既存のユーザ情報をそのまま利用できる
        • アカウント管理が統合され、リスクが低減する
        • 既存の言言ベースでの管理が可能
        • 入隊者など一元的な管理が可能
      • Amazon Cognito を用いたモバイルアプリのWeb IDフェデレーション
        • モバイルアプリから一時的なAWSセキュリティ認証情報を必要に応じて動的にリクエス
        • OIDCプロバイダ + Cognito で動作
  • IDと権限のライフサイクル管理
    • AWSアカウントのアクティビティの監視
      • CloudTrail による監視
    • アクセスレベルでIAM権限を確認
      • アクセスレベルの分類
        • List
        • Read
        • Write
        • Permissions management
      • Service Last Accessed Data を利用して与えられた権限で利用されていないものを発見
    • 不要な認証情報の削除
      • 不要なIAMユーザー
      • コンソールを利用しないIAMユーザのパスワード
    • 認証情報を定期的にローテーションする
      • 認証情報の利用状況はCredential Report 機能で確認可能
      • IAMユーザのパスワードローテーション
      • アクセスキーのローテーション

 

## 雑感

AWS を利用する上では絶対に機能を知っていないといけないサービスであるIAMの話。

一番気になったのはSAMLを利用したIDフェデレーション。IAMユーザを都度作成するのはすごい手間なのでGoogle の認証情報を利用できるとすごい便利だなと思った。

Switch Role はよく利用している機能でベストプラクティスに則った設計なんだなと改めて感じた。

IAMのベストプラクティスに則ることが大抵の場合良い結果につながると思うので自分の見える範囲で運用を再確認してみようと思う。