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

总结

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

目录
相关文章
|
7月前
|
弹性计算 安全 API
访问控制(RAM)|凭证安全管理与最佳实践
本文分享将为您介绍从访问云资源的人员/程序身份两种身份类型,介绍云上凭证的认证方式、安全风险及凭证管理的最佳实践。
102840 7
|
7月前
|
机器学习/深度学习 API 数据安全/隐私保护
视觉智能平台常见问题之一直提示ram没有权限但是我在角色中已经有添加相应的权限如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
7月前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
102514 5
|
7月前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
151399 5
|
7月前
|
机器学习/深度学习 API 数据安全/隐私保护
视觉智能平台常见问题之一直提示ram没有权限如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
205 1
|
7月前
|
数据库 数据安全/隐私保护
在阿里云中,访问控制(Resource Access Management,简称RAM)是权限管理系统,主要用于控制账号在阿里云中
在阿里云中,访问控制(Resource Access Management,简称RAM)是权限管理系统,主要用于控制账号在阿里云中
679 3
|
关系型数据库 MySQL API
如何为RAM子账号授予单一RDS实例的访问权限?
在阿里云中,如何为RAM子账号进行精准授权,授予单一RDS实例的访问权限?这篇文档帮到你
62330 0
|
存储 机器学习/深度学习 分布式计算
PAI子账号(RAM用户)创数据集NAS存储相关权限授予Quick Start
机器学习平台PAI(Platform of Artificial Intelligence)是面向企业客户及开发者,提供轻量化、高性价比的云原生机器学习。是构建在阿里云MaxCompute(原ODPS)计算平台之上,集数据处理、建模、离线预测、在线预测为一体的机器学习平台。而高质量的数据集是高精度模型的基础,是数据准备的核心目标。阿里云PAI提供数据集管理模块,支持将各类数据(本地数据、阿里云存储中的数据等)注册为数据集,为智能标注、模型训练做准备。但是很多公司RAM用户虽然可以正常点击创建,然而在填写NAS路径时往往又碰到权限问题。本文简单演示一下NAS存储相关权限授予,以供参考。
258 0
PAI子账号(RAM用户)创数据集NAS存储相关权限授予Quick Start
|
机器学习/深度学习 存储 人工智能
机器学习平台PAI子账号(RAM用户)数据集相关权限授予
机器学习平台PAI(Platform of Artificial Intelligence)是面向企业客户及开发者,提供轻量化、高性价比的云原生机器学习。是构建在阿里云MaxCompute(原ODPS)计算平台之上,集数据处理、建模、离线预测、在线预测为一体的机器学习平台。而高质量的数据集是高精度模型的基础,是数据准备的核心目标。阿里云PAI提供数据集管理模块,支持将各类数据(本地数据、阿里云存储中的数据等)注册为数据集,为智能标注、模型训练做准备。但是很多公司RAM用户在创建及管理数据集过程中因为对平台比较陌生常常会遇到权限相关问题,本文介绍创建过程中常见的一个权限问题,以供参考。
301 0
机器学习平台PAI子账号(RAM用户)数据集相关权限授予
|
6月前
|
敏捷开发 Web App开发 测试技术
阿里云云效产品使用问题之钉钉绑定主帐号和RAM 有什么区别么
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。

热门文章

最新文章