最佳实践-使用OOS审批授权子账号RAM权限

本文涉及的产品
系统运维管理,不限时长
简介: 当通过RAM控制台或OpenApi为RAM用户授权时,权限是即时生效的,这样对于频繁授权或者高权限授予场景来讲,完全没法保障安全性。就此,本文引入一种高效的授权审批保障机制。


背景


当通过RAM控制台或OpenApi为RAM用户授权时,权限是即时生效的,这样对于频繁授权或者高权限授予场景来讲,完全没法保障安全性。就此,本文引入一种高效的授权审批保障机制,即运维编排(OOS)的审批授权存在的权限审批授权未存在的权限。通过参考这两个模版可创建适用于您的模版,这样贵司的普通用户通过创建执行来申请权限,接着权限管理员用户会收到审批通知,管理员审批通过后,创建执行的普通用户即可获得授权。

准备工作

  • 管理员的RAM账号(用户)。该账号需具备RAM授权的权限策略,该用户名称供设置approvers默认参数时使用,如不具备,可参考创建RAM用户进行创建并通过为RAM用户授权来授予其AliyunRAMFullAccess权限策略。
  • 权限申请者的RAM账号。如还没有,可参考创建RAM用户进行创建,且该账号需具备OOS执行权限,如不具备,可参考用户访问OOS的权限设置。
  • RAM权限策略。对于系统/自定义类型的权限策略均可通过策略管理查询到,如果想授予的是自定义类型权限策略,且其不存在,可参考本文的操作步骤-创建自定义权限策略并授权来完成授权。
  • 一个钉钉群,该群内有具备管理员权限的员工(此权限指员工的阿里云账号权限),由于审批通知要发送到钉钉群中,所以需要从审批管理员所在的某个钉钉群获取WebHookUrl,这样当有人申请权限时,OOS就会调用WebHookUrl来通知管理员进行审批授权。 获取WebHook请参考,钉钉群助手WebHook路径获取。获取到WebHookUrl后请保存好,待后续步骤使用,WebHookUrl形如https://oapi.dingtalk.com/robot/send?access_token=1234zxcvbnm67890

操作步骤

在本文提供两类场景的操作引导,且两类场景对应着两个参考模版。一类是面向已存在权限策略的场景,即系统权限策略和已创建对自定义权限策略的授权。另一类是面向尚不存在权限策略的场景,即自定义策略的创建和授权。

已存在权限策略的授权

如下操作提示中包括三阶段,两类身份,分别对应着权限管理员配置审批授权模版,申请权限的员工申请权限,权限管理员审批授权。

权限管理员

  1. 登录OOS控制台
  2. 单击左上角,确认已切换到目标地域
    image.png
  3. 便于权限申请者创建执行,防止审批信息被误改。此时您需根据的实际情况,修改公共模版,先将审批管理相关信息固定到模版中,并删除其对应的模版参数定义,最后在我的模版中创建模版,下面将介绍如何固定审批信息。
  4. 单击我的模版,单击创建模版,单击公共模版image.png
  5. 在搜索框中输入ACS-RAM-ApproveAttachPolicyToUser ,并选取搜索结果。image.png
  6. 单击YAMLimage.png
  7. 首先修改模版中的approveAttachPolicy任务,将下图红框的参数引用改为固定值。

    • 其中Approvers表示审批管理员的阿里云账号名称,其后面引用的 '{{approvers}}'  请修改成管理员账号的名称,如改成 ['zhangsan'] 。
    • 其中MinRequiredApprovals表示最少需要几个审批者同意后,方审批通过,其后面引用的 '{{minRequiredApprovals}}' 请修改为要求的最低审批通过人数,如改成1 。
    • 其中URI表示webHook的统一资源标识符,其后面引用的'{{webhookUrl}}'请修改为您在准备工作中获取到的webHookUrl,如改成 'https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414' 。
    • 其中atMobiles表示在发送审批通知时,钉钉群内将被@的用户,其后面引用的'{{atMobiles}}'请修改为审批管理员注册钉钉账号使用的手机号码,如改成 ['13812345678']
    • 其中isAtAll表示当发送审批通知时,是否@钉钉群内所有用户,其后面引用的'{{atAll}}'可根据实际需求修改为 false 或者 true ,如改成 falseimage.png
  8. 模版中的approveAttachPolicy任务参数固定后,任务脚本样式如下。
Tasks:
  - Name: approveAttachPolicy
    Action: 'ACS::Approve'
    Description:
      en: Approve task add policy.
      zh-cn: 审批后授权。
    Properties:
      Approvers: ['zhangsan']
      MinRequiredApprovals: 1
      NotifyType: WebHook
      WebHook:
        URI: 'https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414'
        Headers:
          Content-Type: application/json
        Content:
          msgtype: text
          text:
            content: |
              Notice: Please approve the task execution to attach {{policyType}} policy {{policyName}}
              for target user {{ACS::ExecuteUser}}.
              sent by {{ACS::RegionId}} oos {{ACS::ExecutionId}}.
          at:
            atMobiles: ['13812345678']
            isAtAll: false # 请根据您实际情况进行更改
  1. 接下来,请移步到模版的参数部分,将如下截图内选中的,且未被引用的参数定义内容删除掉。image.png
  2. 最终模版的YAML脚本样式如下。
