如何为我的 Amazon S3 桶启用 MFA 删除功能?

2 分钟阅读
0

我想为我的 Amazon Simple Storage Service(Amazon S3)桶启用多重身份验证(MFA)删除功能,以保护我的对象免遭意外删除。

简短描述

通过 Amazon S3 MFA 删除功能,可以防止意外删除对象。如果您未启用 MFA 删除功能,则具有以下任一权限的任何人都可以永久删除 Amazon S3 对象:

  • 根用户密码
  • 具有足够权限的 AWS Identity and Access Management(IAM)用户或角色的凭证

启用 MFA 删除功能后,只有根用户可以永久删除对象版本或更改 S3 桶上的版本控制配置。根用户必须通过 MFA 设备进行身份验证才能执行此操作。

**注意:**只有启用版本控制的桶才支持 MFA 删除功能。桶拥有者、创建桶的 AWS 账户以及所有经授权的 IAM 用户都可以启用版本控制。但是,只有根账户的桶拥有者才能启用 MFA 删除功能。

要为您的桶启用 MFA 删除功能,请完成以下步骤:

  1. 为根用户生成访问密钥和密钥。
  2. 为根用户激活 MFA 删除设备。
  3. 使用根用户凭证配置 AWS 命令行界面(AWS CLI)。
  4. 使用 PutBucketVersioning API 启用 MFA 删除功能。
  5. 确认 MFA 删除功能在运行。记得删除您的根访问密钥。

**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

解决方法

为根用户生成访问密钥和密钥

按照为根用户创建访问密钥中的说明进行操作。

创建这些密钥后,您会收到一条警告,提醒您只有这一次机会查看或下载密钥。您以后无法检索这些密钥。因此,请务必保存好,以便在配置 AWS CLI 时使用。

为根用户激活 MFA 设备

如果您没有为根用户激活的 MFA 设备,请按照为您的 AWS 账户根用户启用虚拟 MFA 设备(控制台)中的说明进行操作。

如果您已经为根用户激活了 MFA 设备,请记下 ARN。

使用根凭证配置 AWS CLI

运行 AWS CLI configure 命令。

  1. 当提示输入 AWS 访问密钥 ID(例如: AKIAEXAMPLEABCQWE)时,粘贴您在步骤 1 中下载的根用户的访问密钥 ID。
  2. 当提示输入根用户的 AWS 秘密访问密钥时,粘贴秘密访问密钥 ID。您可以在包含根用户凭证的文件中找到此信息。
  3. (可选)当提示输入默认区域名称时,您可以跳过并按 Enter。
  4. (可选)当提示输入默认输出格式时,您可以跳过并按 Enter。

**重要事项:**如果您在 AWS CLI 上配置了命名配置文件,则必须为根用户的凭证再创建一个配置文件。

要配置命名配置文件,请运行以下命令:

aws configure --profile root_user

使用 PutBucketVersioning API 启用 S3 MFA 删除功能

要启用 MFA 删除功能,请运行 put-bucket-versioning 命令:

aws s3api put-bucket-versioning --bucket mybucketname --versioning-configuration MFADelete=Enabled,Status=Enabled --mfa "arn:aws:iam::(accountnumber):mfa/root-account-mfa-device (pass)"

例如:

aws s3api put-bucket-versioning --bucket mybucketname --versioning-configuration MFADelete=Enabled,Status=Enabled --mfa "arn:aws:iam::1XXXXXXX6789:mfa/root-account-mfa-device 123789"

在此示例中,123789 是使用 MFA 设备生成的六位数示例代码。

如果您为根用户使用了命名配置文件,请运行以下命令:

aws s3api put-bucket-versioning --bucket mybucketname --versioning-configuration MFADelete=Enabled,Status=Enabled --mfa "arn:aws:iam::1XXXXXXX6789:mfa/root-account-mfa-device 123789" --profile root_user

如果命令执行成功,则不会有输出。如果您遇到错误,请确保您安装了最新版本的 AWS CLI。此外,请确认您使用的是根用户并且 MFA 代码和 ARN 有效。

确认 MFA 删除功能在运行

检查 Amazon S3 控制台,确保桶的版本控制已启用。

要检查 MFA 删除功能是否已启用,请使用 GetBucketVersioning API:

aws s3api get-bucket-versioning --bucket mybucketname  
{  
    "Status": "Enabled",  
    "MFADelete": "Enabled"  
}

为桶启用 MFA 删除功能后,将来所有对象删除中必须包含请求标头,才能永久删除对象版本。标头的值是您的身份验证设备的序列号、空格和设备上显示的身份验证代码的代码链。有关详细信息,请参阅从启用 MFA 删除功能的桶中删除对象。您可以在 delete-object 命令中使用 --mfa 选项来包含标头值。

如果您尝试在没有 MFA 的情况下删除桶中的对象版本,则会出现以下错误。当您使用 IAM 用户尝试删除对象版本时,也会出现此错误:

aws s3api delete-object --bucket mybucketname --key myobjectkey --version-id 3HL4kqCxf3vjVBH40Nrjkd  
An error occurred (AccessDenied) when calling the DeleteObject operation: Mfa Authentication must be used for this request

要使用根用户在启用 MFA 删除功能的桶中删除对象版本,请运行以下命令:

aws s3api delete-object --bucket mybucketnme --key myobjectkey --version-id 3HLkqCxf3vjVBH40Nrjkd --mfa "arn:aws:iam::(accountnumber):mfa/root-account-mfa-device (pass)"  
{  
    "VersionId": "3HLkqCxf3vjVBH40Nrjkd"  
}

**注意:**您的 AWS 账户中拥有 s3:DeleteObject 权限的 IAM 用户或角色仍然可以在不指定版本 ID 的情况下成功地向桶中的对象发出 delete-object 请求。在具有版本控制的桶中,此请求会创建删除标记。对象的当前版本与先前版本相同。永久删除这些桶中对象的唯一方法是在 delete-object 请求中指定对象版本的版本 ID。启用 MFA 删除功能后,只有根用户才能对桶中的对象进行版本识别删除。此外,根用户必须通过根用户 MFA 设备对请求进行身份验证。

作为安全最佳做法,在启用 MFA 删除功能后,请执行以下操作:

  • 将存储在 AWS CLI 上的根用户凭证作废并将其删除。AWS CLI 凭证存储在您的操作系统的配置文件夹中。有关详细信息,请参阅配置和凭证文件设置
  • 使用 AWS 管理控制台删除根用户访问密钥。有关说明,请参阅删除根用户的访问密钥

相关信息

配置 MFA 删除功能

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