我希望要求其他用户使用多重验证 (MFA) 设备来获取对我的 Amazon Simple Storage Service (Amazon S3) 存储桶的访问权限。该如何操作?
分辨率
将与 MFA 相关的条件添加到您的存储桶策略中,要求其他 AWS 账户的用户使用 MFA 设备进行身份验证。
在开始之前,其他 AWS 账户的用户必须满足以下要求:
- 他们必须有权访问 Amazon S3。例如,如果用户在其 AWS Identity and Access Management (IAM) 策略中包括 AmazonS3FullAccess AWS 托管策略,则满足此要求。
- 他们必须附加了 IAM 策略以允许他们调用 GetSessionToken。
- 他们必须已配置 MFA 设备与其 IAM 身份配合使用。
接下来,创建存储桶策略并使用 aws:MultiFactorAuthPresent 或 aws:MultiFactorAuthAge 条件。这些条件确定用户是否使用 MFA 设备进行身份验证。
例如,假设您希望拒绝用户执行某些操作,除非他们使用 MFA 设备进行身份验证。您可以分两个部分编写存储桶策略:
1. 第一部分在用户未使用 MFA(满足条件 "aws:MultiFactorAuthPresent": "false")进行身份验证时明确拒绝这些操作,类似于下文:
{
"Version": "2012-10-17",
"Id": "Policy201612130001aa",
"Statement": [
{
"Sid": "Stmt201612130001ab",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::example.accounta.bucket/*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
},
...
在此示例中,我们拒绝用户执行 s3:PutObject、s3:PutObjectAcl 和 s3:DeleteObject 操作。
2. 策略的第二部分在用户使用 MFA(未满足条件 "aws:MultiFactorAuthPresent": "false")进行身份验证时明确允许以下操作:
...
{
"Sid": "Stmt201612130001ac",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::example.accounta.bucket",
"arn:aws:s3:::example.accounta.bucket/*"
]
}
]
}
将类似的存储桶策略添加到存储桶后,用户可以运行 get-session-token AWS Command Line Interface (AWS CLI) 命令。get-session-token 命令可获取访问存储桶中的资源所需的凭证。此命令需要用户提供以下内容:
- 由 MFA 设备生成的临时代码
- 硬件 MFA 设备的设备序列号,或者软件 MFA 设备的 Amazon 资源名称 (ARN)
**注意:**如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
作为获取凭证的另一种选项,用户可以选择导出临时凭证作为环境变量。
相关信息
存储桶策略示例
配置 AWS CLI