ablog

不器用で落着きのない技術者のメモ

AWS の IAM(Identity and Access Management) についてメモ

※以下は個人的なメモです。最新の正確な情報はAWSの公式ドキュメントを参照してください。

IAM
  • 認証・認可の仕組み

認証

AWS アカウント (root)
  • AWSアカウント作成時のID
  • アカウントの全ての AWS サービスとリソースへの完全なアクセス権限を持つ
  • アカウントの作成に使用したメールアドレスとパスワードでサインイン
  • 日常的なタスクには、それが管理者タスクであっても、root ユーザーを使用しないことを強く推奨
IAMユーザー
  • AWS操作 のユーザー
    • 1AWSアカウントで5000ユーザーまで作成可能
  • ユーザーごとに設定可能な情報
    • ユーザー名
      • IAMユーザーの識別と、マネジメントコンソールへのログインに使用
      • 64文字までのアルファベット、数字、+=,.@
    • パス(オプション)
      • ユーザーにオプションとしてセットできる情報
      • パスを元にユーザーの検索が可能
      • 組織階層やプロジェクトなどをセット 例)/aws/sa/
      • 512 字までのBasic Latin 文字(アルファベット、数字、!"#$%&'()= | ^\@ {[}]*:+;? )
      • 開始と終了が / であること
    • 所属グループ
      • 10のグループまで設定可能
    • パーミッション
      • AWSサービスへのアクセス権限
      • JSON形式でポリシーを記述
IAMグループ
  • IAMユーザーをまとめるグループ
    • 1AWSアカウントで100グループまで作成可能
  • グループに設定可能な情報
    • グループ名: グループの識別に使用。最大128文字。
    • パス(オプション) : 組織階層などをセット 例)/aws/
    • パーミション: グループに設定したパーミッションは、IAMユーザーに付与したパーミッションと同時に評価

権限設定

IAMポリシー

  • 以下のようなエレメントがある(IAM JSON ポリシーエレメントのリファレンス - AWS Identity and Access Managementより)
    • Version: ポリシー言語のバージョン。2012-10-17 が最新。
    • Effect: 許可または明示的な拒否(Allow / Deny)
    • Action: 許可・拒否するアクションを設定(例: ec2:runInstances)
    • Principal: リソースへのアクセスが許可または拒否されるユーザー、AWS アカウント、AWS サービスなど
      • リソースベースのポリシーでは、リソースへのアクセスが許可されるアカウントまたはユーザーを指定する
    • Resource: 操作を許可・拒否する対象(EC2インスタンス、S3バケット等)を指定
      • ARN(Amazon Resource Name)で記述
      • 「NotResource」で指定リソース以外を指定できる
    • Condition: Resourceに対するActionを許可(もしくは拒否)するかどうかの 条件設定
  • ユーザーベース: IAMユーザー、IAMグループ、IAMロールに関連づけるポリシー
    • AWS管理ポリシー: AWSが用意している再利用可能なポリシー。複数のIAMユーザー、IAMグループ、IAMロール間で共有可能。
    • カスタマー管理ポリシー: ユーザーが作成した再利用可能なポリシー。複数のIAMユーザー、IAMグループ、IAMロール間で共有可能。
    • インラインポリシー: 各IAMユーザー(やIAMグループ、IAMロール)専用にユーザーが個別作成するポリシー。
  • リソースベース: S3、Lambda などAWSサービスに関連づけるポリシー
    • この表で「リソースベース」が「Yes」になっているのがポリシーを紐付け可能なリソース
  • IAM ロールの信頼ポリシー

IAMロールと Security Token Service (STS)

Security Token Service (STS)
  • 動的にIAMユーザーを作成し、ポリシーを適用できる
  • IAM Role for EC2STSを利用している
  • 一時的セキュリティ認証情報(Temporary Security Credentials)は以下の3つからなる
    • アクセスキー
    • シークレットアクセスキー
    • セッショントーク
  • デフォルトでグローバルサービスとして単一エンドポイント: https://sts.amazonaws.com
    • IAMのAccount Settingsより各リージョンでSTS機能をアクティベート可能(レイテンシー低減、冗長性などのため)
IAMロール
  • IAMユーザーやIAMグループではなく、AWSサービスやアプリケーション等、エンティティに対してにAWS の操作権限を付与するための仕組みです。
  • ユースケース
    • AWS サービスロール
      • AWSサービスに対してにAWS の操作権限を付与するための仕組み。
      • IAMロールをEC2インスタンスに付与すると、そのEC2インスタンス上で実行するAWSCLIやAWS SDKはクレデンシャルなしで利用できます。
      • そんなことができて何が嬉しいかというと、EC2上にクレデンシャルを置かなくても良いのでクレデンシャルの漏洩リスクを回避できることや、EC2のAMIを別の環境へ移行した時に変更無しで再利用できることです。
    • クロスアカウントアクセスのロール
      • あるIAMアカウントに対して別のアカウントのIAMロールを紐付ける機能。
      • 例えば、本番環境に触れるロールを事前に作っておき、必要な時にそのロールにスイッチすることで、IAMユーザ一を作らずに他のアカウントのIAMユーザーが一時的に本番環境に触れるようにすることができる。
    • ID プロバイダアクセス用のロール
      • 外部の認証機構である 外部 ID プロバイダーサービス(IdP)との連携を設定する
        • ウェブ ID プロバイダにアクセスを付与
        • SAML プロバイダへのウェブシングルサインオン(WebSSO)アクセスを付与
        • SAML プロバイダに API アクセスを付与

監査

CloudTrail
  • AWSアカウントで利用されたAPI Callを記録し、S3上にログを保存するサービス
  • AWSのリソースにどのような操作が加えられたか記録に残す機能であり全リージョンでの有効化を推奨
  • 適切なユーザーが与えられた権限で環境を操作しているかの確認と記録に使用
Access Advisor と Service Last Accessed Data
  • IAMエンティティ (ユーザー、グループ、ロール) が、最後にAWSサービスにアクセス した日付と時刻を表示する機能
IAM認証情報レポート(Credential Report)
  • 各IAMユーザーがMFAを利用しているか、アクセスキーや証明書がアクティブか、パスワードやアクセスキーのローテート日時などをCSV形式でダウンロードすることができる