一、概述
·校验软件 LICENSE 状态。
·在应用中访问对象存储 COS 桶,限制只能访问指定的存储桶(比如用户安装时选择的存储桶)。
·在应用中对运行资源实施巡检,自动重启故障节点。
二、方案说明
你只需要在 package.yaml 文件中定义权限策略语法,即可控制应用的权限范围。
三、声明方式
在 package.yaml 文件中通过 role.policy 声明权限策略,语法和 CAM 权限策略一致,详情参见 CAM 权限策略语法结构。以下是一个示例:
args: – name: app_cos label: 选择存储桶 widget: cos-bucket-selectrole: policy: version: "2.0" statement: # 权限 1:支持 LICENSE 校验 – action: – cloudapp:DescribeLicense 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 声明运行时角色具有的权限,示例如下:
scopes: cloudAPI: – cvm:DescribeInstances
以上的声明语法升级后如下:
role: policy: version: "2.0" statement: – action: – cvm:DescribeInstances – cloudapp:DescribeLicense resource: "*" effect: allow
升级过程中需要注意:
·老版本默认添加 cloudapp:DescribeLicense 接口到权限策略,无需显性声明。新版本中,运行时角色的权限仅包含显性声明的接口,你需要在 role.policy 中显性声明 cloudapp:DescribeLicense,否则应用无法 对接 License。
·云应用 License 检查接口已升级,如果应用内校验接口已升级,请声明 DescribeLicense,若应用内还在使用 VerifyLicense 接口,则继续声明成 VerifyLicense。
·使用新的语法之后,原来的 scopes.cloudAPI 字段需要删除。
六、完整示例
可以参见 自定义应用权限策略 演示说明。