AWS Builder Center
Construindo um Servidor MCP Serverless na AWS com Autenticação IAM

Construindo um Servidor MCP Serverless na AWS com Autenticação IAM

Aprenda a implantar um servidor MCP baseado em Lambda por tras do API Gateway com autenticacao SigV4, conecta-lo ao Kiro CLI via mcp-proxy-for-aws e consultar o DynamoDB usando suas credenciais AWS existentes.

AWS Solutions Architect

Introdução

Assistentes de código com IA se tornam muito mais poderosos quando conseguem acessar os dados internos da sua empresa. Em vez de responder apenas com base nos dados de treinamento, eles podem consultar bancos de dados reais, recuperar documentação interna e fornecer respostas contextualizadas com base nos seus sistemas reais.
O Model Context Protocol (MCP)  padroniza como agentes de IA se conectam a fontes de dados externas. Neste artigo, exploramos a arquitetura de um servidor MCP serverless na AWS que expõe um banco de dados DynamoDB através do API Gateway e Lambda, protegido com autenticação IAM. Em seguida, conectamos o Kiro CLI  a esse servidor usando o mcp-proxy-for-aws , permitindo que o assistente de IA consulte dados internos usando as mesmas credenciais AWS que você já utiliza no dia a dia.
O código-fonte completo — infraestrutura Terraform, função Lambda, scripts de seed e configuração do agente Kiro CLI — está disponível no GitHub: https://github.com/biagolini/TerraformAwsMcpServerlessKiroCli 
Se você prefere aprender lendo código, clone o repositório e siga o README. Este artigo foca no porquê e no como por trás da arquitetura.
Este artigo faz parte de uma série explorando as capacidades do Kiro CLI. Artigos anteriores cobriram desenvolvimento orientado a especificações , confiança de ferramentas , segredos MCP com macOS Keychain , .kiroignore e solução de problemas de terminal  e múltiplas janelas .

Arquitetura da Solução

A arquitetura segue um padrão totalmente serverless com autenticação baseada em IAM:
Diagrama mostrando o fluxo de comunicação entre Kiro CLI, mcp-proxy-for-aws, API Gateway HTTP API com autenticação IAM SigV4, função Lambda e tabela DynamoDB em uma arquitetura serverless
Visão geral da arquitetura da solução mostrando como o Kiro CLI se conecta ao servidor MCP serverless através do mcp-proxy-for-aws, que assina requisições com SigV4 para autenticação IAM no API Gateway, encaminhando para o Lambda que consulta o DynamoDB
O fluxo da requisição quando um desenvolvedor pergunta "Mostre-me os SUVs disponíveis":
  1. Kiro CLI envia a mensagem para o modelo de linguagem
  2. O modelo decide chamar a ferramenta MCP search_cars_by_type
  3. Kiro CLI encaminha a chamada da ferramenta para o processo mcp-proxy-for-aws
  4. O proxy assina a requisição HTTP com SigV4 usando as credenciais AWS locais
  5. API Gateway HTTP API valida a assinatura e verifica as permissões IAM
  6. Lambda processa a requisição MCP e consulta o DynamoDB
  7. Os resultados retornam pela mesma cadeia de volta ao Kiro CLI
  8. O modelo formata os dados em uma resposta legível para o usuário
Todo o ciclo leva de 1 a 3 segundos, incluindo o cold start do Lambda na primeira invocação.

Por que Autenticação IAM?

Servidores MCP tradicionais frequentemente usam chaves de API ou tokens OAuth. A autenticação IAM oferece vantagens distintas para ambientes nativos AWS:
  • Zero credenciais adicionais — desenvolvedores já possuem credenciais AWS configuradas para o trabalho diário
  • Controle de acesso unificado — as mesmas políticas IAM que controlam o acesso aos recursos AWS também controlam o acesso ao servidor MCP
  • Rotação automática de credenciais — o AWS SSO fornece credenciais temporárias que rotacionam automaticamente
  • Universal — roles de instância EC2, roles de tarefa ECS, roles de execução Lambda e laptops de desenvolvedores usam o mesmo mecanismo
  • Auditável — cada requisição é registrada no CloudTrail com a identidade do chamador
Para equipes corporativas, isso significa nenhum gerenciamento separado de tokens, nenhum segredo para rotacionar e nenhuma infraestrutura OAuth para manter.

Como o Servidor MCP Funciona

