最佳实践-使用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

总结

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

目录
相关文章
|
6月前
|
弹性计算 安全 API
访问控制(RAM)|凭证安全管理与最佳实践
本文分享将为您介绍从访问云资源的人员/程序身份两种身份类型,介绍云上凭证的认证方式、安全风险及凭证管理的最佳实践。
102795 7
|
5月前
|
运维 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之如何授权某个函数计算服务给某个RAM子账号访问
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
6月前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
102460 5
|
6月前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
151356 5
|
6月前
|
域名解析 网络协议 数据安全/隐私保护
DNS解析问题之授权RAM子账号管理指定域名如何解决
DNS解析是指将人类可读的域名转换成机器可读的IP地址的过程,它是互联网访问中不可或缺的一环;本合集将介绍DNS解析的机制、类型和相关问题的解决策略,以确保域名解析的准确性和高效性。
417 1
|
安全 API 数据安全/隐私保护
阿里云短信服务RAM用户授权Quick Start
短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力。调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。在主账号开通短信服务后,您可以创建RAM用户,并为RAM用户授予不同的权限,提供给您企业的员工用来管理短信服务资源,从而让您避免与其他用户共享云账号密钥,降低您企业的信息安全风险。本文以子账号使用短信服务报错为例,简单介绍主账号授予RAM用户访问使用短信服务的操作步骤,以供参考。
708 1
阿里云短信服务RAM用户授权Quick Start
|
安全
阿里云RAM用户访问用户中心授权Quick Start
用户中心提供用户上云所涉及到的企业财务经营管理全链路能力,包括但不限于企业财务、账号中心、资金管理、卡券管理、账单管理、订单管理、分账管理、发票管理、合同管理、成本管理、资源实例管理、节省计划、SLA赔付等相关服务。目前多数企业在使用云上服务时,出于安全和管理考虑都是使用RAM账号。然而RAM用户常常在控制台进入用户中心查看近期的消费数据时往往遇到无权访问的权限问题。本文简单介绍主账号授予RAM用户访问费用中心的操作步骤,以供参考。
990 1
阿里云RAM用户访问用户中心授权Quick Start
|
安全 Cloud Native 数据可视化
阿里云通信相应服务RAM用户授权Quick Start
通信与每个人息息相关。云通信即基于云计算平台,将传统通信能力进行云化,为客户提供便捷高效的触达能力。在教育行业,“通知”必须在15分钟内到达,而“验证码”则要求在3秒内到达,这对通信的并发跟调度都提出了更高的要求。阿里云云通信采用云原生化的方式,通过低代码、组件化以及可视化编排,为客户提供安全可信、场景化、智能化的定制服务。在主账号开通云通信相应服务后,您可以创建RAM用户,并为RAM用户授予不同的权限,提供给您企业的员工用来管理服务资源,从而让您避免与其他用户共享云账号密钥,降低企业的信息安全风险。本文针对云通信下相应服务授予的RAM权限做一下总结,以便使用过程中可以快速参考引用。
412 0
|
5月前
|
敏捷开发 Web App开发 测试技术
阿里云云效产品使用问题之钉钉绑定主帐号和RAM 有什么区别么
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
文字识别 API
印刷文字识别产品使用合集之如何创建RAM用户和阿里云账号的访问密钥
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。