Como ligar a rede local de uma empresa externa ao Private API Gateway através do AWS Direct Connect

Arquitetura geral | Rotas DNS e HTTPS | AWS Direct Connect | Route 53 Resolver | Private API Gateway | Segurança e diagnóstico

É importante notar aqui: esta não é uma “cadeia de proxy em série” pela qual todo o tráfego passa em sequência.

Na verdade, está dividido em dois processos independentes:

  1. Caminho de resolução DNS : Responsável pela resolução do nome de domínio privado no IP privado do VPC Endpoint.
  2. Caminho de acesso HTTPS : depois de o cliente obter o IP privado, acede diretamente ao Interface VPC Endpoint através do Direct Connect e, em seguida, transfere-o para o Private API Gateway através do AWS PrivateLink.

2. Estrutura geral

Os exemplos seguintes utilizam a região de Tóquio, ap-northeast-1.


rede externa da empresa
172.20.0.0/16
│
├─Cliente empresarial
│ curl / Java / Postman / Sistema empresarial
│
├─ DNS externo da empresa
│ Encaminhamento condicional:
│    api.partner.example.com
│           ↓
│    10.20.10.10
│    10.20.20.10
│
└─ Router corporativo externo
     BGP
      │
      │ AWS Direct Connect
      ▼
Direct Connect Location
      │
      ▼
Direct Connect Gateway
      │
      ├─ Private VIF → VGW
      │ ou
      └─ Transit VIF → Transit Gateway
                         │
                         ▼
                    AWS VPC
                    10.20.0.0/16
                         │
          ┌──────────────┴──────────────┐
          │                             │
          ▼                             ▼
Route 53 Resolver                Interface VPC Endpoint
Inbound Endpoint                 com.amazonaws.ap-northeast-1.execute-api
UDP/TCP 53                       TCP 443
10.20.10.10                      10.20.11.x
10.20.20.10                      10.20.21.x
          │                             │
          ▼                             │
Route 53 Private Hosted Zone            │
partner.example.com                     │
          │                             │
api.partner.example.com                 │
      Alias → VPC Endpoint ─────────────┘
                                        │
                                        ▼
                            API Gateway Private Domain
                                        │
                              Domain Access Association
                                        │
                                        ▼
                              API Mapping / Base Path
                                        │
                                        ▼
                              Private REST API Gateway
                                        │
                                        ▼
                         Lambda / AWS Service / VPC Link
                

O Route 53 Resolver Inbound Endpoint recebe pedidos de DNS da rede local, enquanto a Private Hosted Zone guarda os registos de nomes de domínio privados; Interface VPC Endpoint é o ponto de entrada real para os fluxos de dados HTTPS no API Gateway.

3.º Como flui uma solicitação completa?

Suponha que um sistema externo da empresa solicita:


https://api.partner.example.com/v1/orders
                

1. Processo de resolução de DNS

O cliente solicita primeiro à empresa externa o seu DNS interno:


Qual é o IP de api.partner.example.com?
                

Encaminhamento condicional configurado no DNS empresarial externo:


partner.example.com
    → 10.20.10.10
    → 10.20.20.10
                

Estes dois IPs são os IPs de endpoint de entrada do Route 53 Resolver na AWS VPC.

A solicitação de DNS vai:


DNS externo da empresa
→ Direct Connect
→ Transit Gateway/VGW
→ Resolver Inbound Endpoint
→ Route 53 VPC Resolver
→ Private Hosted Zone
                

Existe na zona alojada privada:


api.partner.example.com
    A Alias
    → vpce-xxxxxxxx.execute-api.ap-northeast-1.vpce.amazonaws.com
                

O que é finalmente devolvido não é o IP público do API Gateway, mas sim o IP privado da Interface VPC Endpoint ENI, por exemplo:


10.20.11.45
10.20.21.82
                

O IP do endpoint de entrada é um IP privado da VPC, pelo que a rede local deve ser encaminhada para a VPC através do Direct Connect ou VPN. A AWS exige que cada endpoint do Resolver seja configurado com pelo menos dois IPs e é recomendado colocá-los em zonas de disponibilidade diferentes.

2. Processo de acesso HTTPS

Após o término do DNS, o cliente estabelece o TCP 443 para o IP privado do VPC Endpoint resolvido:


cliente
→ Direct Connect
→ TGW/VGW
→ VPC Endpoint ENI:443
→ AWS PrivateLink
→ API Gateway Private Custom Domain
→ API Mapping
→ Private REST API
                

Aqui, o Route 53 Resolver não participa no encaminhamento HTTPS de . É apenas responsável pela resolução DNS anterior.

O API Gateway privado só pode ser acedido através do VPC Endpoint de interface do API Gateway, e a política de recursos da API também deve permitir o VPC ou o VPC Endpoint especificado.

4.º Por que razão existe cada serviço?

1. AWS Direct Connect

função

O Direct Connect fornece uma ligação de linha privada entre a rede empresarial externa e a AWS.

É principalmente responsável por:

  • Encaminhar o segmento de rede privada de uma empresa externa para uma AWS VPC.
  • Liberte o segmento de rede AWS VPC para empresas externas.
  • Aloja solicitações de DNS.
  • Hospeda pedidos de API HTTPS.
  • Evite o tráfego comercial que passa pela Internet pública.
  • Fornece largura de banda e latência relativamente estáveis.

Pelo que a Direct Connect não é responsável

A Direct Connect em si não é responsável por:

  • Resolução DNS.
  • Autenticação API.
  • Autorização API.
  • Certificado TLS.
  • Encaminhamento do API Gateway.
  • Encripte automaticamente todos os links.

