如何使用 MFA 令牌对通过 AWS CLI 进行的 AWS 资源访问执行身份验证?
我想要使用 MFA 令牌对通过 AWS 命令行界面(AWS CLI)进行的 AWS 资源访问执行身份验证。
解决方法
最佳实践是使用 multi-factor authentication (MFA) 设备保护账户及其资源。如果您打算在使用 MFA 设备时通过 AWS CLI 与资源交互,则必须创建临时会话。如果您使用的是 MFA 硬件设备,则该值类似于 GAHT12345678。如果您使用的是虚拟 MFA,则可以通过查看安全凭证来找到该值。它类似于 arn:aws:iam::123456789012:mfa/user。有关更多信息,请参阅检查 MFA 状态。
重要提示:
- 对安全密钥的支持仅可通过 AWS 管理控制台获得。有关更多信息,请参阅启用 FIDO 安全密钥(控制台)。作为解决方法,您可以使用虚拟 MFA 设备。有关更多信息,请参阅启用和管理虚拟 MFA 设备(AWS CLI 或 AWS API)。
- 所有 IAM 用户必须拥有足够的权限才能创建、查看和禁用分配给其用户的 MFA 设备。在开始之前,他们还必须开启 MDA 设备并将 其分配给用户。
- 如果在运行 AWS CLI 命令时收到错误,请确保您使用的 AWS CLI 为最新版本。
运行 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:MultiFactorAuthPresent 或 aws:MultiFactorAuthAge 条件执行特定的 API 操作。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前