问题描述
有一个要求,我必须创建一个 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 函数将我们的参数分配给映射。
如果有人能帮助解决这个问题,我会很高兴。