O Direct Connect é um “circuito privado”, mas não pode ser simplesmente equiparado a um “circuito encriptado de ponta a ponta”. Quando for necessária a encriptação de ligação, considere o MACsec quando houver suporte ou sobreponha VPN/IPsec site a site no Direct Connect. O modo must_encrypt do MACsec interrompe a transmissão se a encriptação não puder ser estabelecida; should_encrypt pode recorrer à comunicação não encriptada em caso de falha.

2. Route 53 Resolver Inbound Endpoint

função

Permita que os próprios servidores DNS de empresas externas consultem o DNS na AWS VPC.

Sem ele, o DNS local da empresa externa não pode ser consultado diretamente:

  • Route 53 Private Hosted Zone。
  • Nome DNS privado interno da VPC.
  • Registos privados relacionados com o VPC Endpoint.

Após a criação do Inbound Endpoint, será criada uma ENI na sub-rede especificada e será atribuído um IP privado fixo. O DNS da empresa externa encaminha os pedidos de nomes de domínio correspondentes para estes IPs.

Porque é que não posso perguntar diretamente ao DNS VPC+2 da VPC?

Os endereços DNS comuns na VPC são semelhantes:


VPC CIDR:10.20.0.0/16
VPC Resolver:10.20.0.2
                

Mas a rede externa não deve utilizar o 10.20.0.2 directamente como um servidor DNS normal. O ponto de entrada padrão para redes híbridas é o Resolver Inbound Endpoint.

3. Route 53 Private Hosted Zone

função

Guarde os nomes de domínio privados e os registos correspondentes, por exemplo:


Private Hosted Zone:
partner.example.com

Record:
api.partner.example.com
    A Alias
    → execute-api Interface VPC Endpoint
                

A zona alojada privada só entra em vigor para a VPC associada e consultas inseridas através do endpoint de entrada do resolvedor correspondente. Não há necessidade de expor o endereço API real ao DNS público.

4. Interface VPC Endpoint

Nome do serviço:


com.amazonaws.ap-northeast-1.execute-api
                

função

Interface VPC Endpoint é a entrada privada do Private API Gateway dentro do VPC.

Cria uma ENI em cada sub-rede da zona de disponibilidade selecionada:


AZ-a:10.20.11.45
AZ-c:10.20.21.82
                

Os pedidos HTTPS de empresas externas acabam por chegar a estes ENIs e entrar no API Gateway através do AWS PrivateLink.

O ponto final da interface suporta:

  • Security Group。
  • VPC Endpoint Policy。
  • Múltiplas zonas de disponibilidade.
  • Nome DNS privado.
  • IPv4, IPv6 ou pilha dupla, dependendo do serviço e da configuração.

A AWS recomenda que o Interface Endpoint selecione várias sub-redes para melhorar a disponibilidade.

5. API Gateway Private Custom Domain

Por exemplo:


api.partner.example.com
                

Resolve dois problemas:

Endereço de chamada amigável

Não há necessidade de utilizar:


https://a1b2c3d4-vpce123.execute-api.ap-northeast-1.amazonaws.com/prod
                

Em vez disso, utilize:


https://api.partner.example.com/v1
                

Certificado TLS

O API Gateway é baseado no TLS SNI:


api.partner.example.com
                

Selecione o certificado ACM correspondente.

Deve ser criado entre o domínio personalizado privado e o VPC Endpoint:


Domain Name Access Association
                

Caso contrário, mesmo que o DNS aponte para o Endpoint, o API Gateway não permitirá que o Endpoint utilize esse nome de domínio privado.

6. Private API Gateway

Private API Gateway é a entrada final da API.

Pode continuar a integrar:

  • Lambda。
  • Serviços AWS.
  • Back-end HTTP.
  • Ligue-se aos serviços ALB/NLB e intra-VPC através do VPC Link.

API privada não significa que "qualquer pessoa através da linha dedicada possa chamá-la". Existem também pelo menos as seguintes camadas de autorização:


VPC Endpoint Security Group
VPC Endpoint Policy
Private Domain Resource Policy
Private API Resource Policy
Autenticação ao nível do método API
Certificação de negócios de back-end
                

A política de recursos da API privada pode restringir as fontes através de aws:SourceVpce ou aws:SourceVpc. A AWS recomenda especificar explicitamente um VPC ou VPC Endpoint em vez de permitir todas as origens.

5. Endereço recomendado e planeamento de recursos

Um exemplo específico é dado abaixo.

Projeto Exemplo
AWS Region ap-northeast-1
AWS VPC 10.20.0.0/16
Segmento de rede externa da empresa 172.20.0.0/16
Sub-rede A do endpoint do resolvedor 10.20.10.0/24
Sub-rede C do endpoint do resolvedor 10.20.20.0/24
Resolver IP A 10.20.10.10
Resolver IP C 10.20.20.10
execute-api Endpoint sub-rede A 10.20.11.0/24
execute-api Endpoint sub-rede C 10.20.21.0/24
Nome de domínio privado api.partner.example.com
Private Hosted Zone partner.example.com
API Stage prod
Base Path v1

Recomenda-se separar o Resolver Endpoint e o Interface Endpoint numa sub-rede dedicada para facilitar:

  • Configure o NACL de forma independente.
  • Registos de fluxo separados.
  • Identifique os custos.
  • Controlo independente de encaminhamento e grupos de segurança.
  • Substituição ou expansão subsequente.

6. Fase Um: Configuração da Ligação Direta

