简而言之,我试图完成的是以下内容:
- 我想创建一个 WAF 条件/规则组合来阻止不在国家白名单中的流量。
- 我想使用 CloudFormation,以便可以对其进行版本控制并轻松部署到不同的环境。
- 我想将它与现有的 CloudFront 分配相关联(这是环境之间的不同之处)。理想情况下,无需重建 CloudFront 分配。
这似乎很简单,可以在 Web 控制台中设置,但 CloudFormation API 似乎更受限制?
我能够获得“WAFRegional” GeoMatchSet
,Rule
并且WebACL
部署良好。然后,当尝试将其与现有的 CloudFront 分配相关联时,似乎我想要使用的不是“WAFRegional”类型,而只是“WAF”类型。但是没有GeoMatchSet
“WAF”的API?
AWSTemplateFormatVersion: 2010-09-09
Resources:
# Match Sets
GeoMatchSetWhitelist:
Type: "AWS::WAFRegional::GeoMatchSet"
Properties:
Name: "GeoMatchSet for whitelist countries"
GeoMatchConstraints:
-
Type: "Country"
Value: "CA"
-
Type: "Country"
Value: "US"
ByteMatchSetLoginURIs:
Type: "AWS::WAFRegional::ByteMatchSet"
Properties:
Name: "ByteMatchSet for Login URIs"
ByteMatchTuples:
-
FieldToMatch:
Type: "URI"
TargetString: "/my/uri"
TextTransformation: "NONE"
PositionalConstraint: "EXACTLY"
# Rules
WhitelistRule:
Type: "AWS::WAFRegional::Rule"
Properties:
Name: "WhitelistRule"
MetricName: "WhitelistRule"
Predicates:
-
DataId:
Ref: "GeoMatchSetWhitelist"
# True here means match everying NOT in this match set
Negated: true
Type: "GeoMatch"
-
DataId:
Ref: "ByteMatchSetLoginURIs"
Negated: false
Type: "ByteMatch"
# Web Access Control Lists
WebACL:
Type: "AWS::WAFRegional::WebACL"
Properties:
Name: "WhitelistWebACL"
DefaultAction:
Type: "ALLOW"
MetricName: "WebACL"
Rules:
-
Action:
Type: "BLOCK"
Priority: 2
RuleId:
Ref: "WhitelistRule"
# Web ACL Association
WebACLAssociation:
Type: "AWS::WAF::WebACLAssociation"
Properties:
ResourceArn:
Ref: "arn:aws:cloudfront::999999999999:distribution/AAAAAAAAAAAA"
WebACLId:
Ref: "WebACL"
运行上面的代码给了我错误An error occurred (ValidationError) when calling the CreateChangeSet operation: Template format error: Unresolved resource
dependencies [arn:aws:cloudfront::999999999999:distribution/AAAAAAAAAAAA] in the Resources block of the template
。
最后,是否可以使用带有 、 和现有 CloudFront 分配的 CloudFormation 来构建GeoMatchSet
它ByteMatchSet
?