Funções, credenciais temporárias e SigV4

Usando a segurança da AWS para desenvolvedores

Rahul Singh

Technical Product Manager

A chave que sobrevive à tarefa

Para agilizar o trabalho, uma chave é criada em um script e guardada em um arquivo de configuração.

Dentro do arquivo ela fica:

  • Nunca rotacionada
  • Nunca revogada
  • Nunca expirada

Uma chave de acesso se espalhando para seis locais de armazenamento, com um eixo de tempo à direita mostrando que ainda é válida no mês dezoito

Usando a segurança da AWS para desenvolvedores

A chave que sobrevive à tarefa

Para agilizar o trabalho, uma chave é criada em um script e guardada em um arquivo de configuração.

Dentro do arquivo ela fica:

  • Nunca rotacionada
  • Nunca revogada
  • Nunca expirada

 

18 meses depois, ainda é válida

Uma chave de acesso se espalhando para seis locais de armazenamento, com um eixo de tempo à direita mostrando que ainda é válida no mês dezoito

Usando a segurança da AWS para desenvolvedores

Credenciais que expiram sozinhas

Torne a expiração o padrão com AWS STS

  1. Solicite uma função e receba credenciais com relógio embutido

  2. Security Token Service (STS): expiração incluída, uma hora por padrão

Um aplicativo chama AssumeRole no AWS STS, e o STS retorna credenciais com relógio embutido.

Usando a segurança da AWS para desenvolvedores

Credenciais que expiram sozinhas

Torne a expiração o padrão com AWS STS

  1. Solicite uma função e receba credenciais com relógio embutido

  2. Credenciais temporárias começam com ASIA e levam um token de sessão

  3. Security Token Service (STS): expiração incluída, uma hora por padrão

Um aplicativo chama AssumeRole no AWS STS e recebe credenciais com relógio embutido. Abaixo, duas credenciais lado a lado: uma chave de longa duração começando com AKIA, sem token de sessão e sem expiração, e credenciais temporárias começando com ASIA, com token de sessão e que expiram em uma hora.

Usando a segurança da AWS para desenvolvedores

Credenciais que expiram sozinhas

Torne a expiração o padrão com AWS STS

  1. Solicite uma função e receba credenciais com relógio embutido

  2. Credenciais temporárias começam com ASIA e levam um token de sessão

  3. A mesma chamada é aceita e, depois, não é

  4. Security Token Service (STS): expiração incluída, uma hora por padrão

Um aplicativo chama AssumeRole no AWS STS e recebe credenciais com relógio embutido. Abaixo, uma chave de longa duração começando com AKIA que nunca expira, ao lado de credenciais temporárias começando com ASIA com token de sessão que expiram em uma hora. Abaixo disso, a mesma chamada GetObject retornando 200 OK às dez horas e ExpiredToken às onze e cinco.

Usando a segurança da AWS para desenvolvedores

Como seu código as encontra

Verificando a cadeia de provedores de credenciais

  • O AWS SDK, a biblioteca no seu código, faz a busca
  • Uma lista fixa, checada em ordem
  • Para no primeiro acerto

Ordem de busca de credenciais: uma chave passada no código está riscada acima da cadeia, e a busca então desce por variáveis de ambiente, arquivo de config e credenciais do contêiner, parando no primeiro acerto e nunca chegando aos metadados da instância

Usando a segurança da AWS para desenvolvedores

Como seu código as encontra

Verificando a cadeia de provedores de credenciais

  • O AWS SDK, a biblioteca no seu código, faz a busca
  • Uma lista fixa, checada em ordem
  • Para no primeiro acerto

 

Chaves hard-coded são checadas primeiro e, por isso, precisam ser removidas

Ordem de busca de credenciais: uma chave passada no código está riscada acima da cadeia, e a busca então desce por variáveis de ambiente, arquivo de config e credenciais do contêiner, parando no primeiro acerto e nunca chegando aos metadados da instância

Usando a segurança da AWS para desenvolvedores