Cenário A: apenas um VPC

Pode usar:


Direct Connect
→ Private VIF
→ Direct Connect Gateway
→ Virtual Private Gateway
→ VPC
                

O VIF privado é utilizado principalmente para aceder a VPC através de IP privado. Ao criar, precisa de definir parâmetros como VLAN, BGP ASN do cliente, BGP Peer IP e MTU.

Opção B: várias VPCs ou centro de rede partilhado

Recomendado:


Direct Connect
→ Transit VIF
→ Direct Connect Gateway
→ Transit Gateway
→ Shared Services VPC
                

Este é um design mais comum em ambientes corporativos porque pode ser seguido por:

  • DNS VPC。
  • API VPC。
  • VPC empresarial.
  • Verificação de segurança VPC.

Acesso unificado ao Transit Gateway.

O Transit VIF é utilizado para ligar ao Transit Gateway associado ao Direct Connect Gateway; os prefixos permitidos do Direct Connect Gateway afetam os prefixos do lado da AWS publicados na rede local.

Passos de configuração do Direct Connect

1. Estabeleça uma ligação física ou alojada

Pode ser:

  • Dedicated Connection。
  • Ligação alojada fornecida por parceiros.

Os ambientes formais de produção empresarial devem evitar ter apenas um link. O modelo de alta disponibilidade da AWS recomenda a utilização de ligações redundantes de diferentes dispositivos e diferentes locais do Direct Connect, e pode utilizar o Resiliency Toolkit para testar o failover do BGP.

2. Crie um gateway de ligação direta

Por exemplo:


Name: dxgw-partner-api
Amazon side ASN: 64520
                

3.º Crie um gateway de trânsito

Por exemplo:


TGW ASN: 64530
                

Anexe o VPC onde a API está localizada ao TGW.

4.º Associar Gateway DX e TGW

Os prefixos permitidos precisam de ser definidos, por exemplo:


10.20.0.0/16
                

Não publique aleatoriamente:


0.0.0.0/0
10.0.0.0/8
                

A não ser que este seja um web design explicitamente avaliado.

5.º Crie trânsito VIF

Os principais parâmetros incluem:


VLAN: 120
Customer ASN: 65010
AWS ASN: de DXGW
Customer Peer IP: 169.254.x.x/30
AWS Peer IP: 169.254.x.x/30
Chave BGP MD5: gerada ou especificada automaticamente
MTU: 1500 ou 8500
                

6. Configure o router local

Publique localmente na AWS:


172.20.0.0/16
                

Lançamentos da AWS para locais:


10.20.0.0/16
                

7.º Configure a tabela de encaminhamento TGW

O lado AWS requer, pelo menos:


172.20.0.0/16
    → Direção da associação Direct Connect Gateway/TGW
                

A tabela de rotas de sub-rede API VPC requer:


172.20.0.0/16
    → Transit Gateway
                

O router empresarial externo requer:


10.20.0.0/16
    → Direct Connect
                

Erros mais comuns do Direct Connect

A rota está configurada apenas num sentido

Por exemplo:


As empresas externas podem ir até 20.10.11.45
Mas a AWS não sabe como voltar ao 172.20.0.0/16
                

O resultado é normalmente um tempo limite de ligação TCP.

Sobreposição CIDR

Por exemplo:


Empresa externa: 10.20.0.0/16
AWS VPC:10.20.0.0/16
                

Esta situação não pode ser resolvida por encaminhamento comum. Geralmente requer:

  • Planeie novamente o endereço.
  • NAT。
  • Agente intermediário.
  • Arquitetura baseada em serviços PrivateLink.

MTU inconsistente

O VIF privado pode utilizar 1500 ou 9001, o Transit VIF pode utilizar 1500 ou 8500. Antes de ativar o Jumbo Frame, certifique-se de que o router do cliente, o operador, a ligação DX, o TGW e os equipamentos intermédios o suportam. Caso contrário, os pedidos pequenos podem ser normais e os pedidos grandes podem ficar bloqueados.

7. Fase 2: Criar endpoint de entrada do Route 53 Resolver

1. Crie um grupo de segurança

Por exemplo:


sg-r53-inbound
                

Regras de entrada:


UDP 53
Fonte: Servidor DNS externo da empresa IP/32

TCP 53
Fonte: Servidor DNS externo da empresa IP/32
                

Por exemplo:


UDP 53  ← 172.20.1.10/32
UDP 53  ← 172.20.1.11/32
TCP 53  ← 172.20.1.10/32
TCP 53  ← 172.20.1.11/32
                

Não abra apenas o UDP 53. O TCP pode ser utilizado nas seguintes situações:

  • A resposta do DNS é demasiado grande.
  • DNSSEC。
  • Tente novamente após o truncamento do UDP.
  • Comportamento de alguns produtos DNS internos.

A AWS exige explicitamente que o grupo de segurança Inbound Endpoint permita o TCP e o UDP 53.

2. Criar endpoint de entrada

Caminho da consola:


Route 53
→ Resolver
→ Inbound endpoints
→ Create inbound endpoint
                

Configurações recomendadas:


Name: r53-inbound-partner-api
VPC: vpc-api-shared
Endpoint category: Default
Protocol: Do53
Security Group: sg-r53-inbound
                

Configure duas AZ:


AZ-a
Subnet: subnet-dns-a
IP: 10.20.10.10

AZ-c
Subnet: subnet-dns-c
IP: 10.20.20.10
                

A AWS exige um mínimo de dois IPs e recomenda estar em zonas de disponibilidade diferentes; estes IPs permanecem inalterados durante a vida útil do Endpoint.