A função Lambda implementa o transporte MCP Streamable HTTP  usando JSON-RPC 2.0. Ela trata três métodos principais do MCP:
MétodoFinalidade
initializeHandshake — declara as capacidades do servidor
tools/listRetorna as ferramentas disponíveis e seus schemas
tools/callExecuta uma ferramenta e retorna os resultados
O servidor expõe três ferramentas:
FerramentaDescrição
search_cars_by_typeConsulta carros por tipo de carroceria usando um GSI do DynamoDB
get_all_available_carsVarre todo o inventário disponível
get_car_detailsObtém um carro específico pelo ID
Cada ferramenta retorna seu resultado como um bloco de conteúdo JSON text dentro do envelope de resposta padrão do MCP. O modelo de IA então interpreta os dados brutos e os formata para o usuário.

Boas Práticas de Tratamento de Erros

A especificação MCP define o campo isError: true nos resultados de ferramentas para reportar falhas de execução. Quando o servidor retorna uma mensagem de erro clara com essa flag, o modelo de IA naturalmente comunica a falha ao usuário sem necessidade de configuração especial no agente:
1
2
3
4
5
6
{
"result": {
"content": [{"type": "text", "text": "Unauthorized: invalid credentials"}],
"isError": true
}
}
Na nossa arquitetura, requisições não autorizadas são rejeitadas pelo API Gateway antes de chegar ao Lambda (HTTP 403). O mcp-proxy-for-aws propaga essa falha para o Kiro CLI, e a IA reporta ao usuário naturalmente.

Arquitetura de Segurança

Defesa em Profundidade

A solução implementa múltiplas camadas de segurança:
  1. Camada de transporte — o mcp-proxy-for-aws requer credenciais AWS válidas para iniciar. Sem elas, as ferramentas MCP nem aparecem na lista de ferramentas do agente de IA.
  2. Camada do API Gateway — a validação de assinatura SigV4 garante que apenas identidades AWS autenticadas possam alcançar o endpoint.
  3. Camada de política IAM — a permissão execute-api:Invoke controla quais identidades podem chamar a API.
  4. Camada do Lambda — a função tem acesso somente leitura ao DynamoDB (princípio do menor privilégio).

Configuração do Agente como Fronteira de Segurança

Ao configurar o agente do Kiro CLI, restringir tools apenas ao necessário impede que a IA tente contornar quando o servidor MCP não está disponível:
1
2
3
4
{
"tools": ["read", "@cars-inventory"],
"allowedTools": ["read", "@cars-inventory"]
}
Sem acesso ao shell, o agente não pode tentar descobrir credenciais, iterar sobre perfis ou burlar a camada de autenticação. Esta é uma boa prática crítica — sempre limite as ferramentas do agente ao conjunto mínimo necessário.

Padrão de Acesso Universal

O mesmo endpoint funciona para todos os consumidores sem alterações no código:
ConsumidorFonte de Credencial
Laptop do desenvolvedoraws sso login + perfil
Instância EC2Role de instância (automático)
Tarefa ECSRole de tarefa (automático)
Função LambdaRole de execução (automático)
Pipeline CI/CDRole assumida

Visão Geral da Infraestrutura

O código Terraform cria:
RecursoFinalidade
Tabela DynamoDBInventário de carros com hash key car_id e GSI body_type
Função LambdaPython 3.12, lógica do servidor MCP
Role IAMExecução do Lambda com acesso somente leitura ao DynamoDB
API Gateway HTTP APIRota POST /mcp com autorização AWS_IAM
A infraestrutura segue uma estrutura modular: infrastructure/ contém o módulo Terraform reutilizável, environments/dev/ contém a configuração específica do ambiente. O estado é armazenado remotamente no S3.
Para o código Terraform completo, veja o repositório no GitHub .

Deploy e Teste

Pré-requisitos

  • AWS CLI  configurado com um perfil
  • Terraform  >= 1.0
  • uv  gerenciador de pacotes
  • Kiro CLI 
  • Conta AWS com permissões para criar DynamoDB, Lambda, API Gateway e recursos IAM

Deploy

Clone o repositório e navegue até a pasta do ambiente dev:
1
2
git clone https://github.com/biagolini/TerraformAwsMcpServerlessKiroCli.git
cd TerraformAwsMcpServerlessKiroCli/environments/dev
Copie os arquivos de configuração de exemplo e preencha com seu bucket S3, região e perfil AWS:
1
2
cp backend.hcl.example backend.hcl
cp terraform.tfvars.example terraform.tfvars
Inicialize o Terraform com a configuração do backend:
1
terraform init -backend-config=backend.hcl
Faça o deploy da infraestrutura:
1
terraform apply -auto-approve

Popular o Banco de Dados

Defina seu perfil AWS:
1
export AWS_PROFILE=seu-perfil
Execute o script de seed para popular o DynamoDB com dados de exemplo:
1
./seed/seed_cars.sh

Conceder Acesso à API