A cadeia, elo por elo

1. explicit      a key passed in your code
2. environment   AWS_* variables, and on Lambda
                 that is the execution role
3. config file   ~/.aws/credentials
4. container     ECS or EKS task role
5. instance      EC2 instance profile, via IMDS
  • Primeiro acerto vence
  • Exclua a chave armazenada; a busca continua até a função
Usando a segurança da AWS para desenvolvedores

Comprovando identidade fora da AWS

Pipelines de código costumam rodar fora da AWS, então a cadeia de credenciais não pode ser anexada

  • Roda no GitHub ou GitLab
  • Nada para a cadeia encontrar

Um runner de CI e sua plataforma desenhados fora do limite da AWS, o runner marcado como sem função para anexar, e a plataforma assinando um token OIDC que nomeia um repositório e um workflow

Usando a segurança da AWS para desenvolvedores

Comprovando identidade fora da AWS

Pipelines de código costumam rodar fora da AWS, então a cadeia de credenciais não pode ser anexada

  • Roda no GitHub ou GitLab
  • Nada para a cadeia encontrar

 

Token OIDC (OpenID Connect)

  • Assinado e de curta duração
  • Uma declaração de identidade, não credencial

Um runner de CI e sua plataforma desenhados fora do limite da AWS, o runner marcado como sem função para anexar, e a plataforma assinando um token OIDC que nomeia um repositório e um workflow

Usando a segurança da AWS para desenvolvedores

Uma regra em vez de chave armazenada

Um token OIDC nomeando um repositório, trocado via AssumeRoleWithWebIdentity por credenciais temporárias que expiram em uma hora, porque a política de confiança da função já nomeia esse emissor e esse repositório

Trocando o token por credenciais

Usando a segurança da AWS para desenvolvedores

Uma regra em vez de chave armazenada

Um token OIDC nomeando um repositório, trocado via AssumeRoleWithWebIdentity por credenciais temporárias que expiram em uma hora, porque a política de confiança da função já nomeia esse emissor e esse repositório

Trocando o token por credenciais

  • AssumeRoleWithWebIdentity: AssumeRole, com um token externo como prova
  • Política de confiança: escrita na função antes, não armazenada no pipeline
  • Claim: um fato dentro do token
  • O emissor é compartilhado por todo repositório na plataforma, então fixe também o repositório

Segredos do repositório: agora vazios

Usando a segurança da AWS para desenvolvedores

Toda solicitação é assinada

Signature Version 4, ou SigV4

  • Prova qual credencial fez a solicitação
  • Prova que a solicitação não foi alterada em trânsito
  • Assinado pelo CLI e SDK em toda chamada

Fluxo de assinatura em que uma solicitação e suas credenciais produzem uma assinatura enviada no cabeçalho Authorization; a AWS recomputa e compara, aceitando em caso de correspondência e retornando SignatureDoesNotMatch em caso de falha

Usando a segurança da AWS para desenvolvedores

Uma assinatura que você pode repassar

Credenciais temporárias

  • Muitas ações, delimitadas pela função
  • Mantidas pelo seu código

Seu código chamando quatro serviços AWS, S3, DynamoDB, SQS e KMS, com credenciais temporárias

Usando a segurança da AWS para desenvolvedores

Uma assinatura que você pode repassar

Credenciais temporárias

  • Muitas ações, delimitadas pela função
  • Mantidas pelo seu código

URL pré-assinada

  • Um objeto, uma ação e qualquer pessoa com o link
  • Um prazo que você define; depois, nada
  • Leva suas permissões, não as de quem tem o link

Seu código chamando quatro serviços AWS, S3, DynamoDB, SQS e KMS, com credenciais temporárias

O navegador de outra pessoa acessando exatamente um objeto por um único caminho, interrompido por um relógio com o prazo que você definiu

Usando a segurança da AWS para desenvolvedores

Vamos praticar!

Usando a segurança da AWS para desenvolvedores

Preparing Video For Download...