15

理想情况下,我想锁定我的 ALB,使其只能由 API 网关访问。

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

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

解决此问题的最佳方法是什么,以便尽可能限制 ALB?

4

3 回答 3

5

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

在 API GW HTTP 集成方法的集成请求中注入自定义 HTTP 标头。使用Amazon API Gateway API 请求和响应数据映射参考中所述的静态值

'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
)
于 2020-06-24T09:26:23.610 回答
4

API 网关没有静态 IP,ALB 目前不提供除 Cognito 用户池之外的任何身份验证。因此,我想说您最好的选择是在您提议时使用带有网络负载均衡器的 VPC 链接,并通过 NLB 将请求传送到您的 ALB。

或者,您可以在您的 VPC 中使用 Lambda 调用 ALB,但这会慢很多,但因为您跳过 NLB,所以对于小批量来说更便宜。

于 2018-12-13T22:12:20.557 回答
0

根据用例,一种可能性是使用客户端 SSL 证书保护后端而不是 ALB。 为后端身份验证生成和配置 SSL 证书

于 2020-01-28T16:29:47.070 回答