Criação da sua integração - AWS Identity and Access Management

Criação da sua integração

Noções básicas sobre o ciclo de vida de solicitações

Antes de criar sua integração, é importante entender o fluxo das solicitações de delegação, desde a sua criação até a conclusão.

Estados das solicitações

Uma solicitação de delegação passa pelos seguintes estados:

Estado Descrição
Não atribuída Solicitação criada, mas ainda não associada a uma conta de cliente e a uma entidade principal do IAM. A solicitação pode ter sido criada sem a especificação de uma conta de destino ou com um ID da conta de destino, mas ainda não reivindicada pelo proprietário da conta.
Atribuída Solicitação associada a uma conta de cliente e aguardando análise.
Aprovação pendente O cliente encaminhou a solicitação a um administrador para aprovação.
Aceito Solicitação aprovada pelo cliente, mas o token de troca ainda não foi liberado.
Finalizada Token de troca liberado para o provedor do produto. O período de delegação (validade do token de troca) começa quando a solicitação chega ao estado Finalizada.
Rejeitado Solicitação rejeitada pelo cliente.
Expirada A solicitação expirou devido à inatividade ou ao tempo limite.

Transições de estados

Fluxo normal (caminho de aprovação)

  • Não atribuída → Atribuída: o cliente associa a solicitação à sua conta

  • Atribuída → Aceita OU Atribuída → Aprovação pendente: o cliente aprova a solicitação diretamente OU encaminha ao administrador para análise

  • Aprovação pendente → Aceita: o administrador aprova a solicitação

  • Aceita → Finalizada: o cliente libera o token de troca

Caminho da rejeição

  • Atribuída → Rejeitada: o cliente rejeita a solicitação

  • Aprovação pendente → Rejeitada: o administrador rejeita a solicitação

  • Aceita → Rejeitada: o cliente revoga a aprovação antes de liberar o token

Caminho da expiração

As solicitações expiram automaticamente quando nenhuma ação é executada dentro do prazo especificado:

  • Não atribuída → Expirada (1 dia)

  • Atribuída → Expirada (7 dias)

  • Aprovação pendente → Expirada (7 dias)

  • Aceita → Expirada (7 dias)

  • Rejeitada → Expirada (7 dias)

  • Finalizada → Expirada (7 dias)

Status terminais

Os seguintes estados são terminais (sem mais transições):

  • Finalizada: token de troca enviado

  • Rejeitada: a solicitação foi negada

  • Expirada: a solicitação atingiu o tempo limite ou o período de delegação terminou

As solicitações expiradas são excluídas do sistema após o período de retenção.

Gerenciamento dos estados de solicitação de delegação em sua aplicação

Como parceiro, você deve rastrear os estados de solicitação de delegação em seu sistema e apresentá-los aos seus clientes. Ao receber notificações do SNS sobre mudanças de estado, armazene essas atualizações em seu backend e as reflita na interface de usuário voltada para o cliente. Preste atenção especial ao estado Aprovação pendente: quando um cliente encaminha uma solicitação a um administrador para análise, a AWS envia uma notificação de Aprovação pendente para você. As solicitações podem permanecer nesse estado por até sete dias enquanto aguardam a ação do administrador. Durante esse período, mostre aos clientes que a solicitação deles está pendente e precisa da aprovação do administrador em sua aplicação. Considere fornecer um link direto para o Console da AWS, onde os clientes possam verificar o status da solicitação ou entrar em contato com o administrador. O gerenciamento correto da máquina de estado em seu backend e a apresentação das informações de estado corretas aos clientes em cada estágio é importante para uma boa experiência de integração.

Configuração de notificações

O IAM usa o Amazon Simple Notification Service (SNS) para comunicar a você as alterações de estado da solicitação de delegação. Ao criar uma solicitação de delegação, você deve fornecer um ARN do tópico do SNS da sua conta registrada da AWS. O IAM publicará mensagens sobre esse tópico para eventos importantes, incluindo quando os clientes aprovarem ou rejeitarem solicitações e quando o token de troca estiver pronto.

nota

Os tópicos do SNS não podem estar em regiões de aceitação da AWS. Seu tópico do SNS deve estar em uma região da AWS habilitada por padrão. Para obter uma lista de regiões de aceitação, consulte Gerenciamento de regiões da AWS no Guia de gerenciamento de contas da AWS.

Configuração do tópico do SNS

Para receber notificações de solicitações de delegação, você deve configurar seu tópico do SNS para conceder permissões ao IAM para publicar mensagens nele. Adicione a seguinte instrução de política à política do tópico do SNS:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIAMServiceToPublish", "Effect": "Allow", "Principal": { "Service": "iam.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:REGION:ACCOUNT-ID:TOPIC-NAME" } ] }
Importante

O tópico do SNS deve estar em uma de suas contas registradas da AWS. O IAM não aceitará tópicos do SNS de outras contas. Se a política do tópico não estiver configurada corretamente, você não receberá notificações de alteração de estado ou o token de troca.

Tipos de notificação

O IAM envia dois tipos de notificações:

Notificações de StateChange

Enviadas quando uma solicitação de delegação passa para um novo estado (Atribuída, Aprovação pendente, Aceita, Finalizada, Rejeitada, Expirada).

Notificações de ExchangeToken

