禁止RAM用户创建高危安全组规则

您可以通过授予RAM用户一个或多个包含RAM条件关键字的自定义权限策略,从而限制其创建安全组或添加安全组规则时的操作权限。例如,禁止添加包含对应IP和协议的安全组规则、限制添加的安全组规则范围,或在创建ECS实例时禁止使用默认安全组,从而提升阿里云账号的安全性。本文介绍如何利用RAM条件关键字禁止RAM用户创建高危安全组规则。

背景信息

安全组规则是云上安全隔离的第一道防线和最重要的防线之一。在实际生产实践中,由于ECS安全组规则配置不当,常见的问题包括将敏感端口(如22、3389、80、8080、443)开放0.0.0.0/0,这可能导致云资源(比如ECS、RDS等)遭遇外部攻击者的恶意入侵,从而引发安全事件。

在RAM子账号繁多、权限各有不同且业务需求互有区别的情况下,如何保证新创建的安全组符合自上而下的安全基线和要求,是云上企业安全治理必备的能力。通过在RAM页面统一进行账户配置,即可限制RAM子账户创建和引用存在安全风险的安全组,实现安全组规则的常态化治理。

阿里云提供了用户自定义的RAM权限策略,可以精确地描述被授权的资源集、操作集以及授权条件。对于某些生产账号或敏感账号,可以通过配置RAM权限策略授权RAM用户获得指定的访问权限。如果您需要拦截某些高危的安全组规则,或仅开放部分安全的安全组规则,可以通过配置阿里云账号的权限策略基本元素(RAM Condition)实现。更多信息,请参见条件(Condition)

实现原理

利用RAM条件关键字拦截高风险的安全组规则主要通过以下两种方式实现:

  • 拦截包含特定IP和协议的安全组规则,或仅开放部分安全的安全组规则。

  • 创建ECS实例时,不允许使用默认安全组。

说明

默认安全组包含敏感的安全组规则。更多信息,请参见默认安全组

可选用的RAM条件关键字列表如下所示:

条件关键字

类型

描述

ecs:SecurityGroupIpProtocols

String

传输层协议。例如:TCP、ICMP。

ecs:SecurityGroupSourceCidrIps

String

源端IPv4 CIDR地址段。支持CIDR格式和IPv4格式的IP地址范围。

ecs:NotSpecifySecurityGroupId

Boolean

是否没有指定安全组ID。

说明
  • 当条件关键字的类型为数组时,一条安全组规则匹配到数组中任意一个值即视为条件满足。

  • 当两个条件关键字叠加使用时,满足所有RAM条件关键字的安全组规则视为条件满足。

操作步骤

  1. 创建包含RAM条件关键字的自定义权限策略。具体操作,请参见创建自定义权限策略

    本文以示例二:禁止RAM用户创建包含0.0.0.0/0的安全组规则作为自定义权限策略进行操作演示。

    说明

    有关自定义权限策略示例信息,请参见自定义权限策略示例

  2. 为目标RAM用户授予已创建的自定义权限策略。具体操作,请参见为RAM用户授权

结果验证

  1. 使用对应RAM账号登录ECS管理控制台

  2. 根据已创建的自定义权限策略,完成以下验证步骤,以确保自定义权限策略符合预期目标。

    1. 确保ECS实例所在地域下没有已创建的安全组,然后使用默认安全组创建一台ECS实例。具体操作,请参见自定义购买实例

      说明

      在您创建ECS实例时,如果您还未创建过安全组,阿里云会为您创建一个默认安全组

      若实例购买页弹出以下信息,则表示您已成功禁止该RAM用户在创建ECS实例时使用默认安全组。

      image

    2. 为任一安全组添加授权对象(源IP)为0.0.0.0/0的安全组规则。具体操作,请参见添加安全组规则

      若添加安全组规则失败,并弹出以下信息,则表示您已成功禁止该RAM用户添加授权对象(源IP)为0.0.0.0/0的安全组规则。

      image

自定义权限策略示例

示例一:限制RAM用户添加的安全组规则范围

  • 限制RAM用户只能添加授权对象(源IP)为140.205.XX.XX/27140.205.XX.XX/28的安全组规则,并禁止创建ECS实例时使用默认安全组。

    说明

    请您根据实际业务需求替换XX为指定的IP地址值,以确保权限策略的精确执行。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": [
            "ecs:AuthorizeSecurityGroup",
            "ecs:ConfigureSecurityGroupPermissions",
            "ecs:ModifySecurityGroupRule"
          ],
          "Resource": "*",
          "Condition": {
            "ForAnyValue:StringNotLike": {
              "ecs:SecurityGroupSourceCidrIps": [
                "140.205.XX.XX/27",
                "140.205.XX.XX/28"
              ]
            }
          }
        },
        {
          "Effect": "Deny",
          "Action": [
            "ecs:CreateInstance",
            "ecs:RunInstances"
          ],
          "Resource": "*",
          "Condition": {
            "Bool": {
              "ecs:NotSpecifySecurityGroupId": [
                "true"
              ]
            }
          }
        }
      ]
    }
  • 限制RAM用户只能添加授权对象(源IP)为140.205.XX.XX/27协议类型TCP的安全组规则,并禁止创建ECS实例时使用默认安全组。

    说明

    请您根据实际业务需求替换XX为指定的IP地址值,以确保权限策略的精确执行。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": [
            "ecs:AuthorizeSecurityGroup",
            "ecs:ConfigureSecurityGroupPermissions",
            "ecs:ModifySecurityGroupRule"
          ],
          "Resource": "*",
          "Condition": {
            "ForAnyValue:StringNotLike": {
              "ecs:SecurityGroupSourceCidrIps": [
                "140.205.XX.XX/27"
              ]
            }
          }
        },
        {
           "Effect": "Deny",
           "Action": [
             "ecs:AuthorizeSecurityGroup",
             "ecs:ConfigureSecurityGroupPermissions",
             "ecs:ModifySecurityGroupRule"
            ],
            "Resource": "*",
            "Condition": {
              "ForAnyValue:StringNotLike": {
                "ecs:SecurityGroupIpProtocols": [
                  "TCP"
                ]
              }
            }
          },
          {
            "Effect": "Deny",
            "Action": [
              "ecs:CreateInstance",
              "ecs:RunInstances"
            ],
            "Resource": "*",
            "Condition": {
              "Bool": {
                "ecs:NotSpecifySecurityGroupId": [
                  "true"
                ]
              }
            }
          }
       ]
    }

示例二:禁止RAM用户创建包含0.0.0.0/0的安全组规则

禁止RAM用户添加授权对象(源IP)为0.0.0.0/0的安全组规则,并禁止创建ECS实例时使用默认安全组。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ecs:AuthorizeSecurityGroup",
        "ecs:ConfigureSecurityGroupPermissions",
        "ecs:ModifySecurityGroupRule"
      ],
      "Resource": "*",
      "Condition": {
        "ForAnyValue:StringLike": {
          "ecs:SecurityGroupSourceCidrIps": [
            "0.0.0.0/0"
          ]
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "ecs:CreateInstance",
        "ecs:RunInstances"
      ],
      "Resource": "*",
      "Condition": {
        "Bool": {
          "ecs:NotSpecifySecurityGroupId": [
            "true"
          ]
        }
      }
    }
  ]
}

相关文档