使用OOS实现RAM权限审批流授权及自动化撤销授权的概念验证

简介: 本方案通过阿里云OOS与ROS联动,实现RAM账户授权自动化。用户申请后由审批人确认,系统自动授予指定策略,并在预设时间后自动撤销权限,提升安全性与管理效率。

我们通常使用第三方软件或自研的方式来实现RAM账户的授权审批流,但是我们如果担心第三方软件泄露,也担心自研安全性无法保证的话,有没有办法实现呢?
用户希望User A申请,User B审批通过后,授权User A特定策略(可以是自定义策略,也可以是系统策略)。然后等待一段时间后(例如1小时)用户操作已完成,自动反授权。
以下是参考文档:
使用OOS审批授权RAM用户(子账号)RAM权限

添加等待及反授权

根据上述文档复制一个OOS出来后,增加等待任务。
我们不能通过复制YAML内授权用户系统策略的Create Stack来实现反授权。因为他是ROS“创建资源栈”,而创建本身不包含这类删除类动作。故而ROS的Create Stack不支持DetachPolicyFromUser的操作,所以你不可以通过复制原模板内的createStack,稍微修改成DetachPolicyFromUser来实现自动撤销授权。
。同时我在直接使用RAM的DetachPolicyFromUser API来实现的时候也报错。原因是后台有白名单机制,不是所有接口都能调。最后我使用了Delete Stack删除资源栈的方式来实现。

资源栈在创建的时候会有一个StackID, 我将这个输出的stackID回填到Delete Stack的stackID参数里,即可将曾经生成的资源栈删除。也就间接实现了DetachPolicyFromUser的结果。同时也感谢上面的示例中直接将该数据输出,如果靠我在控制台编写,我真的无法搞出来。

OOS审批会发URL给钉钉,钉钉机器人上只需要限定内容有"ali"即可。当然你可以在yaml内编辑内容来进行更精细化筛选避免地址被攻击。

权限上执行用户有AliyunROSReadOnlyAccess、AliyunOOSReadOnlyAccess以及ros:CreateStack和ros:DeleteStack即可。他在你权限不够的时候会提示你添加自定义策略的YAML。

相对于原版,我删除了at功能


FormatVersion: OOS-2019-06-01
Description: 审批通过后授权给创建执行的子用户
Parameters:
  policyType:
    Label: 权限策略类型
    Description: 将授予的权限策略类型,可选类型为系统权限或自定义权限
    Type: String
    AllowedValues:
      - Custom
      - System
  policyName:
    Label: 权限策略名称
    Type: String
  approvers:
    Label: 可以审批授权的用户
    Description: 用户名是RAM子用户名称中@前面的部分,比如RAM子用户为user001@companyAlias.onaliyun.com,那么列表中填写user001即可
    Type: List
    AssociationProperty: ALIYUN::RAM::User
  minRequiredApprovals:
    Label: 最低需要通过审批的数量
    Type: Number
    Default: 1
  OOSAssumeRole:
    Label: OOS扮演的RAM角色
    Type: String
    Default: ''
RamRole: '{
   { OOSAssumeRole }}'
Tasks:
  - Name: approveAttachPolicy
    Action: ACS::Approve
    Description: 审批后授权
    Properties:
      NotifyType: WebHook
      WebHook:
        URI: https://oapi.dingtalk.com/robot/send?access_token=abcdedf
        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}}
    Outputs: {
   }
  - Name: checkPolicyExist
    Action: ACS::CheckFor
    Description: 确认权限策略已存在
    Properties:
      Service: RAM
      API: GetPolicy
      PropertySelector: .DefaultPolicyVersion != null|tostring
      DesiredValues:
        - 'true'
      Parameters:
        PolicyType: '{
   { policyType }}'
        PolicyName: '{
   { policyName }}'
        RegionId: ap-southeast-1
    Outputs:
      policyDocumentToAttach:
        Type: Json
        ValueSelector: .DefaultPolicyVersion.PolicyDocument
  - Name: createStack
    Action: ACS::Template
    Description: 通过Ros资源栈为角色授权
    Properties:
      TemplateName: ACS::ROS::CreateStack
      Parameters:
        stackName:
          Fn::Replace:
            - .: _
            - 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"
                  }
                }
              }
            },
            "Metadata": {
              "ALIYUN::ROS::Interface": {
                "TemplateTags": [
                  "acs:integrate:oos:ram_approve_attach_policy_to_user"
                ]
              }
            }
          }
    Outputs:
      stackId:
        Type: String
        ValueSelector: stackId
  - Action: ACS::Sleep
    Name: Sleep
    Description: ''
    Properties:
      Duration: PT1M
    Outputs: {
   }
  - Action: ACS::ROS::DeleteStack
    Name: DeleteStack
    Description: ROS 资源栈删除 - 实现RAM反授权等同DetachPolicyFromUser
    Properties:
      regionId: ap-southeast-1
      stackId: '{
   {createStack.stackId}}'
      retainAllResources: false
    Outputs: {
   }
Outputs:
  statement:
    Type: Json
    Value: '{
   { checkPolicyExist.policyDocumentToAttach }}'
  stackId:
    Type: String
    Value: '{
   {createStack.stackId}}'

其他

ROS_Create_Delete_Stack 自定义策略,用于关联到执行用户,使得用户可以有ROS资源栈创建和删除权限。

{
   
  "Version": "1",
  "Statement": [
    {
   
      "Action": "ram:GetPolicy",
      "Resource": "*",
      "Effect": "Allow"
    },
    {
   
      "Action": [
        "ros:CreateStack",
        "ros:DeleteStack",
        "ros:GetStack"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
   
      "Action": "oos:StartExecution",
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}

ROS模板编写的一些参考
参考AttachPolicyToGroup用处感觉比参考AttachPolicyToUser好。但是实际上我编写OOS,然后嵌入ROS,不成功。算了,等之后空了再研究。
ALIYUN::RAM::AttachPolicyToGroup

相关文章
|
机器学习/深度学习 API 数据安全/隐私保护
视觉智能平台常见问题之一直提示ram没有权限但是我在角色中已经有添加相应的权限如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
190 0
|
弹性计算 运维 监控
带你读《云上自动化运维宝典》——如何使用OOS有效进行云上自动化运维(1)
带你读《云上自动化运维宝典》——如何使用OOS有效进行云上自动化运维(1)
527 0
|
运维 监控
如何使用OOS有效进行云上自动化运维
OOS(运维编排服务)是一种云上自动化运维工具,可以帮助你有效进行云资源的管理和维护。以下是如何使用OOS有效进行云上自动化运维的一些建议: 1. **利用自动化能力**:OOS提供了批量操作、
|
弹性计算 运维 安全
如何使用OOS有效进行云上自动化运维
阿里云弹性计算团队十三位产品专家和技术专家共同分享云上运维深度实践,详细阐述如何利用CloudOps工具实现运维提效、弹性降本。
134769 220
|
关系型数据库 MySQL Shell
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
416 4
|
运维 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之如何授权某个函数计算服务给某个RAM子账号访问
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
机器学习/深度学习 API 数据安全/隐私保护
视觉智能平台常见问题之一直提示ram没有权限如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
347 1
|
域名解析 网络协议 数据安全/隐私保护
DNS解析问题之授权RAM子账号管理指定域名如何解决
DNS解析是指将人类可读的域名转换成机器可读的IP地址的过程,它是互联网访问中不可或缺的一环;本合集将介绍DNS解析的机制、类型和相关问题的解决策略,以确保域名解析的准确性和高效性。
853 1
|
4月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
945 62
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南

热门文章

最新文章