Enviadas quando um cliente libera o token de delegação (estado Finalizada). Essa notificação inclui o token de troca de que você precisa para obter as credenciais.

Estados das notificações

É possível receber notificações para os seguintes estados de solicitações de delegação:

Estado Tipo de notificação Descrição
ATRIBUÍDA StateChange A solicitação foi associada a uma conta de cliente
APROVAÇÃO PENDENTE StateChange O cliente encaminhou a solicitação a um administrador para aprovação.
ACEITA StateChange O cliente aprovou a solicitação, mas ainda não liberou o token
FINALIZADA StateChange O cliente liberou o token de troca
FINALIZADA ExchangeToken Essa notificação contém o token de troca
REJEITADA StateChange O cliente rejeitou a solicitação
EXPIRADA StateChange A solicitação expirou antes da conclusão

Formato das mensagens de notificação

O IAM publica notificações padrão do SNS. As informações da solicitação de delegação encontram-se no campo Mensagem como uma string JSON.

Campos comuns (todas as notificações)

Campo Tipo Descrição
Type String “StateChange” ou “ExchangeToken”
RequestId String O ID da solicitação de delegação do IAM
RequestorWorkflowId String O ID do fluxo de trabalho que você forneceu ao criar a solicitação
Estado String Estado atual da solicitação
OwnerAccountId String ID da conta da AWS do cliente
UpdatedAt String Carimbo de data e hora em que o estado mudou (formato ISO 8601)

Campos adicionais (somente notificações de ExchangeToken)

Campo Tipo Descrição
ExchangeToken String O token a ser trocado por credenciais usando a API GetDelegatedAccessToken do AWS STS
ExpiresAt String Quando o acesso delegado expira (formato ISO 8601)

Exemplo de notificações

Notificação de StateChange

{ "Type": "Notification", "MessageId": "61ee8ad4-6eec-56b5-8f3d-eba57556aa13", "TopicArn": "arn:aws:sns:us-east-1:123456789012:partner-notifications", "Message": "{\"RequestorWorkflowId\":\"workflow-12345\",\"Type\":\"StateChange\",\"RequestId\":\"dr-abc123\",\"State\":\"ACCEPTED\",\"OwnerAccountId\":\"111122223333\",\"UpdatedAt\":\"2025-01-15T10:30:00.123Z\"}", "Timestamp": "2025-01-15T10:30:00.456Z", "SignatureVersion": "1", "Signature": "...", "SigningCertURL": "...", "UnsubscribeURL": "..." }

Notificação de ExchangeToken

{ "Type": "Notification", "MessageId": "e44e5435-c72c-5333-aba3-354406782f5b", "TopicArn": "arn:aws:sns:us-east-1:123456789012:partner-notifications", "Message": "{\"RequestId\":\"dr-abc123\",\"RequestorWorkflowId\":\"workflow-12345\",\"State\":\"FINALIZED\",\"OwnerAccountId\":\"111122223333\",\"ExchangeToken\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\"ExpiresAt\":\"2025-01-15T18:30:00.123Z\",\"UpdatedAt\":\"2025-01-15T10:30:00.456Z\",\"Type\":\"ExchangeToken\"}", "Timestamp": "2025-01-15T10:30:00.789Z", "SignatureVersion": "1", "Signature": "...", "SigningCertURL": "...", "UnsubscribeURL": "..." }

Tokens de troca

Um token de troca ou um token de intercâmbio é emitido pelo IAM quando um cliente aceita e finaliza uma solicitação de delegação. O provedor do produto usa esse token de troca ou de intercâmbio para chamar a API GetDelegatedAccessToken do AWS AWS STS e obter credenciais temporárias da AWS com as permissões aprovadas pelos clientes. O token de troca em si não concede acesso aos seus recursos da AWS; ele deve ser trocado por credenciais reais por meio do AWS STS.

O token de troca só pode ser resgatado pela conta do provedor do produto que criou a solicitação de delegação. A conta solicitante está incorporada ao token, garantindo que somente o provedor autorizado do produto possa obter as credenciais para acessar a conta do cliente.

Duração do acesso

O período de delegação começa quando o cliente libera o token de troca, não quando o provedor do produto o resgata. Depois que o cliente liberar o token:

  • O provedor do produto recebe o token via notificação do SNS

  • Ele pode trocá-lo imediatamente por credenciais

  • As credenciais expiram em: hora da liberação + duração aprovada

  • O provedor do produto pode trocar o token várias vezes antes do vencimento para obter novas credenciais, se necessário

Vários resgates

Os provedores de produtos podem trocar o token várias vezes durante o período de validade para obter novas credenciais. No entanto, todas as credenciais obtidas do mesmo token de troca expiram ao mesmo tempo, com base em quando você liberou o token.

Exemplo: se você aprovar uma solicitação de delegação de duas horas e liberar o token às 10h:

Hora de liberação do token Tempo de troca do token Expiração da credencial Tempo utilizável
10:00 am 10:00 am 12:00h 2 horas
10:00 am 10h20 12:00h 1 hora e 40 minutos
10:00 am 11h40 12:00h 20 minutos
10:00 am 12:10h Falha (o token expirou) 0 minuto

Conforme mostrado na tabela, trocar o token mais tarde no período de validade resulta em menos tempo de utilização para o provedor do produto.