您可以通过授予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条件关键字的安全组规则视为条件满足。 
操作步骤
- 创建包含RAM条件关键字的自定义权限策略。具体操作,请参见创建自定义权限策略。 - 本文以示例二:禁止RAM用户创建包含0.0.0.0/0的安全组规则作为自定义权限策略进行操作演示。 说明- 有关自定义权限策略示例信息,请参见自定义权限策略示例。 
- 为目标RAM用户授予已创建的自定义权限策略。具体操作,请参见为RAM用户授权。 
结果验证
- 使用对应RAM账号登录ECS管理控制台。 
- 根据已创建的自定义权限策略,完成以下验证步骤,以确保自定义权限策略符合预期目标。 
自定义权限策略示例
示例一:限制RAM用户添加的安全组规则范围
- 限制RAM用户只能添加授权对象(源IP)为 - 140.205.XX.XX/27或- 140.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"
          ]
        }
      }
    }
  ]
}
