微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 AWS Cloudformation 中如何在 s3 存储桶策略的 NotIpAddress 条件中使用多个 if 语句

如何解决在 AWS Cloudformation 中如何在 s3 存储桶策略的 NotIpAddress 条件中使用多个 if 语句

一个要求,我必须创建一个 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 函数将我们的参数分配给映射。

如果有人能帮助解决这个问题,我会很高兴。

解决方法

您应该为此使用 CloudFormation 地图:

Mappings: 
  IPAddresses: 
    us-east-1: 
      IP: 0.0.0.0
    us-east-2: 
      IP: 1.1.1.1.
    [...]: 
      IP: ...

然后您可以使用

检索值
!FindInMap [IPAddresses,!Ref "AWS::Region",IP]

可以在here找到更多信息。

(编辑)

如果您想使用参数作为 IP 地址的值,您可以简单地使用单个参数并根据您的部署位置覆盖参数值。可以在 here 中找到更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。