如何在AWS CLI中使用MFA?

Hel*_*lad 23 amazon-web-services

使用AWS CLI时如何输入MFA代码?我查看了IAM http://docs.aws.amazon.com/cli/latest/reference/iam/index.html的文档页面.

我已经在我的用户名下启用了MFA设备.

aws iam list-mfa-devices --user-name X
Run Code Online (Sandbox Code Playgroud)

回报

{
"MFADevices": [
    {
        "UserName": "X", 
        "SerialNumber": "arn:aws:iam::+++:mfa/X", 
        "EnableDate": "2016-01-13T23:15:43Z"
    }
]
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*ris 41

如果您正在使用角色,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
Run Code Online (Sandbox Code Playgroud)

请注意该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"
 # }
Run Code Online (Sandbox Code Playgroud)

  • 这种技术让我大吃一惊.它比直接处理临时密钥和令牌简单得多!我很惊讶这不经常提到. (4认同)
  • 在没有角色的情况下进行这项工作的问题:https://github.com/aws/aws-cli/issues/1985 (3认同)
  • 这个方法,结合[aws-shell](https://github.com/awslabs/aws-shell),绝对是完美的。感谢你的分享。`aws-shell --profile roleProfileName` 将启动具有该角色的 aws shell,这意味着您不必将 --profile 传递给每个命令。需要时将自动提示 MFA,并且您可以从 aws-shell 获得**代码完成和文档**。惊人的! (2认同)

rmh*_*son 9

分步手动解决方案:

  1. 使用 MFA 请求会话令牌
aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
Run Code Online (Sandbox Code Playgroud)

arn-of-the-mfa-device:从您的用户 IAM 可见

  • 选项:使用 CLI 检索: aws iam list-mfa-devices --user-name ryan
  • 选项:在 IAM 控制台中查看:IAM --> 用户 --> --> 安全凭证

code-from-token:来自您配置的 MFA 设备的 6 位代码

  1. 使用返回的凭据创建配置文件
aws configure --profile cli

aws configure set --profile cli aws_session_token <SESSION_TOKEN_HERE>
Run Code Online (Sandbox Code Playgroud)

aws_session_token包括aws configure

  1. 测试命令
aws s3 ls --profile cli
Run Code Online (Sandbox Code Playgroud)

  • 愿上帝保佑你得到这个答案!感谢您告诉我如何将 aws_sesison_token 添加到配置文件中 (2认同)
  • @pnv 事实上,很高兴知道“幕后”发生了什么,但对于日常生活,我_高度_建议使用工具。热门的有3-4个。我使用 https://github.com/broamski/aws-mfa (2认同)

Mar*_*k B 8

呼叫aws sts get-session-token --token-code <value>记录在这里。这将为您提供一个临时的安全令牌。可以在此处找到有关使用临时安全令牌的文档。

  • @Phifo 这个问题是关于使用 2FA 令牌的。该代码是 2FA 令牌。 (2认同)

out*_*man 8

我已经为 aws-cli 发布了一个 PR,它将允许在凭证中使用 mfa_serial,这将强制您在向 AWS 发出请求之前输入令牌(并且它会在令牌有效时被缓存)

如果您想参加,请随意投票。


Rya*_*uck 5

aws-mfa作为包装器sts并且工作得非常好: https: //github.com/broamski/aws-mfa