3. Encaminhamento condicional de configuração de DNS de empresa externa

Exemplo de DNS do Windows:


Conditional Forwarder:
partner.example.com

Master Servers:
10.20.10.10
10.20.20.10
                

Exemplo de BIND:


zone "partner.example.com" {
    type forward;
    forward only;
    forwarders {
        10.20.10.10;
        10.20.20.10;
    };
};
                

Recomenda-se encaminhar apenas o nome de domínio preciso:


partner.example.com
                

Não configure desnecessariamente:


.
com
example.com
                

Caso contrário, um grande número de consultas DNS irrelevantes poderá ser encaminhado para a AWS.

4.º Verifique o link DNS

Teste o IP do AWS Resolver diretamente:


dig @10.20.10.10 api.partner.example.com
                

Em seguida, passe o teste normal de DNS da empresa externa:


dig api.partner.example.com
                

Na fase inicial, quando a Zona Alojada Privada não tiver sido criada, poderá ser devolvido NXDOMAIN, o que pelo menos comprova que o pedido chegou ao Resolvedor.

8. Fase 3: Criar VPC Endpoint da interface execute-api

1. Crie um grupo de segurança Endpoint

Por exemplo:


sg-vpce-execute-api
                

Regras de entrada:


TCP 443
Source: 172.20.0.0/16
                

Quando é mais rigoroso, apenas o segmento de rede do sistema empresarial é permitido:


TCP 443
Source: 172.20.10.0/24
                

Não cometa o erro de pensar que apenas permitir o CIDR de VPC é suficiente. O chamador está localizado numa rede externa da empresa. A origem vista pelo VPC Endpoint é geralmente o IP privado original da empresa externa, pelo que o segmento de rede correspondente deve ser permitido.

A AWS exige que o grupo de segurança execute-api Endpoint permita o tráfego HTTPS 443.

2. Criar ponto final

Caminho da consola:


VPC
→ Endpoints
→ Create endpoint
                

Selecione:


Service category: AWS services
Service:
com.amazonaws.ap-northeast-1.execute-api

Type:
Interface
                

Configuração:


VPC: vpc-api-shared
Subnets:
  subnet-endpoint-a
  subnet-endpoint-c

Security Group:
  sg-vpce-execute-api

Private DNS:
  Enabled
                

Recomenda-se selecionar pelo menos duas zonas de disponibilidade. Apenas uma sub-rede pode ser selecionada para cada AZ selecionada, e a AWS criará um Endpoint ENI em cada sub-rede.

Exemplo de CLI da AWS:


aws ec2 create-vpc-endpoint \
  --region ap-northeast-1 \
  --vpc-id vpc-0123456789abcdef0 \
  --vpc-endpoint-type Interface \
  --service-name com.amazonaws.ap-northeast-1.execute-api \
  --subnet-ids subnet-aaa subnet-ccc \
  --security-group-ids sg-0123456789abcdef0 \
  --private-dns-enabled
                

3. Impacto da alteração do DNS privado

Depois de ativar o DNS privado execute-api:


*.execute-api.ap-northeast-1.amazonaws.com
                

Dentro desta VPC, o VPC Endpoint será resolvido em primeiro lugar.

É mais conveniente chamar o nome de domínio padrão da API privada, mas também tem efeitos colaterais:

  • Ao aceder ao URL execute-api padrão do API Gateway público numa VPC, pode ser resolvido para Private Endpoint.
  • Por conseguinte, a API pública pode não estar acessível através do nome de domínio padrão.
  • É melhor utilizar o seu próprio domínio personalizado regional para a API de rede pública.

A documentação da AWS recorda claramente que após a ativação do DNS privado do endpoint execute-api, o acesso à API pública através do endpoint padrão na VPC pode ser afetado.

9. Fase 4: Criar API REST privada

1. Crie API

Consola:


API Gateway
→ Create API
→ REST API
→ Build
                

Selecione:


Endpoint type: Private
IP address type: Dualstack
VPC Endpoint IDs: vpce-xxxxxxxx
                

Gateway de API privado aqui refere-se ao endpoint privado da API REST. Pode associar diretamente o VPC Endpoint execute-api ao criá-lo. Uma vez associado, o API Gateway gera o nome DNS de chamada relacionado com o API ID e o Endpoint ID.

Exemplo de CLI:


aws apigateway create-rest-api \
  --region ap-northeast-1 \
  --name partner-private-api \
  --endpoint-configuration '{
    "types":["PRIVATE"],
    "ipAddressType":"dualstack",
    "vpcEndpointIds":["vpce-0123456789abcdef0"]
  }'
                

2.º Crie recursos e métodos

Por exemplo:


/
└── orders
    ├── GET
    └── POST
                

Ou:


/health
/orders
/orders/{orderId}
                

Depois de configurar o Lambda ou outra integração, implemente em:


Stage: prod
                

3. API Resource Policy

Recomenda-se permitir apenas o Endpoint especificado:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*"
    },
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-0123456789abcdef0"
        }
      }
    }
  ]
}
                

O significado desta forma de escrever é:

  1. Em princípio, as chamadas são permitidas.
  2. Mas, desde que o Endpoint de origem não seja o Endpoint especificado, será explicitamente rejeitado.

A AWS fornece exemplos de políticas de recursos de API privadas baseadas em aws:SourceVpce e aws:SourceVpc.

Depois de modificar a política de recursos, a API terá de ser reimplementada.

10.º Passo: Certificado e Domínio Privado Personalizado

