限制访问应用程序负载平衡器的最佳方法是什么?

时间:2018-12-10 23:13:37

标签: aws-api-gateway aws-security-group aws-load-balancer

理想情况下,我想锁定我的ALB,以便只能由API Gateway对其进行访问。

我研究了是否可以将API网关与入站规则关联-但是,我发现API网关不能与IP地址或安全组关联。我还研究了面向内部的ALB,但由于VPC链接仅支持NLB,因此无法使它们正常工作。

任何帮助将不胜感激-我一直在“网关设置”中查找,但找不到此选项。

什么是最好的方法,以便尽可能限制ALB?

3 个答案:

答案 0 :(得分:3)

API网关目前没有静态IP,并且ALB目前不提供除Cognito用户池之外的任何身份验证。因此,我要说最好的选择是在提议时将VPC链接与Network Load Balancer一起使用,并将请求通过NLB传输到ALB。

或者,您可以在VPC内有一个Lambda来调用ALB,但这会慢很多,但是对于小批量交易却便宜一些,因为您跳过了NLB。

答案 1 :(得分:3)

使用WAF验证在API GW上设置的自定义HTTP标头值

在API GW HTTP集成方法的“集成请求”处注入自定义HTTP标头。按照Amazon API Gateway API request and response data mapping reference中的说明使用静态值

“ STATIC_VALUE”。 STATIC_VALUE是字符串文字,必须用一对单引号引起来。

enter image description here

与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关联。

enter image description here

# 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