Configurar autenticação - AWS SDK for Go v2

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á.

Configurar autenticação

O AWS SDK for Go permite configurar o serviço de comportamento de autenticação. Na maioria dos casos, a configuração padrão será suficiente, mas a configuração da autenticação personalizada permite definir um comportamento adicional, como trabalhar com recursos de serviço de pré-lançamento.

Definições

Esta seção fornece uma descrição geral dos componentes da autenticação no AWS SDK for Go.

AuthScheme

Um AuthScheme é a interface que define o fluxo de trabalho por meio do qual o SDK recupera a identidade do chamador e a anexa a uma solicitação de operação.

Um esquema de autenticação usa os seguintes componentes, descritos em detalhes abaixo:

  • Um ID exclusivo que identifica o esquema

  • Um resolvedor de identidade, que retorna uma identidade de chamador usada no processo de assinatura (por exemplo, suas credenciais da AWS)

  • Um signatário, que executa a injeção real da identidade do chamador na solicitação de transporte da operação (por exemplo, o cabeçalho HTTP Authorization)

Cada opção de cliente de serviço inclui um campo AuthSchemes que, por padrão, é preenchido com a lista de esquemas de autenticação compatíveis com esse serviço.

AuthSchemeResolver

Cada opção de cliente de serviço inclui um campo AuthSchemeResolver. Essa interface, definida por serviço, é a API chamada pelo SDK para determinar as possíveis opções de autenticação para cada operação.

Importante

O resolvedor do esquema de autenticação NÃO determina qual esquema de autenticação deve ser usado. Ele retorna uma lista de esquemas que podem ser usados (“opções”). O esquema final é selecionado por meio de um algoritmo fixo descrito aqui.

Opção

Retornada de uma chamada para ResolverAuthSchemes, uma Opção representa uma possível opção de autenticação.

Uma opção consiste em três conjuntos de informações:

  • Um ID representando o possível esquema

  • Um conjunto opaco de propriedades a serem fornecidas ao resolvedor de identidade do esquema

  • Um conjunto opaco de propriedades a serem fornecidas ao signatário do esquema

Uma nota sobre propriedades

Em 99% dos casos de uso, os chamadores não precisam se preocupar com as propriedades opacas de assinatura e resolução de identidade. O SDK extrai as propriedades necessárias para cada esquema e as passa para as interfaces fortemente tipadas expostas no SDK. Por exemplo, o resolvedor de autenticação padrão para serviços codifica a opção do SigV4 para ter propriedades de signatário de nome e região de assinatura, cujos valores são passados à implementação v4.HTTPSigner configurada do cliente quando o SigV4 é selecionado.

Identidade

Uma identidade é uma representação abstrata de quem é o chamador do SDK.

O tipo mais comum de identidade usado no SDK é um conjunto de aws.Credentials. Na maioria dos casos de uso, o chamador não precisa se preocupar com Identity como uma abstração e pode trabalhar diretamente com os tipos concretos.

nota

Para preservar a compatibilidade com versões anteriores e evitar confusão na API, o tipo de identidade aws.Credentials específico do AWS SDK não satisfaz diretamente a interface Identity. Esse mapeamento é feito internamente.

IdentityResolver

IdentityResolver é a interface por meio da qual uma Identity é recuperada.

Existem versões concretas de IdentityResolver no SDK em formato fortemente tipado (por exemplo, aws.CredentialsProvider). O SDK gerencia esse mapeamento internamente.

O chamador só precisa implementar diretamente a interface IdentityResolver ao definir um esquema de autenticação externo.

Signer

Signatário é a interface por meio da qual uma solicitação é complementada com o chamador recuperado Identity.

Existem versões concretas de Signer no SDK em formato fortemente tipado (por exemplo, v4.HTTPSigner). O SDK gerencia esse mapeamento internamente.

O chamador só precisa implementar diretamente a interface Signer ao definir um esquema de autenticação externo.

AuthResolverParameters

Cada serviço usa um conjunto específico de entradas que são passadas para sua função de resolução, definida em cada pacote de serviços como AuthResolverParameters.

Os parâmetros básicos do resolvedor são os seguintes:

nome type description
Operation string O nome da operação que está sendo invocada.
Region string A região da AWS do cliente. Presente somente para serviços que usam o SigV4[A].

Se você estiver implementando seu próprio resolvedor, nunca será necessário construir sua própria instância com seus parâmetros. O SDK fornece esses valores por solicitação e os transmite para sua implementação.

Fluxo de trabalho de resolução do esquema de autenticação

