View a markdown version of this page

Metas do modelo Smithy - Base da Amazônia AgentCore

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Metas do modelo Smithy

Smithy é uma linguagem para definir serviços e kits de desenvolvimento de software (SDKs). Os modelos Smithy fornecem uma abordagem mais estruturada para definir APIs em comparação com o OpenAPI e são particularmente úteis para se conectar a AWS serviços, como o Gateway. AgentCore

Os alvos do modelo Smithy conectam seu AgentCore gateway a serviços que são definidos usando modelos de API da Smithy. Quando você invoca um destino de gateway do modelo Smithy, o gateway traduz as solicitações de MCP recebidas em chamadas de API que são enviadas para esses serviços. O gateway também lida com a formatação da resposta.

Analise as principais considerações e limitações, incluindo o suporte a recursos, para ajudá-lo a decidir se uma meta da Smithy é aplicável ao seu caso de uso. Se estiver, você pode criar um esquema que siga as especificações e, em seguida, configurar as permissões para que o gateway possa acessar o destino. Escolha um tópico para saber mais:

Principais considerações e limitações

Ao usar modelos Smithy com o AgentCore Gateway, esteja ciente das seguintes limitações:

  • Tamanho máximo do modelo: 10MB

  • Somente associações de protocolo JSON são totalmente suportadas

  • Somente o RestJson protocolo é suportado

Ao considerar o uso de modelos Smithy com o AgentCore Gateway, revise a tabela de suporte de recursos a seguir.

Práticas recomendadas de segurança para configuração de terminais

Atenção

Ao definir regras de endpoint e URLs de servidor em seus modelos Smithy, evite usar padrões de parâmetros de URL excessivamente permissivos que possam expor seu gateway a riscos de segurança.

Os modelos Smithy oferecem suporte à configuração dinâmica de endpoints por meio de regras de endpoint e parâmetros de URL. No entanto, certos padrões podem introduzir vulnerabilidades de segurança se não forem restringidos adequadamente. Especificamente, evite usar padrões totalmente dinâmicos, como:

  • Parâmetros irrestritos de host ou domínio em URLs de endpoints: ou https://{host}/api/v1 https://{domain}.example.com

  • Vários espaços reservados irrestritos nos URLs do servidor: https://{subdomain}.{env}.{domain}.com

  • Regras de endpoint que permitem a construção arbitrária de URL sem validação

Esses padrões podem ser potencialmente explorados para:

  • Redirecione solicitações para endpoints não intencionais ou maliciosos

  • Acesse recursos internos da rede ou serviços de metadados da instância (falsificação de Server-Side solicitações)

  • Exfiltre credenciais do IAM ou dados confidenciais

Práticas recomendadas:

  • Use URLs de endpoint estáticos e totalmente qualificados sempre que possível

  • Para AWS serviços, confie na resolução padrão de terminais com parâmetros de região validados. O Gateway impõe a validação AWS regional dos serviços AWS

  • Se forem necessárias regras personalizadas de endpoint, restrinja os parâmetros a valores específicos e validados

  • Evite expor parâmetros brutos de host ou domínio na configuração de endpoint do seu modelo Smithy

Para integrações AWS de serviços, o AgentCore Gateway valida automaticamente os parâmetros da região e bloqueia solicitações para intervalos de IP privados.

Suporte de recursos Smithy para Gateway AgentCore

A tabela a seguir descreve os recursos do Smithy que são suportados e não suportados pelo Gateway:

Recursos compatíveis Recursos sem suporte

Definições de serviço Definições de estrutura de serviço com base nas especificações da Smithy Definições de operação com input/output formas Definições de recursos Formas de características Protocolo de suporte RestJson Protocolo de suporte request/response Padrões HTTP padrão Tipos de dados (string, inteiro, booleano, flutuante, duplo) Tipos complexos (estruturas, listas, mapas) Manipulação de data e hora Tipos de dados Blob Vinculações básicas de métodos HTTP Vinculações de parâmetros de caminho simples Vinculações de parâmetros de consulta Cabeçalho vinculações para casos simples Endpoint Rules Conjuntos de regras de endpoint Determinação de endpoints em tempo de execução com base nas condições

