Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何为我的 Amazon S3 桶启用 MFA 删除功能?
我想为我的 Amazon Simple Storage Service(Amazon S3)桶启用多重身份验证(MFA)删除功能,以保护我的对象免遭意外删除。
简短描述
如果您未配置 MFA 删除功能,则具有以下任一权限的任何人都可以永久删除 Amazon S3 对象:
- 根用户密码
- 具有删除权限的 AWS Identity and Access Management (IAM) 用户或角色凭证
配置 MFA 删除功能后,只有根用户可以永久删除对象版本或更改 S3 存储桶上的版本控制配置。必须使用 MFA 设备对根用户进行身份验证,才能执行删除操作。
要为您的存储桶配置 MFA 删除功能,请完成以下步骤:
- 为根用户生成访问密钥和密钥。
- 为根用户激活 MFA 设备。
- 使用根用户凭证配置 AWS CLI。
- 配置 MFA 删除功能。
- 确认 MFA 删除功能正常运行,然后删除您的根访问密钥。
您只能在启用了 S3 版本控制的存储桶上使用 MFA 删除功能。存储桶所有者、创建存储桶的 AWS 账户以及所有经授权的 IAM 用户都可以启用版本控制。但是,只有根用户账户才能启用 MFA 删除功能。要启用 MFA 删除功能,必须使用 AWS CLI 或 Amazon S3 REST API。
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
解决方法
为根用户生成访问密钥和密钥
首先,为根用户创建访问密钥。创建密钥后,必须立即下载并保存这些密钥。您以后无法检索这些密钥。
为根用户激活 MFA 设备
如果您没有为根用户激活 MFA 设备,请参阅为根用户启用虚拟 MFA 设备(控制台)。如果您已为根用户激活了 MFA 设备,请记下 ARN。
使用根用户凭证配置 AWS CLI
完成以下步骤:
- 运行 AWS CLI 命令 configure。
- 对于 AWS Access Key ID(AWS 访问密钥 ID),输入根用户的访问密钥 ID,例如 AKIAEXAMPLEABCQWE。
- 对于根用户的 AWS Secret Access Key(AWS 秘密访问密钥),输入秘密访问密钥 ID。您可以在包含根用户凭证的文件中找到秘密访问密钥。
- (可选)对于 Default region name(默认区域名称),您可以输入默认 AWS 区域。
- (可选)对于 Default output format(默认输出格式),您可以输入一种输出格式。
**重要事项:**如果您在 AWS CLI 中配置了命名配置文件,则必须为根用户的凭证再创建一个配置文件。要配置命名配置文件,请运行以下 configure 命令:
aws configure --profile root_user
启用 S3 MFA 删除功能
要启用 MFA 删除功能,请运行 put-bucket-versioning 命令:
aws s3api put-bucket-versioning --bucket mybucketname --versioning-configuration MFADelete=Enabled,Status=Enabled --mfa "arn:aws:iam::1XXXXXXX6789:mfa/root-account-mfa-device 123789"
**注意:**在上述命令中,请将 1XXXXXXX6789 替换为您的账户 ID,将 123789 替换为 MFA 设备生成的序列号。
如果您为根用户使用命名配置文件,请运行以下 put-bucket-versioning 命令:
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
如果命令执行成功,则不会有输出。如果您收到的输出中包含错误,请确认您正在使用根用户,且 ARN 和 MFA 序列号均有效。
您也可以通过调用 PutBucketVersioning API 来启用 MFA 删除功能。
**注意:**MFA 删除功能不能与生命周期配置同时使用。如果您在存储桶具有生命周期配置的情况下运行上述 put-bucket-versioning 命令,您将收到以下错误:
“调用 putBucketVersioning 操作时出现错误 (InvalidBucketState): 具有生命周期配置的存储桶不支持 MFA 身份验证。请在启用 MFA 身份验证之前删除生命周期配置。”
确认 MFA 删除功能在运行
首先,确保您已启用 S3 版本控制,您可以使用 Amazon S3 控制台或以下 GetBucketVersioning API:
aws s3api get-bucket-versioning --bucket mybucketname
输出示例:
{ "Status": "Enabled", "MFADelete": "Enabled" }
要永久删除某个对象版本,必须包含 x-amz-mfa 请求标头。您可以在 delete-object 命令中使用 --mfa 选项来包含标头值。标头的值是您的身份验证设备的序列号、空格和身份验证代码的代码链。有关详细信息,请参阅从启用了 MFA 删除的存储桶中删除对象。
如果您在没有启用 MFA 删除功能的情况下尝试删除对象版本,您将收到以下错误。当您使用 IAM 用户尝试删除对象版本时,您也会收到以下错误:
“aws s3api delete-object --bucket mybucketname --key myobjectkey --version-id 3HL4kqCxf3vjVBH40Nrjkd 调用 DeleteObject 操作时出现错误 (AccessDenied): 此请求必须使用 MFA 身份验证”
要使用根用户在启用了 MFA 删除功能的存储桶中删除对象版本,请运行以下 delete-object 命令:
aws s3api delete-object --bucket mybucketname --key myobjectkey --version-id 3HLkqCxf3vjVBH40Nrjkd --mfa "arn:aws:iam::(accountnumber):mfa/root-account-mfa-device (pass)" { "VersionId": "3HLkqCxf3vjVBH40Nrjkd" }
**注意:**要允许您账户中的 IAM 用户或角色在没有版本 ID 的情况下使用 delete-object 请求,请向其授予 s3:DeleteObject 权限。对于启用了版本控制的存储桶,delete-object 请求仅会创建一个删除标记。不会永久删除对象版本。要永久删除对象,必须指定该对象的版本 ID。
启用 MFA 删除功能后,最佳安全做法是执行以下操作:
- 使存储在 AWS CLI 中的操作系统 (OS) 配置文件和凭证文件中的根用户凭证失效,并将其删除。
- 使用 AWS 管理控制台删除根用户访问密钥。