Quando você chama uma operação de serviço da AWS por meio do SDK, a seguinte sequência de ações ocorre após a serialização da solicitação:

  1. O SDK chama a API AuthSchemeResolver.ResolveAuthSchemes() do cliente, fornecendo os parâmetros de entrada conforme necessário, para obter uma lista de Opções possíveis para a operação.

  2. O SDK repete essa lista e seleciona o primeiro esquema que satisfaz as condições a seguir.

    • Um esquema com ID correspondente está presente na própria lista AuthSchemes do cliente

    • O resolvedor de identidade do esquema existe (não é nil) nas Opções do cliente (verificado por meio do método GetIdentityResolver do esquema, o mapeamento para os tipos concretos de resolvedor de identidade descritos acima é gerenciado internamente) (1)

  3. Supondo que um esquema viável tenha sido selecionado, o SDK invoca sua API GetIdentityResolver() para recuperar a identidade do chamador. Por exemplo, o esquema de autenticação do SigV4 integrado será mapeado internamente para o provedor de Credentials do cliente.

  4. O SDK chama o resolvedor de identidade GetIdentity() (por exemplo, aws.CredentialProvider.Retrieve() para o SigV4).

  5. O SDK chama o ResolveEndpoint() do resolvedor do endpoint para encontrar o endpoint da solicitação. O endpoint pode incluir metadados adicionais que influenciam o processo de assinatura (por exemplo, nome de assinatura exclusivo do S3 Object Lambda).

  6. O SDK chama a API Signer() do esquema de autenticação para recuperar o signatário e usa a API SignRequest() para assinar a solicitação com a identidade do chamador recuperada anteriormente.

(1) Se o SDK encontrar a opção anônima (ID smithy.api#noAuth) na lista, ela será selecionada automaticamente, pois não há um resolvedor de identidade correspondente.

AuthSchemes com suporte nativo

Os seguintes esquemas de autenticação têm suporte nativo do AWS SDK for Go.

Name ID do esquema Resolvedor de identidade Signer Observações
SigV4 da4 aws.auth#sigv4 aws.CredentialsProvider v4.HTTPSigner O padrão atual para a maioria das operações de serviço da AWS.
SigV4A aws.auth#sigv4a aws.CredentialsProvider n/a O uso do SigV4A é limitado no momento, a implementação do signatário é interna. Veja este anúncio de um novo módulo opcional aws-http-auth que expõe APIs de uso geral para assinar solicitações HTTP.
SigV4Express com.amazonaws.s3#sigv4express s3.ExpressCredentialsProvider v4.HTTPSigner Usado para Express One Zone.
Portador de HTTP smithy.api#httpBearerAuth smithybearer.TokenProvider smithybearer.Signer Usado pelo CodeCatalyst.
Anônimo smithy.api#noAuth n/a n/a Sem autenticação: nenhuma identidade é necessária e a solicitação não está assinada ou autenticada.

Configuração de identidade

No AWS SDK for Go, os componentes de identidade de um esquema de autenticação são configurados em Options do cliente do SDK. O SDK seleciona e usa automaticamente os valores desses componentes para o esquema selecionado quando uma operação é chamada.

nota

Por motivos de compatibilidade com versões anteriores, o SDK permite implicitamente o uso do esquema de autenticação anônima caso nenhum resolvedor de identidade esteja configurado. Isso pode ser feito manualmente configurando todos os resolvedores de identidade em Options do cliente como nil (o resolvedor de identidade do SigV4 também pode ser definido como aws.AnonymousCredentials{}).

Configuração do signatário

No AWS SDK for Go, os componentes de signatário de um esquema de autenticação são configurados em Options do cliente do SDK. O SDK seleciona e usa automaticamente os valores desses componentes para o esquema selecionado quando uma operação é chamada. Nenhuma configuração adicional é necessária.

Esquema de autenticação personalizado

Para definir um esquema de autenticação personalizado e configurá-lo para uso, o chamador deve fazer o seguinte:

  1. Definir uma implementação do AuthScheme

  2. Registrar o esquema na lista AuthSchemes do cliente do SDK

  3. Instrumentar o AuthSchemeResolver do cliente do SDK para retornar uma Option de autenticação com o ID do esquema, quando aplicável

Atenção

Os serviços a seguir têm um comportamento de autenticação exclusivo ou personalizado. Recomendamos que você delegue à implementação padrão e encapsule adequadamente se precisar de um comportamento de autenticação personalizado:

Serviço Observações
S3 Uso condicional do SigV4A e SigV4Express dependendo da entrada da operação.
EventBridge Uso condicional do SigV4a dependendo da entrada da operação.
Cognito Algumas operações são somente anônimas.
SSO Algumas operações são somente anônimas.
STS Algumas operações são somente anônimas.