自分の考える IAM ユーザーの最小権限 (MFA 必須)

自分の考える IAM ユーザーの最小権限 (MFA 必須) を考えてみた背景

AWS Organizations を利用した複数アカウント運用のベストプラクティスとして IAM ユーザーは基本権限を全く持たず権限のあるアカウントに切り替える(スイッチロール)のが紹介されていました。
この、「基本権限を全く持たない IAM ユーザー」について自分なりの最小権限を考えてみました。

自分の考える IAM ユーザーの最小権限 (MFA 必須) の IAM ポリシー

AWS のドキュメントで紹介されているポリシーから色々省いたり追加したものです。

Copied!
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowViewAccountInfo",
      "Effect": "Allow",
      "Action": [
        "iam:GetAccountPasswordPolicy",
        "iam:GetAccountSummary",
        "iam:ListVirtualMFADevices"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowManageOwnPasswords",
      "Effect": "Allow",
      "Action": [
        "iam:ChangePassword",
        "iam:GetUser",
        "iam:CreateLoginProfile",
        "iam:DeleteLoginProfile",
        "iam:GetLoginProfile",
        "iam:UpdateLoginProfile"
      ],
      "Resource": "arn:aws:iam::*:user/${aws:username}"
    },
    {
      "Sid": "AllowManageOwnVirtualMFADevice",
      "Effect": "Allow",
      "Action": ["iam:CreateVirtualMFADevice", "iam:DeleteVirtualMFADevice"],
      "Resource": "arn:aws:iam::*:mfa/${aws:username}"
    },
    {
      "Sid": "AllowManageOwnUserMFA",
      "Effect": "Allow",
      "Action": [
        "iam:DeactivateMFADevice",
        "iam:EnableMFADevice",
        "iam:ListMFADevices",
        "iam:ResyncMFADevice"
      ],
      "Resource": "arn:aws:iam::*:user/${aws:username}"
    },
    {
      "Sid": "DenyAllExceptListedIfNoMFA",
      "Effect": "Deny",
      "NotAction": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:GetUser",
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ResyncMFADevice",
        "sts:GetSessionToken"
      ],
      "Resource": "*",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "false"
        }
      }
    }
  ]
}

自分の考える IAM ユーザーの最小権限 (MFA 必須) のポイント

  • できることは「マイセキュリティ資格情報」ページで自分の認証情報のパスワードと MFA の管理ができるくらいです。
  • MFA なしでもサインインはできますが、その場合 DenyAllExceptListedIfNoMFA で定義したアクション以外はできません。ただこれは AWS CLI に影響しないため、AWS CLI などを利用する際に MFA を使わないといけないということはないです。
  • IAM ユーザー作成時に初回サインイン時にパスワードリセットを強制できますが、このポリシーではパスワードリセットはできません。 AWS のドキュメントで言及されている通りセキュリティ的にしないほうがいいとのことなので許可はしてません。
  • MFA を使用したサインインを行った後にユーザーが自分でパスワードを変更できるようにしてます。

自分の考える IAM ユーザーの最小権限 (MFA 必須) の運用

このポリシーをベースにグループを作ってそこに所属させて運用するのでも楽でいいかなと思ってます。
例えばこのポリシーにアクセスキーを作成、更新、削除を付与して「IAMEngineer」というグループを作ったりいった感じです。
以前いた会社は複数アカウント管理じゃなくて単一のアカウントで運用していたのですが、
このポリシーに S3 の権限を付与して「IAMVideoCreator」というグループを作って映像クリエイターの方に動画をアップしてもらったりするなど、このポリシーをベースにした運用をやっていれば色々トラブらなくてよかったなぁと思ってます。

参考文献