定义应用权限策略

最近更新时间:2025-01-13 15:46:22

我的收藏

概述

云应用支持软件进程在运行时角色 调用云 API,通过定义该角色的权限策略,可精细控制进程所拥有的云权限,满足客户对权限管控的需要。典型场景:
校验软件 LICENSE 状态
在应用中访问对象存储 COS 桶,限制只能访问指定的存储桶(比如用户安装时选择的存储桶)。
在应用中对运行资源实施巡检,自动重启故障节点。

方案说明

您只需要在 package.yaml 文件中定义权限策略语法,即可控制应用的权限范围。

声明方式

package.yaml 文件中通过 role.policy 声明权限策略,语法和 CAM 权限策略一致,详情参见 CAM 权限策略语法结构。以下是一个示例:
args:
- name: app_cos
label: 选择存储桶
widget: cos-bucket-select

role:
policy:
version: "2.0"
statement:
# 权限 1:支持 LICENSE 校验
- action:
- cloudapp:VerifyLicense
resource: "*"
effect: allow
# 权限 2:支持重启应用实例标签下的 CVM
- action:
- cvm:RebootInstances
resource: "*"
condition:
"for_any_value:string_equal":
"qcs:tag":
- "CloudappId&${var.cloudapp_id}"
effect: "allow"
# 权限 3:支持访问安装时选中的 COS 存储桶
- action:
- "cos:*"
resource:
- "qcs::cos:${var.app_cos.region}:uid/${var.app_cos.app_id}:${var.app_cos.bucket}/*"
- "qcs::cos:${var.app_cos.region}:uid/${var.app_cos.app_id}:${var.app_cos.bucket}/"
effect: allow
注意:
通过 role.policy 声明权限策略遵循「所见即所得」的原则,运行时角色具有的所有权限都需要在 package.yaml 中显性声明。

在策略语法中使用变量

在策略中支持使用两类变量:系统变量安装参数,上述示例中:
权限 2 的示例中,使用了 var.cloudapp_id 系统变量,实现按标签授权。
权限 3 的实例中,使用了 var.app_cos 安装参数,实现资源级授权。

升级到新的策略语法

建议:
新的权限策略生成方案会向前兼容,原来通过 scopes.cloudAPI 声明的权限依然生效。
新的权限声明语法提供了更精细的权限控制,强烈建议您升级到新的声明语法,通过 role.policy 来声明权限策略。
原来的版本通过 scopes.cloudAPI 声明运行时角色具有的权限,示例如下:
scopes:
cloudAPI:
- cvm:DescribeInstances
以上的声明语法升级后如下:
role:
policy:
version: "2.0"
statement:
- action:
- cvm:DescribeInstances
- cloudapp:VerifyLicense
resource: "*"
effect: allow
升级过程中需要注意:
老版本默认添加 cloudapp:VerifyLicense 接口到权限策略,无需显性声明。新版本中,运行时角色的权限仅包含显性声明的接口,您需要在 role.policy 中显性声明 cloudapp:VerifyLicense,否则应用无法 对接 License
使用新的语法之后,原来的 scopes.cloudAPI 字段需要删除。

完整示例

可以参见 自定义应用权限策略 演示说明。