Protocolo de suporte RestXml protocolo JsonRpc AwsQuery protocolo Protocolo Ec2Query Protocolos personalizados Autenticação Vários tipos de autenticação de saída para APIs específicas Esquemas de autenticação complexos que exigem decisões em tempo de execução Operações Operações de streaming Operações que exigem implementações de protocolo personalizadas

Especificação do modelo Smithy

AgentCore O Gateway fornece modelos Smithy integrados para serviços comuns AWS . Para ver os modelos de AWS serviços da Smithy, consulte o repositório de modelos de AWS API.

nota

AgentCore O Gateway não oferece suporte a modelos Smithy personalizados para não serviços.AWS

Depois de definir seu modelo Smithy, você pode fazer o seguinte:

  • Faça o upload para um bucket do Amazon S3 e consulte a localização do S3 ao adicionar o destino ao seu gateway.

  • Cole a definição em linha ao adicionar o destino ao seu gateway.

Expanda uma seção para ver exemplos de especificações do modelo Smithy suportadas e não suportadas:

O exemplo a seguir mostra uma especificação de modelo Smithy válida para um serviço meteorológico:

{ "smithy": "2.0", "metadata": { "suppressions": [] }, "shapes": { "example.weather#WeatherService": { "type": "service", "version": "1.0.0", "operations": [ { "target": "example.weather#GetCurrentWeather" } ], "traits": { "aws.protocols#restJson1": {}, "smithy.api#documentation": "Weather service for retrieving weather information" } }, "example.weather#GetCurrentWeather": { "type": "operation", "input": { "target": "example.weather#GetCurrentWeatherInput" }, "output": { "target": "example.weather#GetCurrentWeatherOutput" }, "errors": [ { "target": "smithy.framework#ValidationException" } ], "traits": { "smithy.api#http": { "method": "GET", "uri": "/weather" }, "smithy.api#documentation": "Get current weather for a location" } }, "example.weather#GetCurrentWeatherInput": { "type": "structure", "members": { "location": { "target": "smithy.api#String", "traits": { "smithy.api#required": {}, "smithy.api#httpQuery": "location", "smithy.api#documentation": "City name or coordinates" } }, "units": { "target": "example.weather#Units", "traits": { "smithy.api#httpQuery": "units", "smithy.api#default": "metric", "smithy.api#documentation": "Units of measurement (metric or imperial)" } } } }, "example.weather#GetCurrentWeatherOutput": { "type": "structure", "members": { "location": { "target": "smithy.api#String", "traits": { "smithy.api#documentation": "Location name" } }, "temperature": { "target": "smithy.api#Float", "traits": { "smithy.api#documentation": "Current temperature" } }, "conditions": { "target": "smithy.api#String", "traits": { "smithy.api#documentation": "Weather conditions description" } }, "humidity": { "target": "smithy.api#Float", "traits": { "smithy.api#documentation": "Humidity percentage" } } } }, "example.weather#Units": { "type": "enum", "members": { "metric": { "target": "smithy.api#Unit", "traits": { "smithy.api#enumValue": "metric" } }, "imperial": { "target": "smithy.api#Unit", "traits": { "smithy.api#enumValue": "imperial" } } } } } }

O exemplo a seguir mostra uma configuração inválida de regras de endpoint usando o Smithy:

@endpointRuleSet({ "rules": [ { "conditions": [{"fn": "booleanEquals", "argv": [{"ref": "UseFIPS"}, true]}], "endpoint": {"url": "https://weather-fips.{Region}.example.com"} }, { "endpoint": {"url": "https://weather.{Region}.example.com"} } ] })