【发布时间】:2021-10-06 01:15:04
【问题描述】:
有一个要求,我必须创建一个 Cloudformation 堆栈集,该堆栈集将在多个 AWS 区域中创建一个 S3 存储桶。
但这里的问题是我想将所有 AWS 区域的所有 S3 存储桶中的 IP 地址列入白名单,并且每个 AWS 区域的 IP 地址都不同。
所以,我定义了多个参数,这些参数将从用户那里获取一个 IP 地址。我还为其 AWS 区域定义了一个条件。因此,假设通过 stackset 部署的堆栈位于 us-east-1 区域,那么 us-east-1 的条件将返回 true。现在,我在 S3 存储桶策略中给出“!if”语句,以便如果堆栈部署在 us-east-1 区域中,则将执行特定的 is 语句。
以下是 S3 存储桶策略条件:-
Condition:
NotIpAddress:
aws:SourceIp:
- !If [IsUSEast1, !Ref S3IPAddressUSEast1ToWhitelist, !Ref "AWS::NoValue"]
- !If [IsUSEast2, !Ref S3IPAddressUSEast2ToWhitelist, !Ref "AWS::NoValue"]
- !If [IsUSWest1, !Ref S3IPAddressUSWest1ToWhitelist, !Ref "AWS::NoValue"]
- !If [IsUSWest2, !Ref S3IPAddressUSWest2ToWhitelist, !Ref "AWS::NoValue"]
- !If [IsEUCentral1, !Ref S3IPAddressEUCentral1ToWhitelist, !Ref "AWS::NoValue"]
- !If [IsEUWest1, !Ref S3IPAddressEUWest1ToWhitelist, !Ref "AWS::NoValue"]
正如您在上面看到的,如果正在部署的 Cloudformation 堆栈位于 us-east-1 区域,则将执行第一个“!if”语句,并将使用“S3IPAddressUSEast1ToWhitelist”参数。但这在我的情况下不起作用,似乎“aws:SourceIp”只允许执行一个“!if”语句。我还尝试了各种其他方法,例如映射,但在这里我们不能使用 !Ref 函数将我们的参数分配给映射。
如果有人可以帮助解决这个问题,我会很高兴。
【问题讨论】:
标签: amazon-s3 amazon-cloudformation amazon-iam