理想情况下,我想锁定我的ALB,以便只能由API Gateway对其进行访问。
我研究了是否可以将API网关与入站规则关联-但是,我发现API网关不能与IP地址或安全组关联。我还研究了面向内部的ALB,但由于VPC链接仅支持NLB,因此无法使它们正常工作。
任何帮助将不胜感激-我一直在“网关设置”中查找,但找不到此选项。
什么是最好的方法,以便尽可能限制ALB?
答案 0 :(得分:3)
API网关目前没有静态IP,并且ALB目前不提供除Cognito用户池之外的任何身份验证。因此,我要说最好的选择是在提议时将VPC链接与Network Load Balancer一起使用,并将请求通过NLB传输到ALB。
或者,您可以在VPC内有一个Lambda来调用ALB,但这会慢很多,但是对于小批量交易却便宜一些,因为您跳过了NLB。
答案 1 :(得分:3)
在API GW HTTP集成方法的“集成请求”处注入自定义HTTP标头。按照Amazon API Gateway API request and response data mapping reference中的说明使用静态值。
“ STATIC_VALUE”。 STATIC_VALUE是字符串文字,必须用一对单引号引起来。
与AWS文档一样,是否应该“ integration.request.header”令人困惑。格式。如果在AWS控制台中进行设置,则无需键入“ integration.request.header”。仅输入标题名称。确保标题值为单引号
但是,当使用CDK或CFN之类的工具时,则需要“ integration.request.header”。部分。
cdk_api_method: aws_apigateway.Method = cdk_api_resource.add_method(
http_method="post",
integration=aws_apigateway.HttpIntegration(
url=url,
http_method="post",
proxy=True,
options=aws_apigateway.IntegrationOptions(
request_parameters={
"integration.request.header.{}".format(HTTP_HEADER_X_VALIDATION_CLIENT_NAME): "'{}'".format(HTTP_HEADER_X_VALIDATION_CLIENT_VALUE)
}
)
)
)
设置WAF以验证HTTP标头值,并将ALB与WAF ACL关联。
# https://github.com/aws-samples/wafv2-json-yaml-samples/blob/master/JSON/rule-001.json
aws_wafv2.CfnWebACL.RuleProperty(
name='header-x-validation-client',
action=aws_wafv2.CfnWebACL.RuleActionProperty(
allow={}
),
statement=aws_wafv2.CfnWebACL.StatementOneProperty(
byte_match_statement=aws_wafv2.CfnWebACL.ByteMatchStatementProperty(
field_to_match=aws_wafv2.CfnWebACL.FieldToMatchProperty(
single_header={
"Name": HTTP_HEADER_X_VALIDATION_CLIENT_NAME
}
),
positional_constraint="EXACTLY",
search_string=HTTP_HEADER_X_VALIDATION_CLIENT_VALUE,
text_transformations=[
aws_wafv2.CfnWebACL.TextTransformationProperty(
priority=0,
type="NONE"
)
]
)
),
visibility_config=aws_wafv2.CfnWebACL.VisibilityConfigProperty(
sampled_requests_enabled=True,
cloud_watch_metrics_enabled=True,
metric_name='waf-rule-header-x-validation-client'
),
priority=0
)
答案 2 :(得分:0)
根据使用情况,一种可能性是使用客户端SSL证书保护后端而不是ALB的安全。 Generate and Configure an SSL Certificate for Backend Authentication