FormatVersion: OOS-2019-06-01
Description:
  en: Attach policy to user that template executed by after approving.
  zh-cn: 审批通过后授权给创建执行的子用户。
  name-en: ACS-RAM-ApproveAttachPolicyToUser
  name-zh-cn: 审批通过后授权给创建执行的子用户
  categories:
    - security
Parameters:
  policyType:
    Description:
      en: 'The ploicy type to add,the optioanl is Custom or System.'
      zh-cn: 将授予的权限策略类型,可选类型为系统权限或自定义权限。
    Type: String
    AllowedValues:
      - Custom
      - System
  policyName:
    Description:
      en: The ploicy to add.
      zh-cn: 将授予的权限策略名称。
    Type: String
  OOSAssumeRole:
    Description:
      en: The RAM role to be assumed by OOS.
      zh-cn: OOS扮演的RAM角色。
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: approveAttachPolicy
    Action: 'ACS::Approve'
    Description:
      en: Approve task add policy.
      zh-cn: 审批后授权。
    Properties:
      Approvers: ['zhangsan']
      MinRequiredApprovals: 1
      NotifyType: WebHook
      WebHook:
        URI: 'https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414'
        Headers:
          Content-Type: application/json
        Content:
          msgtype: text
          text:
            content: |
              Notice: Please approve the task execution to attach {{policyType}} policy {{policyName}}
              for target user {{ACS::ExecuteUser}}.
              sent by {{ACS::RegionId}} oos {{ACS::ExecutionId}}.
          at:
            atMobiles: ['13812345678']
            isAtAll: false # 请根据您实际情况进行更改
  - Name: checkPolicyExist
    Action: 'ACS::CheckFor'
    Description:
      en: Check for the existence of policy.
      zh-cn: 确认权限策略已存在。
    Properties:
      Service: RAM
      API: GetPolicy
      Parameters:
        PolicyType: '{{ policyType }}'
        PolicyName: '{{ policyName }}'
      DesiredValues:
        - 'true'
      PropertySelector: .DefaultPolicyVersion != null|tostring
    Outputs:
      policyDocumentToAttach:
        Type: Json
        ValueSelector: .DefaultPolicyVersion.PolicyDocument
  - Name: createStack
    Action: 'ACS::Template'
    Description:
      en: Attach policy by Ros resource stack.
      zh-cn: 通过Ros资源栈为角色授权。
    Properties:
      TemplateName: 'ACS::ROS::CreateStack'
      Parameters:
        stackName: 'OOS-{{ACS::ExecutionId}}'
        disableRollback: true
        parameters:
          - ParameterKey: PolicyType
            ParameterValue: '{{ policyType }}'
          - ParameterKey: UserName
            ParameterValue: '{{ACS::ExecuteUser}}'
          - ParameterKey: PolicyName
            ParameterValue: '{{ policyName }}'
        templateBody: |
          {
            "Parameters": {
              "PolicyType": {
                "Type": "String",
                "Description": "Authorization policy type. Value: \"System\" or \"Custom\"."
              },
              "UserName": {
                "Type": "String",
                "Description": "User name."
              },
              "PolicyName": {
                "Type": "String",
                "Description": "Authorization policy name."
              }
            },
            "ROSTemplateFormatVersion": "2015-09-01",
            "Outputs": {},
            "Resources": {
              "AttachPolicyToUser": {
                "Type": "ALIYUN::RAM::AttachPolicyToUser",
                "Properties": {
                  "PolicyType": {
                    "Ref": "PolicyType"
                  },
                  "UserName": {
                    "Ref": "UserName"
                  },
                  "PolicyName": {
                    "Ref": "PolicyName"
                  }
                }
              }
            }
          }
    Outputs:
      stackId:
        Type: String
        ValueSelector: stackId
Outputs:
  statement:
    Type: Json
    Value: '{{ checkPolicyExist.policyDocumentToAttach }}'
  stackId:
    Type: String
    Value: '{{createStack.stackId}}'
  1. 完成模版修改,输入模版名称。

本示例命名为copy-ACS-RAM-ApproveAttachPolicyToUser。

  1. 单击创建模版

权限申请者

  1. 登录OOS控制台
  2. 单击左上角,确认已切换到目标地域
  3. 单击我的模版,找到已创建的模版copy-ACS-RAM-ApproveAttachPolicyToUser,单击创建执行
  4. 单击下一步:设置参数。根据实际情况,填写将申请的权限类型policyType和要申请的权限名称policyName

此部分以系统权限AliyunECSReadOnlyAccess为例。
image.png

  1. 单击下一步:确定。
  2. 单击创建执行。创建执行后,您获取WebHook路径的钉钉群中会有审批通知,权限管理员用户可通过该通知审批您的授权申请,若申请通过,您会立即被授权。