Anexe esta política à identidade IAM que consumirá o servidor MCP:
1
2
3
4
5
6
7
8
9
10
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:<regiao>:<account-id>:<api-id>/*"
}
]
}
O api-id é exibido como output pelo Terraform.

Teste: Comparação Lado a Lado

Abra dois terminais lado a lado para demonstrar a autenticação IAM em ação.
Terminal 1 — Com credenciais válidas:
1
2
3
4
aws sso login --sso-session nome-da-sua-sessao
export AWS_PROFILE=seu-perfil-aws
cd test/
kiro-cli chat --agent cars-agent
Terminal 2 — Sem credenciais:
1
2
3
# NÃO defina AWS_PROFILE
cd test/
kiro-cli chat --agent cars-agent
Em ambos os terminais, execute /tools para verificar as ferramentas disponíveis:
Dois terminais lado a lado executando o comando /tools no Kiro CLI - o terminal da esquerda com credenciais válidas mostra 4 ferramentas disponíveis (read mais 3 ferramentas MCP) enquanto o terminal da direita sem credenciais mostra apenas 1 ferramenta (read)
Demonstração de que sem credenciais AWS válidas o mcp-proxy-for-aws não inicia e as ferramentas MCP não aparecem na lista de ferramentas do agente, comprovando que a autenticação IAM atua na camada de transporte
Esquerda: com credenciais válidas — 4 ferramentas disponíveis (read + 3 ferramentas MCP). Direita: sem credenciais — apenas 1 ferramenta (read). As ferramentas MCP nem carregam sem credenciais AWS válidas.
Em seguida, pergunte "Mostre-me todos os SUVs disponíveis" em ambos os terminais:
Dois terminais lado a lado onde o usuário pergunta sobre SUVs disponíveis - o terminal da esquerda com credenciais válidas retorna dados reais do inventário (Toyota RAV4, Chevrolet Tahoe, Ford Explorer) enquanto o terminal da direita sem credenciais informa que as ferramentas MCP não estão disponíveis
Resultado prático da autenticação IAM - com credenciais válidas o agente chama search_cars_by_type e retorna dados reais do DynamoDB, enquanto sem credenciais o agente reporta que não pode atender à solicitação por falta de acesso às ferramentas MCP
Esquerda: o agente chama search_cars_by_type e retorna dados reais do inventário do DynamoDB. Direita: o agente reporta que as ferramentas MCP não estão disponíveis e não pode atender à solicitação.
Isso demonstra que a autenticação IAM funciona na camada de transporte — sem credenciais válidas, o proxy não inicia, as ferramentas não aparecem e o agente nem consegue tentar acessar os dados.

Considerações para Produção

Escalando para Produção

Esta prova de conceito usa uma tabela DynamoDB simples com ~10 itens. Para produção:
  • Adicione paginação para lidar com grandes conjuntos de dados
  • Implemente cache com DynamoDB DAX ou cache no nível do Lambda
  • Adicione alarmes do CloudWatch para latência e taxas de erro
  • Considere concorrência provisionada para eliminar cold starts

Granularidade do Controle de Acesso

Políticas IAM podem restringir o acesso no nível da rota:
1
2
3
{
"Resource": "arn:aws:execute-api:us-east-1:123456789012:abc123/*/POST/mcp"
}
Você pode criar conjuntos de permissões diferentes para acesso somente leitura versus leitura e escrita se adicionar ferramentas de escrita ao servidor MCP.

Multi-Ambiente

Variáveis do Terraform facilitam o deploy de ambientes isolados:
1
terraform apply -var="environment=prod"
Cada ambiente recebe sua própria tabela DynamoDB, função Lambda e API Gateway.

Conclusão

Construir um servidor MCP serverless na AWS com autenticação IAM cria uma ponte segura e escalável entre assistentes de código com IA e dados internos. Os pontos-chave:
  1. IAM unifica o controle de acesso — a mesma cadeia de credenciais funciona para desenvolvedores, instâncias EC2, tarefas ECS e pipelines CI/CD
  2. Defesa em profundidade — validação de credenciais na camada de transporte, SigV4 no API Gateway, políticas IAM e roles Lambda com menor privilégio
  3. Restrição de ferramentas do agente é crítica — limitar ferramentas impede que a IA tente contornar quando a autenticação falha
  4. Flag isError do MCP — respostas de erro claras permitem que a IA comunique falhas naturalmente sem configuração especial
O código-fonte completo está disponível em: https://github.com/biagolini/TerraformAwsMcpServerlessKiroCli 

Mantenha-se Conectado

Se você achou este artigo útil e quer aprender mais sobre AWS, arquitetura de nuvem, IA, infraestrutura como código e segurança em nuvem, siga o autor para conteúdos e tutoriais futuros:
Boas construções na AWS!
Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article