アカウントマルチセクタ認証の強制実施(MFA)


マルチレベル認証(MFA,MultiFactorAuthentication)とは、アカウント認証中に少なくとも2回以上認証要素を追加することを意味します.代表的なものはバイオ認証、モバイル機器による認証などである.
最も一般的なID−PW認証方式では,簡単であるが多くの欠点がある.
  • 身元が確認できません(口座が流出した場合、誰でもログインできます)
  • 同じアカウント情報を使用すると、2回目の傷害
  • を引き起こす可能性があります.
  • 「クイック転送」攻撃を受けにくい
  • すなわち、従来のID−PW認証方式では、アカウントを安全に管理することは困難である.
    特に、企業にとって、アカウントが漏洩した場合、強力なネットワーク境界に対するセキュリティを弱め、内部ネットワークに入りやすくするため、徹底的な管理が必要です.
    AWSではマルチレベル認証を行う方法も複数存在する.
    代表的なものは仮想MFAデバイス、Hardware MFAデバイス、SMSメールMFAなどである.
  • AWS使用マルチセクタ認証(MFA)
  • IAMポリシーにより、MFAを適用していないユーザーがAWSコンソール内で何も操作できないようにすることができます.
  • AWS:MFA認証IAMにより、ユーザーが自分の証明書を「自分のセキュリティ証明書」ページで管理できるようになる
  • AWSで提供されているドキュメントを参照すると、いくつかの問題が発生します.

  • パスワード変更権限なし
    IAMアカウントの作成時に「パスワードリセット要求」オプションが有効になっている場合、MFA設定前にパスワード変更権限がなく、ログインできません.

  • 仮想MFAデバイスを削除できません
    MFA認証登録中に問題(ex.セッション移動、OTP認証失敗など)が発生した場合、生成した一時MFAは削除できません.
  • 上記の問題を解決するには、次の権限を追加します.
    NotAction要素には、「iam:ChangePassword」、「iam:DeleteVirtualMFADevice」および「iam:GetAccountPasswordPolicy」権限が追加されています.
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowGetAccountPasswordPolicy",
          "Effect": "Allow",
          "Action": [
            "iam:GetAccountPasswordPolicy"
          ],
          "Resource": "*"
        }, {
          "Sid": "AllowViewAccountInfo",
          "Effect": "Allow",
          "Action": [
            "iam:GetAccountPasswordPolicy",
            "iam:GetAccountSummary",
            "iam:ListVirtualMFADevices"
          ],
          "Resource": "*"
        }, {
          "Sid": "AllowManageOwnPasswords",
          "Effect": "Allow",
          "Action": [
            "iam:ChangePassword",
            "iam:GetUser"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        }, {
          "Sid": "AllowManageOwnAccessKeys",
          "Effect": "Allow",
          "Action": [
            "iam:CreateAccessKey",
            "iam:DeleteAccessKey",
            "iam:ListAccessKeys",
            "iam:UpdateAccessKey"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        }, {
          "Sid": "AllowManageOwnSigningCertificates",
          "Effect": "Allow",
          "Action": [
            "iam:DeleteSigningCertificate",
            "iam:ListSigningCertificates",
            "iam:UpdateSigningCertificate",
            "iam:UploadSigningCertificate"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        }, {
          "Sid": "AllowManageOwnSSHPublicKeys",
          "Effect": "Allow",
          "Action": [
            "iam:DeleteSSHPublicKey",
            "iam:GetSSHPublicKey",
            "iam:ListSSHPublicKeys",
            "iam:UpdateSSHPublicKey",
            "iam:UploadSSHPublicKey"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        }, {
          "Sid": "AllowManageOwnGitCredentials",
          "Effect": "Allow",
          "Action": [
            "iam:CreateServiceSpecificCredential",
            "iam:DeleteServiceSpecificCredential",
            "iam:ListServiceSpecificCredentials",
            "iam:ResetServiceSpecificCredential",
            "iam:UpdateServiceSpecificCredential"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        }, {
          "Sid": "AllowManageOwnVirtualMFADevice",
          "Effect": "Allow",
          "Action": [
            "iam:CreateVirtualMFADevice",
            "iam:ListVirtualMFADevices",
            "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",
            "iam:DeleteVirtualMFADevice",
            "iam:ChangePassword",
            "iam:GetAccountPasswordPolicy",
            "sts:GetSessionToken"
          ],
          "Resource": "*",
          "Condition": {
            "BoolIfExists": {
              "aws:MultiFactorAuthPresent": "false"
            }
          }
        }
      ]
    }