权限管理员

  1. 权限申请者创建执行后,您可在其获取WebHook路径钉钉群中查看到审批通知。image.png
  2. 如果您允许授权,则请访问审批通知的link,并单击审批步骤>同意步骤执行>确定image.png
  3. 您可通过执行详情,查看授权任务执行情况,若成功,则创建执行的RAM用户已被授予相应权限。image.png

创建自定义权限策略并授权

如下操作提示中包括三阶段,两类身份,分别对应着权限管理员配置审批授权模版,申请权限的员工申请权限,权限管理员审批授权。

权限管理员

  1. 登录OOS控制台
  2. 单击左上角,确认已切换到目标地域
  3. 便于权限申请者创建执行,防止审批信息被误改。可参考上文将ACS-RAM-ApproveAttachCustomPolicyToUser审批信息固定。
  4. 根据ACS-RAM-ApproveAttachCustomPolicyToUser创建的新模版,本示例命名为copy-ACS-RAM-ApproveAttachCustomPolicyToUser。

权限申请者

  1. 登录OOS控制台
  2. 单击左上角,确认已切换到目标地域
  3. 单击我的模版,找到已创建的模版copy-ACS-RAM-ApproveAttachCustomPolicyToUser,单击创建执行。
  4. 单击下一步:设置参数。根据实际情况,填写将申请的权限JSON脚本policyDocument和权限名称policyName

此部分使用的policyDocument示例脚本如下,其代表ECS的只读权限,关于如何编写权限脚本可参考权限策略语法和结构

{
    "Version": "1",
    "Statement": [
        {
            "Action": "ecs:Describe*",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": "ecs:List*",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "vpc:DescribeVpcs",
                "vpc:DescribeVSwitches"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

image.png

  1. 单击下一步:确定。
  2. 单击创建执行。创建执行后,您获取WebHook路径的钉钉群中会有审批通知,权限管理员用户可通过该通知审批您的授权申请,若申请通过,您会立即被授权。

权限管理员

  1. 权限申请者创建执行后,您可在其获取WebHook路径钉钉群中查看到审批通知。image.png
  2. 如果您允许授权,则请访问审批通知的link,并单击审批步骤>同意步骤执行>确定image.png
  3. 您可通过执行详情,查看授权任务执行情况,若成功,则创建执行的RAM用户已被授予相应权限。image.png

总结

本文提到的两个可参考的模版,可保证授权的可靠性。另外如果您将授予的权限是未创建的,参考审批通过后授予自定义权限给创建执行的子用户模版,可免去授予不存在的自定义权限策略的繁琐操作,您仅需一步创建执行,即可完成授权的所有操作,无需再对控制台中权限策略、用户等点来点去。

目录
相关文章
|
5月前
|
机器学习/深度学习 API 数据安全/隐私保护
视觉智能平台常见问题之一直提示ram没有权限但是我在角色中已经有添加相应的权限如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
4月前
|
运维 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之如何授权某个函数计算服务给某个RAM子账号访问
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5月前
|
机器学习/深度学习 API 数据安全/隐私保护
视觉智能平台常见问题之一直提示ram没有权限如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
196 1
|
5月前
|
域名解析 网络协议 数据安全/隐私保护
DNS解析问题之授权RAM子账号管理指定域名如何解决
DNS解析是指将人类可读的域名转换成机器可读的IP地址的过程,它是互联网访问中不可或缺的一环;本合集将介绍DNS解析的机制、类型和相关问题的解决策略,以确保域名解析的准确性和高效性。
381 1
|
5月前
|
数据库 数据安全/隐私保护
在阿里云中,访问控制(Resource Access Management,简称RAM)是权限管理系统,主要用于控制账号在阿里云中
在阿里云中,访问控制(Resource Access Management,简称RAM)是权限管理系统,主要用于控制账号在阿里云中
611 3
|
11月前
|
关系型数据库 MySQL API
如何为RAM子账号授予单一RDS实例的访问权限?
在阿里云中,如何为RAM子账号进行精准授权,授予单一RDS实例的访问权限?这篇文档帮到你
62224 0
|
4月前
|
敏捷开发 Web App开发 测试技术
阿里云云效产品使用问题之钉钉绑定主帐号和RAM 有什么区别么
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
文字识别 API
印刷文字识别产品使用合集之如何创建RAM用户和阿里云账号的访问密钥
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
5月前
|
云安全 弹性计算 安全
AK泄露了,怎么办?
AccessKey(包含AccessKey ID和Secret)是程序访问的凭证,无异于打开云上资源的大门钥匙,保管好AK是保障云上安全最重要的事情,甚至没有之一。
106300 8
|
5月前
|
缓存 BI
咨询下,阿里云云效ram账号绑定钉钉账号后,手机端看项目,是空的,怎么解决?
咨询下,阿里云云效ram账号绑定钉钉账号后,手机端看项目,是空的,怎么解决?
98 2
下一篇
无影云桌面