AWS CLI を使用する IAM ユーザーに MFA による認証を適用するにはどうすればよいですか?

最終更新日: 2021 年 9 月 15 日

AWS Identity and Access Management (IAM) ユーザーに対し、AWS のサービスへのアクセスを制限する多要素認証 (MFA) 条件ポリシーを作成しました。このポリシーは AWS マネジメントコンソールでは機能しますが、AWS Command Line Interface (AWS CLI) では機能しません。AWS CLI で MFA を使用するにはどうすればよいですか?

簡単な説明

次に挙げた IAM ポリシーの例では、特定の AWS のサービスにアクセスする IAM ユーザーは、MFA を使用する必要があります。

{
  "Sid": "BlockMostAccessUnlessSignedInWithMFA",
  "Effect": "Deny",
  "NotAction": [
    "iam:CreateVirtualMFADevice",
    "iam:DeleteVirtualMFADevice",
    "iam:ListVirtualMFADevices",
    "iam:EnableMFADevice",
    "iam:ResyncMFADevice",
    "iam:ListAccountAliases",
    "iam:ListUsers",
    "iam:ListSSHPublicKeys",
    "iam:ListAccessKeys",
    "iam:ListServiceSpecificCredentials",
    "iam:ListMFADevices",
    "iam:GetAccountSummary",
    "sts:GetSessionToken"
  ],
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:MultiFactorAuthPresent": "false",
      "aws:ViaAWSService": "false"
    }
  }
}

AWS マネジメントコンソールを使用する IAM ユーザーの場合は、MFA 認証情報の入力を求められるので、AWS のサービスにアクセスできます。一方、AWS CLI を使用する IAM ユーザーは MFA 認証情報の入力を求められず、AWS のサービスにアクセスできません。

解決方法

注意: AWS CLI コマンドの実行時にエラーが発生する場合は、AWS CLI の最新バージョンを使用していることを確認してください

MultiFactorAuthPresent キーは、長期的な認証情報を使用して行われたリクエストには存在しません。ブール条件演算子では、ポリシーのキーが存在しない場合、値は一致しません。この MultiFactorAuthPresent キーは、長期的な認証情報を使用して行われたリクエストへのアクセスを拒否しません。

AWS マネジメントコンソールを使用する IAM ユーザーには一時的な認証情報が生成され、MFA を使用した場合のアクセスのみが許可されます。

ブール条件を使用すると、キー値を true または false に設定してのアクセス制限が可能です。IfExists 条件演算子を追加することで、リクエストに MultiFactorAuthPresent キーが含まれるかどうかを確認できます。MultiFactorAuthPresent キーが含まれていない場合、IfExists は条件要素を次のように true と評価します。

"Effect" : "Deny",
"Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "false", "aws:ViaAWSService":"false"} }

AWS CLI と長期的な認証情報を使用している IAM ユーザーはアクセスを拒否されるので、認証には MFA を使用する必要があります。

詳細については「ブール条件演算子」を参照してください。