如何使用 MFA 令牌对通过 AWS CLI 进行的 AWS 资源访问执行身份验证?

2 分钟阅读
0

我想要使用 MFA 令牌对通过 AWS 命令行界面(AWS CLI)进行的 AWS 资源访问执行身份验证。

解决方法

最佳实践是使用 multi-factor authentication (MFA) 设备保护账户及其资源。如果您打算在使用 MFA 设备时通过 AWS CLI 与资源交互,则必须创建临时会话。如果您使用的是 MFA 硬件设备,则该值类似于 GAHT12345678。如果您使用的是虚拟 MFA,则可以通过查看安全凭证来找到该值。它类似于 arn:aws:iam::123456789012:mfa/user。有关更多信息,请参阅检查 MFA 状态

重要提示:

运行 sts get-session-token AWS CLI 命令(将变量替换为账户、资源和 MFA 设备的信息):

$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token

您会收到类似于以下内容的输出,其中包含临时凭证和到期时间(默认为 12 小时):

{
    "Credentials": {
        "SecretAccessKey": "secret-access-key",
        "SessionToken": "temporary-session-token",
        "Expiration": "expiration-date-time",
        "AccessKeyId": "access-key-id"
    }
}

**注意:**可以在 sts get-session-token 命令中使用 --duration-seconds 选项指定到期时间 (单位:秒),该值的范围在 900 秒 (15 分钟) 至 129600 秒 (36 小时) 之间。如果您使用的是根用户凭证,则范围为 900 秒(15 分钟)到 3600 秒(1 小时)。

通过环境变量使用临时凭证

您可以使用以下命令将临时凭证的值导出到环境变量,从而使用临时凭证(在 Linux 中):

Linux:

export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
export AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
export AWS_SESSION_TOKEN=example-session-token-as-in-previous-output

Windows:

set AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
set AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
set AWS_SESSION_TOKEN=example-session-Token-as-in-previous-output

如果您已设置环境变量,请确保在使用这些命令再次进行 get-session-token 调用之前取消对它们的设置。

Linux:

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN

Windows:

set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set AWS_SESSION_TOKEN=

通过命名配置文件使用临时凭证

您还可以使用命名配置文件指定需要进行 MFA 身份验证的命令。为此,请编辑用户主目录中的 .aws 文件夹下的 credentials 文件,然后添加新的配置文件配置以发出经过了 MFA 身份验证的命令。下面是一个配置文件配置示例:

[mfa]
aws_access_key_id = example-access-key-as-in-returned-output
aws_secret_access_key = example-secret-access-key-as-in-returned-output
aws_session_token = example-session-Token-as-in-returned-output

凭证到期后,再次运行 get-session-token 命令,然后将返回值导出到环境变量或配置文件配置。

**提示:**可以考虑在后台运行脚本或 cron 作业,以检查 get-session-token 命令输出中的“expiration”(到期时间),然后提示重新进行身份验证。

如果使用configure 命令配置 AWS CLI,则存在具有永久 AWS Identity and Access Management (IAM) 用户凭证的默认配置。此 IAM 用户可以使用不需要 MFA 身份验证的命令。

示例配置:

.aws/credentials

[default]
aws_access_key_id = example-access-Key-for-an-IAM-user
aws_secret_access_key = example-secret-access-key-for-IAM-user

**注意:**不能将 mfa_serial 参数与永久 IAM 凭证一起使用。

如果您使用配置文件对使用 AWS CLI 的命令进行身份验证,请指定 --profile 选项并且在后面跟随配置文件名称,以验证调用使用 MFA 进行身份验证。

例如,此命令使用默认配置文件凭证,而不使用 MFA 进行身份验证。

$ aws s3 ls

**重要提示:**请确保了解凭证优先顺序,以使您可以验证在进行 API 调用时使用正确的凭证。这可以通过使用 GetCallerIdentity 命令来完成。 

$ aws s3 ls --profile mfa

您还可以要求用户使用 MFA 进行身份验证,以使用 IAM policy 中的 aws:MultiFactorAuthPresentaws:MultiFactorAuthAge 条件执行特定的 API 操作。


相关信息

为 AWS 中的用户启用 MFA 设备

丢失或无法使用多重身份验证(MFA)设备

相关视频

AWS 官方
AWS 官方已更新 2 年前