如何要求其他 AWS 账户的用户使用 MFA 访问我的 Amazon S3 存储桶?

上次更新日期:2022 年 01 月 20 日

我希望要求其他用户使用多重验证 (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:MultiFactorAuthPresentaws: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

作为获取凭证的另一种选项,用户可以选择导出临时凭证作为环境变量


这篇文章对您有帮助吗?


您是否需要账单或技术支持?