1.º Prepare o certificado ACM

O certificado deve abranger:


api.partner.example.com
                

E o certificado deve estar localizado na região onde se encontra o API Gateway, por exemplo:


ap-northeast-1
                

Pode usar:


api.partner.example.com
                

ou quando adequado:


*.partner.example.com
                

O domínio personalizado privado suporta certificados curinga, mas não o próprio nome de domínio personalizado curinga; os nomes de domínio privados utilizam sempre o TLS 1.2.

Problemas importantes com os certificados públicos ACM

Mesmo que o nome de domínio seja utilizado apenas para a intranet, o ACM ainda terá de verificar a propriedade do nome de domínio ao solicitar um certificado público do ACM.

Os registos de verificação DNS devem ser detetáveis pelo ACM a partir do DNS público. A simples colocação do CNAME na zona alojada privada do Route 53 não pode concluir a verificação do certificado público do ACM.

Assim, uma abordagem mais segura é:

  • Utilize um subdomínio de nome de domínio público que seja realmente propriedade da empresa, como por exemplo api.partner.example.com.
  • Coloque apenas CNAME verificado pelo ACM no DNS público.
  • O registo A da API real é colocado apenas na zona alojada privada.
  • O DNS da rede pública não tem de publicar o endereço real da API.

2.º Crie um domínio privado personalizado

Consola:


API Gateway
→ Custom domain names
→ Add domain name
                

Configuração:


Domain name:
api.partner.example.com

Endpoint type:
Private

Routing mode:
API mappings only

ACM Certificate:
Certificado que cobre api.partner.example.com
                

Após a criação, o API Gateway irá configurar inicialmente uma política que nega todo o acesso ao nome de domínio e requer autorização manual para especificar o VPC Endpoint.

Exemplo de CLI:


aws apigateway create-domain-name \
  --region ap-northeast-1 \
  --domain-name api.partner.example.com \
  --certificate-arn arn:aws:acm:ap-northeast-1:111122223333:certificate/xxxxxxxx \
  --security-policy TLS_1_2 \
  --endpoint-configuration '{"types":["PRIVATE"]}' \
  --policy file://domain-policy.json
                

11. Política de Recursos de Domínio Privado

O próprio domínio privado também deve permitir que o VPC Endpoint seja especificado.

domain-policy.json


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*"
    },
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-0123456789abcdef0"
        }
      }
    }
  ]
}
                

Eis um ponto muito fácil de ignorar:

Para que um pedido seja bem-sucedido, pelo menos o seguinte deve ser verdadeiro:


A Política de Domínio Privado permite
A política de API privada permite
A política VPC Endpoint permite
A autenticação ao nível de método permite
                

A AWS exige explicitamente API privada e domínio personalizado privado para configurar políticas de recursos separadamente.

12.º Passo: Criar mapeamento de API

Por exemplo, a esperança:


https://api.partner.example.com/v1/orders
                

Mapas para:


API: partner-private-api
Stage: prod
Base Path: v1
                

Consola:


API Gateway
→ Custom domain names
→ api.partner.example.com
→ API mappings
→ Configure mappings
                

Configurações:


API: partner-private-api
Stage: prod
Path: v1
                

CLI:


aws apigateway create-base-path-mapping \
  --region ap-northeast-1 \
  --domain-name api.partner.example.com \
  --domain-name-id abcd1234 \
  --rest-api-id a1b2c3d4 \
  --stage prod \
  --base-path v1
                

O domínio personalizado privado deve ser mapeado para API privada e estágio específico através de mapeamento de API ou regras de encaminhamento.

13.º Passo: Criar associação de acesso a nomes de domínio

Esta é a etapa mais facilmente perdida na arquitetura do Domínio Personalizado Privado.

Precisa de construir:


Private Custom Domain
        ↕
execute-api VPC Endpoint
                

Consola:


API Gateway
→ Custom domain names
→ api.partner.example.com
→ Resource sharing
→ Domain name access associations
→ Create
                

Selecione:


Domain ARN:
arn:aws:apigateway:ap-northeast-1:111122223333:
/domainnames/api.partner.example.com+domain-id

VPC Endpoint:
vpce-0123456789abcdef0
                

CLI:


aws apigateway create-domain-name-access-association \
  --region ap-northeast-1 \
  --domain-name-arn \
  arn:aws:apigateway:ap-northeast-1:111122223333:/domainnames/api.partner.example.com+abcd1234 \
  --access-association-source vpce-0123456789abcdef0 \
  --access-association-source-type VPCE
                

Pode demorar cerca de 15 minutos para que a adesão fique disponível após a sua criação, e também pode demorar um pouco para a criação do próprio Domínio Privado Personalizado ou para a atualização do certificado.

14.º Estágio: Configurar a política VPC Endpoint

Controlo de política de endpoint:

Não é recomendado manter o Acesso Total durante longos períodos de tempo.

Por exemplo, apenas o Domínio e a API podem ser especificados:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-api:ap-northeast-1:111122223333:/domainnames/api.partner.example.com+abcd1234",
        "arn:aws:execute-api:ap-northeast-1:111122223333:a1b2c3d4/*"
      ]
    }
  ]
}
                

Também pode utilizar execute-api:viaDomainArn para restringir o acesso apenas ao domínio personalizado privado especificado. A AWS dá um exemplo de restrição da política de endpoint VPC por nome de domínio privado, API e método.

Notas de cabeçalho de autorização

