我为 AWS 用户启用了 MFA,当用户登录 AWS 控制台时,MFA 可以正常工作。但是,此用户还可以通过 CLI(通过访问密钥和密钥)访问所有服务,这是否意味着 CLI 将始终绕过 MFA,即使已为该用户启用了 MFA?
答案1
您可以启用API 访问上的 MFA但任何使用这些凭证的服务(包括 CLI)都必须使用临时安全凭证(即,您进行 AssumeRole 调用并提供您的访问密钥、机密和 MFA 令牌,它会返回临时访问密钥,这些密钥在 MFA 身份验证有效期间有效)。
话虽如此,通常认为最佳做法是将您的“登录”帐户(即您通过 AWS 控制台登录的帐户)与您的“访问凭证”帐户(即在其他软件中使用 API 密钥的帐户)分开。
您的“登录”帐户应已启用 MFA,但没有访问凭据。您可以使用此帐户创建其他“访问凭据”用户,这些用户只能访问您特别需要访问的服务/功能。
答案2
由于这种情况有所改变,因此添加了一个新答案。如果您使用角色,CLI 可以为您管理很多此类问题。描述如下:http://docs.aws.amazon.com/cli/latest/userguide/cli-roles.html
在我的凭证文件中我有:
[my_iam_user]
aws_access_key_id = AKIABLAHBLAHBLAHBLAH
aws_secret_access_key = <blah>
region = us-east-1
[my_admin_role]
role_arn = arn:aws:iam::123456789123:role/my_admin_role
source_profile = my_iam_user
mfa_serial = arn:aws:iam::123456789123:mfa/my_iam_user
region = us-east-1
注意该mfa_serial
条目。您可以从 AWS IAM 控制台中的用户详细信息中获取此值。此条目告诉 CLI 该角色需要 MFA。
当我调用aws s3 ls --profile my_admin_role
它时Enter MFA code:
,我粘贴代码后它会返回列表。
注意:我还没有找到让 CLI 在调用用户配置文件时请求 MFA 的方法(--profile my_iam_user
),只有调用角色配置文件才会触发 MFA 请求。
然后,MFA 令牌将被延续,并且用户配置文件也可以使用:
aws sts get-caller-identity --profile my_iam_user
# {
# "Account": "123456789123",
# "UserId": "AIDABLAHBLAHBLAHBLAH",
# "Arn": "arn:aws:iam::123456789123:user/my_iam_user"
# }
aws sts get-caller-identity --profile my_admin_role
# {
# "Account": "123456789123",
# "UserId": "AROABLAHBLAHBLAHBLAH:AWS-CLI-session-1234567890",
# "Arn": "arn:aws:sts::123456789123:assumed-role/my_admin_role/AWS-CLI-session-1234567890"
# }