一、操作场景
这篇档介绍如何通过腾讯云访问管理(CAM)的自定义策略,限制未经过 MFA 多因素认证的身份请求敏感 API 操作。通过为策略添加 MFA 条件键 “qcs:mfaPresent”,可要求用户在调用 API 前完成 MFA 设备认证,提升账号安全性。
典型场景示例:
·要求跨账号扮演角色时必须通过 MFA 认证。
·限制未绑定 MFA 的用户终止云服务器(CVM)实例。
·保护敏感操作(例如删除 COS 存储桶、修改数据库密码等)。
二、前提条件
·服务支持:目标 API 操作需支持 qcs:mfaPresent 条件键,详情请参见 支持 CAM 的业务接口(支持 qcs:mfaPresent 的接口范围与“支持 IP 限制”的接口范围相同)
·MFA 设备:子用户需提前绑定 MFA 设备,在控制台使用的用户需要开启登录保护。(如未绑定,请参见 步骤 1:绑定虚拟 MFA 并开启登录保护)
三、注意事项
MFA 设备限制
·使用 API 调用时,仅支持虚拟 MFA 设备(例如 Google Authenticator、Microsoft Authenticator、腾讯云助手小程序),暂不支持手机号验证码、微信扫码验证。
·使用控制台登录时,需开启登录保护,登录保护的验证方式不限于虚拟 MFA、手机号验证码、微信扫码验证。
四、步骤 1:绑定虚拟 MFA 并开启登录保护
1. 管理员操作
·进入访问管理控制台 > 用户列表,选择目标子用户,在用户详情页面中,为其开启用户登录保护,并选择虚拟 MFA 验证方式。详情请参见 为子账号设置安全保护。
·检查用户 MFA 绑定状态,确保为绑定状态。
·确保有访问控制台权限的子用户开启了登录保护,要求登录时验证 MFA 动态口令。
2. 子用户操作
·未绑定虚拟 MFA 设备的子用户,登录腾讯云控制台,根据指引绑定虚拟 MFA 设备(具体操作请参见 子账号绑定 MFA 设备)。
·已绑定虚拟 MFA 设备的子用户,登录腾讯云控制台,根据指引输入 MFA 动态口令进行身份验证。
五、步骤 2:管理员创建 MFA 保护策略
1. 策略语法
在 CAM 策略中,通过 condition 字段添加 qcs:mfaPresent 条件键,限制 API 调用必须附带 MFA 认证。 创建自定义策略的具体操作请参见 通过策略语法创建自定义策略。
示例策略如下:(限制终止 CVM 实例):
{ "version": "2.0", "statement": [ { "effect": "allow", "action": "cvm:TerminateInstances", "resource": "*", "condition": { "bool_equal": { "qcs:mfaPresent": "true" } } } ]}
2. 策略关联
将策略关联至目标用户/用户组,确保权限生效。具体授权操作请参见 授权管理。
六、步骤 3:调用支持 MFA 的 API
子用户需通过以下方式获取临时凭证并调用 API:
七、方式 1:GetSessionToken(获取 MFA 临时凭证)
·适用场景:当前账号内受策略保护的 API 操作(例如 COS 桶删除)。
·API 调用示例:
curl -X POST <https://sts.tencentcloudapi.com> \\ -H "Authorization: TC3-HMAC-SHA256 …" \\ -d '{ "Action": "GetSessionToken", "Name": "temp_token", "Policy": "{\\"version\\":\\"2.0\\", …}", "SerialNumber":"qcs::cam::uin/12345678:mfa/softToken", # 输入虚拟MFA序列号 "MfaCode": "123456" # 输入虚拟 MFA 动态口令 }'
使用示例
场景:强制删除 COS 存储桶前验证 MFA
1. 策略配置
{ "version": "2.0", "statement": [ { "effect": "allow", "action": "cos:DeleteBucket", "resource": "qcs::cos:ap-guangzhou:uid/12345678:bucket/example-1250000000/*", "condition": { "bool_equal": { "qcs:mfaPresent": "true" } } } ]}
2. 用户操作
·调用 GetSessionToken 接口获取临时凭证(需附带 MFA 动态口令)。
·使用临时凭证调用 cos:DeleteBucket 接口删除存储桶。
注意:警告:
注意:使用示例仅作演示作用,请根据使用场景替换策略中的"effect"、"action"、"resource"等信息。避免误删 COS 桶,造成业务损失。
八、方式 2:AssumeRole(角色代入)
·适用场景:跨账号访问或角色委托。
·API 调用示例:
curl -X POST <https://sts.tencentcloudapi.com> \\ -H "Authorization: TC3-HMAC-SHA256 …" \\ -d '{ "Action": "AssumeRole", "RoleArn": "qcs::cam::uin/12345678:role/TestRole", "RoleSessionName": "test", "DurationSeconds": 7200, "SerialNumber":"qcs::cam::uin/12345678:mfa/softToken", # 输入虚拟 MFA 序列号 "MfaCode": "123456" # 输入虚拟 MFA 动态口令 }'