借助访问控制RAM的RAM用户,您可以实现阿里云账号(主账号)和RAM用户(子账号)权限分割,按需为RAM用户赋予不同的权限,避免因暴露阿里云账号密钥而造成安全风险。
背景信息
企业A开通了云消息队列 RabbitMQ 版服务,该企业需要员工操作云消息队列 RabbitMQ 版服务所涉及的资源,例如实例、Vhost、Queue和Exchange。由于每个员工的工作职责不一样,需要的权限也不一样。企业A的需求如下:
出于安全或信任的考虑,不希望将云账号密钥直接透露给员工,而希望能给员工创建相应的用户账号。
用户账号只能在授权的前提下操作资源,不需要对用户账号进行独立的计量计费,所有开销都计入企业账号名下。
随时可以撤销用户账号的权限,也可以随时删除其创建的用户账号。
步骤一:创建RAM用户
使用企业A的阿里云账号登录RAM控制台并为员工创建RAM用户。
操作步骤
控制台
使用阿里云账号(主账号)或拥有RAM管理员权限(
AliyunRAMFullAccess)的RAM用户登录RAM控制台。在左侧导航栏,选择。
在用户页面,单击创建用户。
在创建用户页面的用户账号信息区域,设置用户基本信息。
登录名称(必填):可包含英文字母、数字、半角句号(.)、短划线(-)和下划线(_),最多64个字符。
显示名称(选填):最多包含128个字符或汉字。
标签(选填):单击
,然后输入标签键和标签值,便于后续基于标签的用户管理。
说明单击添加用户,可以批量创建多个RAM用户。
在访问方式区域,根据用户类型进行配置:
重要为了账号安全,建议您只选择以下访问方式中的一种,将人员用户和应用程序用户分离,避免混用。
访问密钥(AccessKey)是一种长期有效的程序访问凭证。AccessKey泄露会威胁该账号下所有资源的安全。建议优先采用STS Token临时凭证方案,降低凭证泄露的风险。更多信息,请参见使用访问凭据访问阿里云OpenAPI最佳实践。
给员工使用(控制台访问)
勾选控制台访问。
设置密码:您可以选择自动生成密码或者自定义密码。自定义登录密码时,密码必须满足密码复杂度规则。更多信息,请参见设置RAM用户密码策略。
需要重置密码:选择RAM用户在下次登录时是否需要重置密码。
MFA 多因素认证:账号默认设置为强制所有用户登录时必须使用 MFA。如需修改,请参考管理RAM用户安全设置。RAM用户首次登录时需要绑定MFA设备,请参考RAM用户自行绑定MFA设备。
给程序使用(使用永久AccessKey访问)
勾选使用永久AccessKey访问。
启用后,系统会自动为RAM用户生成一个AccessKey ID和AccessKey Secret。
重要RAM用户的AccessKey Secret只在创建时显示,不支持后续查看,请务必立即下载或复制保存AccessKey Secret。泄露AccessKey将严重威胁您账号下所有资源的安全。更多信息详见创建AccessKey。
OpenAPI
创建控制台用户
调用GetDefaultDomain获取账号的默认域名,格式为
<AccountAlias>.onaliyun.com。调用CreateUser创建RAM用户,其中必传的参数建议如下:
UserPrincipalName:RAM 用户的登录名称。格式为<username>@<AccountAlias>.onaliyun.com,其中<username>为 RAM 用户名称,<AccountAlias>.onaliyun.com为默认域名。DisplayName:RAM用户的显示名称,可以与上面<username>不同。
调用CreateLoginProfile修改访问方式和MFA要求等,其中部分参数的建议如下:
UserPrincipalName:上一步已创建的用户信息。Password:根据账号的密码强度要求配置。可以调用GetPasswordPolicy查询当前账号的RAM用户密码强度策略。MFABindRequired:建议设置强制要求RAM用户开启MFA,参数建议为true。Status:是否开启控制台密码登录,保持默认值Active
创建程序用户
调用GetDefaultDomain获取账号的默认域名,格式为
<AccountAlias>.onaliyun.com。调用CreateUser创建RAM用户,其中必传的参数建议如下:
UserPrincipalName:RAM 用户的登录名称。格式为<username>@<AccountAlias>.onaliyun.com,其中<username>为 RAM 用户名称,<AccountAlias>.onaliyun.com为默认域名。DisplayName:RAM用户的显示名称,可以与上面<username>不同。
调用CreateAccessKey创建访问密钥(AccessKey),仅需传入
UserPrincipalName,即上一步已创建的用户信息即可完成AccessKey创建。重要调用
CreateAccessKey接口的返回结果中会包含AccessKeyId和AccessKeySecret。AccessKeySecret仅在本次返回中提供,无法后续查询,请务必立即保存。泄露AccessKey将严重威胁您账号下所有资源的安全。更多信息详见创建AccessKey。
步骤二:为RAM用户添加权限
为不同员工的RAM用户授予不同的权限。
使用RAM管理员登录RAM控制台。
在左侧导航栏,选择。
单击目标RAM用户操作列的新增授权。您也可以选中多个RAM用户,单击用户列表下方的新增授权,为RAM用户批量授权。
在新增授权面板,为RAM用户添加权限。
选择资源范围。
账号级别:权限在当前阿里云账号内生效。
资源组级别:权限在指定的资源组内生效。
说明指定资源组授权生效的前提是该云服务已支持资源组,详情请参见支持资源组的云服务。
指定授权主体。
授权主体即需要添加权限的RAM用户。
选择权限策略。
权限策略是一组访问权限的集合,分为两种:
系统策略:由阿里云创建,策略的版本更新由阿里云维护,用户只能使用不能修改。更多信息,请参见支持RAM的云服务。
自定义策略:由用户管理,策略的版本更新由用户维护。用户可以自主创建、更新和删除自定义策略。更多信息,请参见创建自定义权限策略。
说明系统会自动标识出高风险系统策略(例如:AdministratorAccess、AliyunRAMFullAccess等),授权时,尽量避免授予不必要的高风险权限策略。
如需为 RAM 用户配置云消息队列 RabbitMQ 版的细粒度权限,可参考以下示例创建自定义策略,并将其中的占位值替换为实际值。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "amqp:*" ], "Resource": [ "acs:amqp:*:*:instance/<实例ID>/vhost/<Vhost名称>" ] } ] }参数说明:
参数
说明
<实例ID>替换为实际的实例 ID,例如
amqp-cn-xxx123456。可在云消息队列 RabbitMQ 版控制台的实例列表页面查看。<Vhost名称>替换为需要授权的 Vhost 名称,例如
default。如需授权到 Queue 级别,将 Resource 格式改为:
acs:amqp:*:*:instance/<实例ID>/vhost/<Vhost名称>/queue/<Queue名称>其中
<Queue名称>替换为需要授权的具体 Queue 名称(如event_task_result_query)。如果 RAM 用户完成授权后仍出现访问异常,可参考以下常见场景排查。
场景一:.NET SDK 连接报 BrokerUnreachableException 或 InstanceNotServing
前提:已确认网络连通正常(可 Telnet 实例接入地址和端口)。
排查步骤:检查 RAM 用户是否拥有目标实例和 Vhost 的操作权限。请参考上方自定义策略示例,确认 Resource 中的
<实例ID>和<Vhost名称>与实际访问的实例一致,并重新为 RAM 用户添加自定义权限策略。场景二:延迟队列消费中断或消息堆积,报 AccessDeniedByRamPolicy
排查步骤:检查 RAM 用户是否拥有对应实例、Vhost 及具体 Queue 的操作权限。请参考 Queue 级别的 Resource 格式(
acs:amqp:*:*:instance/<实例ID>/vhost/<Vhost名称>/queue/<Queue名称>),为需要访问的 Queue(如event_task_result_query、event_task_status)分别添加操作权限。单击确认新增授权。
单击关闭。
后续步骤
企业A的员工的RAM用户可以通过以下方式访问企业A的云消息队列 RabbitMQ 版。
控制台
在浏览器打开RAM用户登录入口。
在RAM用户登录页面,输入RAM用户名称,单击下一步,输入RAM用户密码,然后单击登录。
说明RAM用户登录名称的格式为<$username>@<$AccountAlias>或<$username>@<$AccountAlias>.onaliyun.com。<$AccountAlias>为账号别名,如果没有设置账号别名,则默认值为阿里云账号的ID。
API
在代码中使用RAM用户的AccessKey ID和AccessKey Secret调用API访问云消息队列 RabbitMQ 版。