A Endpoint Policy avalia primeiro o cabeçalho Authorization do pedido:

  • Sem autorização: Avaliado pelo realizador anónimo.
  • SigV4 correto: identificado como o principal do IAM.
  • Erro SigV4: Rejeição direta.
  • Bearer Token/JWT: a política de endpoint é geralmente ainda avaliada com base no principal anónimo.

Assim, se a camada de negócio utilizar o autorizador OAuth/JWT/Lambda, não solicite por engano um utilizador IAM na política de endpoint, caso contrário, os pedidos JWT legítimos poderão ser bloqueados pela política de endpoint.

15.º Passo: Criar zona alojada privada e registos de alias

1. Crie uma zona alojada privada

Recomendado para criar:


partner.example.com
                

e associe uma VPC contendo os seguintes recursos:

  • Resolver Inbound Endpoint。
  • execute-api VPC Endpoint。

Pelo menos a zona alojada privada deve estar associada à VPC onde se encontra o endpoint de entrada, para que o resolvedor possa utilizar a zona alojada para responder a consultas externas.

CLI:


aws route53 create-hosted-zone \
  --name partner.example.com \
  --caller-reference "$(date +%s)" \
  --hosted-zone-config Comment="Partner private API",PrivateZone=true \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-0123456789abcdef0
                

2. Crie registos de Alias

Consola:


Route 53
→ Hosted zones
→ partner.example.com
→ Create record
                

Configuração:


Record name:
api

Record type:
A

Alias:
On

Route traffic to:
Alias to VPC endpoint

Region:
ap-northeast-1

Endpoint:
vpce-0123456789abcdef0
                

O destino do alias do Route 53 do domínio personalizado da API privada deve ser o VPC Endpoint da interface execute-api, e não o Lambda, o ID da API ou o Resolver Endpoint.

Exemplo de registo CLI:


