您可以通过授予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"
]
}
}
}
]
}