0x00 前言

无论是创建IAM User的时候,还是在配置Policy的时候,都可以看到Policy中的Condition中是有一个aws:SourceIp属性的。

0x01 如何写这个Polciy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "*",
"Resource": "*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "54.222.xxx.xxx/32"
}
}
}
]
}

aws:SourceIp键对应的值修改为办公网出口IP即可(保险起见要确定出口IP是固定不变的,而不是采用的动态IP)。

那你可能就要说了,如果我有多个IP段那该咋整呢?简单,可以跟着这个Policy改改就行了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "*",
"Resource": "*",
"Condition": {
"ForAnyValue:IpAddress": {
"aws:SourceIp": [
"54.222.xxx.xxx/32",
"192.168.1.1"
]
}
}
}
]
}

上述Policy可同时限制CLI和console。

0x02 Policy 参数解读

在上面的示例Policy中,有几个参数还是比较有价值的,一一解读一下ForAnyValue、IpAddress、aws:SourceIp:

  1. ForAnyValue,只要有一个值在符合要求,那就是符合要求
  2. IpAddress,IP地址,支持普通的地址格式、CIDR格式
  3. aws:SourceIp,请求的客户端IP

0x03 总结

额,这种直接测一下就行了,生产环境上头还是先测测,确认可行再上生产。

0x04 参考链接

[1] Creating a Condition with Multiple Keys or Values, https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html
[2] Request, https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-request