{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "api.partner.example.com",
        "Type": "A",
        "AliasTarget": {
          "DNSName": "vpce-0123456789abcdef0.execute-api.ap-northeast-1.vpce.amazonaws.com",
          "HostedZoneId": "VPC_ENDPOINT_HOSTED_ZONE_ID",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
                

Então:


aws route53 change-resource-record-sets \
  --hosted-zone-id Z0123456789ABCDEFG \
  --change-batch file://api-alias.json
                

Caso o Endpoint utilize IPv6 ou Dualstack, adicione registos AAAA de acordo com a necessidade real.

16.º O que é que a empresa externa precisa de configurar?

As empresas externas normalmente apenas necessitam de acesso às seguintes informações.

Informações de rede


Segmento de rede de destino da AWS:
10.20.0.0/16

Acordo:
DNS UDP/TCP 53
HTTPS TCP 443
                

Informações DNS


Domínio de encaminhamento:
partner.example.com

DNS alvo:
10.20.10.10
10.20.20.10
                

Informações da API


Base URL:
https://api.partner.example.com/v1

Verificação de saúde:
GET /health

API de negócio:
GET /orders
POST /orders
                

Informações de certificação

Depende do design, por exemplo:

  • OAuth2/JWT。
  • API Gateway Lambda Authorizer。
  • AWS IAM SigV4。
  • Assinatura HMAC.
  • Cognito Token。
  • Nome de utilizador/palavra-passe comercial, não recomendado para utilização isoladamente.
  • A chave API é apenas adequada para medição e plano de utilização e não deve ser utilizada como a única autenticação de segurança.

A API privada não suporta atualmente a função TLS mútua do API Gateway, pelo que a autenticação de certificado bidirecional B2B não pode ser configurada diretamente de acordo com o método mTLS da API regional da rede pública. Pode utilizar o IAM SigV4, JWT/Lambda Authorizer, verificação de certificados da camada de aplicação ou redesenhar a camada de proxy front-end.

17. Camada completa de controlo de segurança

Recomenda-se dividir os controlos em seis camadas.

Camada 1: Encaminhamento Direct Connect

Publique apenas os segmentos de rede necessários:


Empresa externa → AWS:
10.20.0.0/16

AWS → Empresa externa:
172.20.10.0/24
                

Tente não publicar segmentos inteiros da rede empresarial entre si.

Segunda camada: grupo de segurança do Resolver Endpoint

Apenas os servidores DNS oficiais de empresas externas são permitidos:


UDP/TCP 53
172.20.1.10/32
172.20.1.11/32
                

Não permita que todos os clientes consultem o Resolvedor diretamente.

A terceira camada: grupo de segurança execute-api Endpoint

Apenas os segmentos de rede de origem do sistema comercial são permitidos:


TCP 443
172.20.10.0/24
                

Camada 4: Política VPC Endpoint

Permitido apenas:


Especifique o domínio privado
Especifique a API
Especifique o método ou o estágio
                

Camada 5: Política de domínio e recursos de API

Também passou:


aws:SourceVpce
                

Limite o endpoint especificado.

Quando necessitar de restringir ainda mais os IPs de origem externos, a política de recursos da API privada pode ser utilizada:


aws:VpcSourceIp
                

Uma vez que o VPC Endpoint pode reescrever o IP de origem da camada de rede, o aws:VpcSourceIp é utilizado para determinar o endereço de origem do pedido original.

Nível 6: Certificação ao nível do método e ao nível do negócio

Por exemplo:


OAuth2 Access Token
JWT Claims
Partner ID
Scope
Permissões de encomenda
Frequência de chamada
auditoria empresarial
                

Estar acessível através da rede não significa que a empresa tenha acesso.

18. Pontos-chave a ter em conta no design do DNS

1. Split-Horizon DNS

Suponha que a empresa externa já é gerida internamente:


example.com
                

A AWS cria novamente:


Private Hosted Zone: example.com
                

Depois podem ocorrer conflitos de autoridade e DNS divididos.

É mais recomendado dividir os subdomínios dedicados:


aws-api.example.com
partner-api.example.com
private.example.com
                

Em seguida, reencaminhe apenas condicionalmente este subdomínio.

2. Erro de associação de zona alojada privada

se:


Endpoint do resolvedor em VPC-A
A zona alojada privada está associada apenas ao VPC-B
                

O endpoint de entrada pode não resolver a zona alojada como esperado.

A forma mais simples é:


Private Hosted Zone
Associe também a VPC onde se encontra o Resolver Endpoint
E o VPC onde se encontra o endpoint execute-api
                

É mais fácil se ambos estiverem na mesma VPC.

3. Não grave o IP do Resolver no registo A da empresa

Erro:


api.partner.example.com
A → 10.20.10.10
                

10.20.10.10 é um servidor DNS, não um servidor API.

Correto:


api.partner.example.com
A Alias → execute-api VPC Endpoint
                

4. TTL e cache

Assim que o registo da zona alojada privada for alterado, o DNS empresarial externo e os clientes poderão continuar a utilizar a cache.

Ao testar pode:


dig api.partner.example.com
                

Observe o TTL e limpe:

  • Cache DNS do Windows.
  • Cache Linux systemd-resolved.
  • Cache DNS JVM Java.
  • Cache DNS empresarial.

19. Projeto de alta disponibilidade

Direct Connect

Para ambientes de produção, considere, pelo menos:


DX Connection A
DX Connection B
dispositivos diferentes
Melhor localização DX diferente
                

e prepare:


Site-to-Site VPN Backup
                

Utilize os atributos BGP para controlar os ativos e em espera.

Resolver Inbound Endpoint

Pelo menos duas AZ:


10.20.10.10
10.20.20.10
                

O DNS externo é configurado com dois encaminhadores ao mesmo tempo.

Cada IP do Resolver Endpoint pode lidar com um grande número de consultas; A documentação atual da AWS refere que um único IP pode lidar com aproximadamente 10.000 UDP DNS QPS quando as condições são adequadas, mas a capacidade real é afetada pelo tamanho da consulta, protocolo, latência de resposta e rastreio de ligação do grupo de segurança.

Interface VPC Endpoint

Pelo menos duas AZ:


Endpoint ENI A
Endpoint ENI C
                

O Route 53 Alias irá devolver o endereço do endpoint correspondente.

A AWS também recomenda claramente que o domínio personalizado privado utilize VPC Endpoints em pelo menos duas zonas de disponibilidade.

API Gateway

O API Gateway em si é um serviço de alojamento regional e não requer a implementação de instâncias ativas e em espera no estilo EC2. No entanto, o back-end ainda precisa de ser considerado separadamente:

  • Simultaneidade lambda.
  • VPC Link。
  • A ALB/NLB tem múltiplas AZs.
  • A base de dados possui várias AZs.
  • Recuperação de catástrofes entre regiões.

20. Monitorização e registo

Recomenda-se ativar pelo menos os seguintes itens.

Direct Connect

Monitorizar:


ConnectionState
VirtualInterfaceBpsIngress
VirtualInterfaceBpsEgress
VirtualInterfacePpsIngress
VirtualInterfacePpsEgress
Estado do BGP
                

E execute o teste de failover BGP para confirmar se a ligação de cópia de segurança pode realmente assumir o controlo. O AWS Resiliency Toolkit suporta a verificação de rotas redundantes fechando temporariamente a sessão BGP.

Route 53 Resolver

Ativar:


Resolver Query Logging
CloudWatch Resolver Endpoint Metrics
                

Consultar os registos pode ajudar a confirmar:

  • Se foi recebida uma consulta de nome de domínio.
  • De que VPC vem a consulta.
  • Tipo de consulta.
  • Retornar resultados.

É de notar que as consultas repetidas atingidas pela cache do Resolver geralmente não aparecem no registo de consultas como cada consulta independente.

VPC

Ativar:


VPC Flow Logs
                

Destaques:

  • Resolver Endpoint ENI。
  • execute-api Endpoint ENI。
  • Tráfego relacionado com o TGW.
  • ACCEPT/REJECT。
  • IP de origem, IP de destino, porta.

API Gateway

Ativar:


Access Logs
Execution Logs
Detailed Metrics
AWS X-Ray, on-demand
                

Recomenda-se que os registos de acesso contenham, pelo menos:


$requestId
$context.identity.sourceIp
$context.domainName
$context.httpMethod
$context.resourcePath
$context.status
$context.responseLength
$context.integrationErrorMessage
                

21. Sequência de teste padrão

Não execute apenas curl inicialmente, teste por camada.

Passo 1: Verifique o BGP e o encaminhamento

O router externo confirma que aprendeu:


10.20.0.0/16
                

O lado da AWS confirma que aprendeu:


172.20.0.0/16
                

Passo 2: testar o endpoint do resolvedor diretamente


dig @10.20.10.10 api.partner.example.com A
dig @10.20.20.10 api.partner.example.com A
                

Passo 3: passar no teste formal de DNS por uma empresa externa


dig api.partner.example.com A
                

O IP privado do Endpoint deve ser devolvido.

Passo 4: teste TCP 443


nc -vz api.partner.example.com 443
                

Ou:


telnet api.partner.example.com 443
                

Passo cinco: verifique o certificado TLS


openssl s_client \
  -connect api.partner.example.com:443 \
  -servername api.partner.example.com
                

Verifique:


Subject Alternative Name
Issuer
Validity
TLS version
Certificate chain
                

Passo 6: ligar para o exame de saúde


curl -v https://api.partner.example.com/v1/health
                

Passo 7: ligar com autenticação

Exemplo JWT:


curl -v \
  -H "Authorization: Bearer ${TOKEN}" \
  https://api.partner.example.com/v1/orders
                

Os cenários SigV4 podem utilizar o SDK, a AWS CLI ou a biblioteca de subscrições correspondente que suporta as subscrições.

22. Falhas comuns e métodos de julgamento

1. Tempo limite de pedido DNS

Desempenho:


tempo limite de escavação
                

Verificações prioritárias:


DNS externo para encaminhamento IP do Resolver
Encaminhamento TGW
Encaminhamento de sub-rede VPC
Resolver SG UDP/TCP 53
firewall externo
NACL
                

2. DNS retorna NXDOMAIN

Isto significa que a rede e o servidor DNS podem estar ligados, mas existe um problema com a camada de registo.

Verifique:


Nome da zona alojada privada
Um registo Alias
A zona alojada está associada à VPC
O FQDN consultado está correto?
Existe uma zona alojada de conflito mais específico
                

3. O nome de domínio pode ser resolvido, mas o TCP 443 atinge o tempo limite.

Verifique:


execute-api Endpoint SG
Encaminhamento externo para Endpoint ENI
NACL
Encaminhamento de backhaul TGW
firewall externo
                

4. Incompatibilidade de nome do certificado TLS

Por exemplo, o certificado é:


*.example.com
                

Mas o nome de domínio é:


api.partner.example.com
                

*.example.com cobre apenas uma camada:


api.example.com
                

Geralmente não coberto:


api.partner.example.com
                

Deve ser utilizado:


*.partner.example.com
                

ou certificado exato:


api.partner.example.com
                

5.º Retorno 403 Proibido

Verifique o pedido:


A associação de acesso a nomes de domínio está DISPONÍVEL?
Domain Resource Policy
API Resource Policy
VPC Endpoint Policy
Autorização de método
Assinatura JWT/IAM
API Key/Usage Plan
                

6.º Retornar token de autenticação em falta

Razões comuns:


Erro no caminho base
Erro de mapeamento de estágio
Erro no método HTTP
O caminho do recurso não existe
API não reimplantada
                

Por exemplo, mapeamento real:


/v1 → prod
                

Correto:


https://api.partner.example.com/v1/orders
                

Erro:


https://api.partner.example.com/prod/orders
                

7. O URL execute-api padrão pode ser acedido, mas o domínio personalizado não pode

Pontos-chave a verificar:


Certificado ACM
Estatuto de domínio privado
Domain Resource Policy
Domain Access Association
API Mapping
Route 53 Alias
Host/SNI
                

8.º Pode ser acedido dentro da VPC, mas não por empresas externas.

Geralmente afirmado:


A configuração do API Gateway está basicamente correta
O problema está focado no encaminhamento DX, Endpoint SG ou DNS externo
                

9.As solicitações pequenas são normais, mas as solicitações grandes falham.

Verifique:


MTU
PMTUD
ICMP Fragmentation Needed
firewall intermédio
Jumbo Frame
                

23. Os dez lugares mais facilmente perdidos

  1. Direct Connect não é encriptado automaticamente.
  2. DNS e HTTPS são dois caminhos diferentes.
  3. O endpoint Resolver deve abrir UDP e TCP 53.
  4. A zona alojada Private deve estar associada à VPC onde se encontra o resolvedor.
  5. O destino Alias é o VPC Endpoint execute-api, e não o Resolver.
  6. O grupo de segurança execute-api Endpoint deve permitir o segmento de rede de origem da empresa externa TCP 443.
  7. Política de Domínio Privado e Política de API Privada são duas políticas.
  8. deve criar uma associação de acesso a nomes de domínio.
  9. necessita de ser reimplantado após modificar a associação ou o recurso do Endpoint da API.
  10. O registo de verificação DNS do certificado público ACM deve poder ser consultado no DNS público e não pode ser colocado apenas na zona alojada privada.

24. Configuração de produção final recomendada

A seguinte configuração é recomendada para sistemas B2B formais:


Duas ligações diretas
+ Ligação de backup VPN

Transit VIF
+ Direct Connect Gateway
+ Transit Gateway

VPC autónoma de serviços partilhados

Endpoint de entrada do resolvedor de duas AZ
+ Permitir apenas servidores DNS oficiais UDP/TCP 53

Ponto final da interface execute-api de duas AZ
+ Permitir apenas segmento de rede comercial externa TCP 443

Subdomínio privado dedicado
api.partner.example.com

Private Custom Domain
+ Certificado ACM
+ Domain Access Association

Private Domain Policy
+ API Resource Policy
+ Endpoint Policy
Todas as restrições aws:SourceVpce

Autenticação JWT ou IAM SigV4
+ API Gateway Access Logs
+ Resolver Query Logs
+ VPC Flow Logs
+ Alerta DX CloudWatch
                

O link final pode ser resumido como:


DNS:
DNS externo
→ Direct Connect
→ Resolver Inbound Endpoint
→ Private Hosted Zone
→ Regressar ao IP privado do VPC Endpoint

HTTPS:
Sistema de negócio externo
→ Direct Connect
→ execute-api Interface Endpoint
→ Private Custom Domain
→ API Mapping
→ Private REST API
→ Serviços de back-end