Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

Como posso solucionar o erro do AWS STS “o token de segurança incluído na solicitação expirou” ao usar a AWS CLI para assumir um perfil do IAM?

6 minuto de leitura
0

Tentei assumir um perfil do AWS Identity and Access Management (AWS IAM) usando a AWS Command Line Interface (AWS CLI). Recebi um erro “o token de segurança incluído na solicitação expirou”.

Breve descrição

As credenciais de segurança temporárias para usuários do IAM são solicitadas usando o serviço AWS Security Token Service (AWS STS). As credenciais temporárias criadas com a ação da API AssumeRole duram uma hora por padrão. Depois que as credenciais temporárias expirarem, elas não poderão ser reutilizadas. Para obter mais informações, consulte Credenciais de segurança temporárias no IAM.

Resolução

Use as etapas de solução de problemas a seguir para verificar seu erro.

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Certifique-se de que suas solicitações temporárias de credenciais de segurança possam chegar aos endpoints da AWS

O estabelecimento de credenciais para uma função exige um ID da chave de acesso, chave de acesso secreta e token de sessão. As solicitações enviadas devem chegar ao endpoint da AWS em até cinco minutos após o carimbo de data/hora da solicitação; caso contrário, a solicitação será negada. Para obter mais informações, consulte Por que as solicitações são assinadas.

Usando perfis para assumir um perfil do IAM

Um perfil nomeado é uma coleção de configurações e credenciais que você pode aplicar a um comando da AWS CLI. Verifique se você está usando as credenciais corretas.

O seguinte comando da AWS CLI usa as credenciais de perfil padrão:

aws s3 ls

Este exemplo de comando usa as credenciais do perfil project1 configuradas no arquivo .config:

aws s3 ls --profile project1

Exemplo de saída usando credenciais expiradas:

"An error occurred (ExpiredToken) when calling the ListBuckets operation: The provided token has expired."

Esses perfis são definidos em sua pasta .aws contendo os arquivos .credentials e .config.

O arquivo de configuração está localizado em ~/.aws/config para Linux/macOS e em C:\Users\%USERPROFILE%\.aws\config para Windows. O arquivo de credenciais está localizado em ~/.aws/credentials para Linux/macOS e C:\Users\%USERPROFILE%\.aws\credentials para Windows.

Para verificar suas credenciais de perfil padrão, execute o seguinte comando:

aws configure list --profile default

Exemplo de saída:

Name Value Type Location
---- ----- ---- --------
profile default manual —profile
access_key TGN7 shared-credentials-file
secret_key SbXb shared-credentials-file
region us-east-1 config-file ~/.aws/config

Para confirmar se as mesmas credenciais são usadas para o perfil project1, execute o seguinte comando:

aws configure list --profile project1

Exemplo de saída:

Name Value Type Location
---- ----- ---- --------
profile project1 manual —profile
access_key QN2X config-file
secret_key LPYI config-file
region eu-west-1 config-file ~/.aws/config

No exemplo de saída, observe que credenciais diferentes podem ser configuradas para os perfis padrão e project1.

Você pode criar um perfil no seu arquivo .aws/config usando o seguinte formato:

[profile project1]
region = eu-west-1
aws_access_key_id = <access-Key-for-an-IAM-role>
aws_secret_access_key = <secret-access-Key-for-an-IAM-role>
aws_session_token = <session-token>

Essas credenciais são fornecidas quando você executa o comando assume-role do AWS STS semelhante ao seguinte:

aws sts assume-role --role-arn arn:aws:iam::<account-number>:role/Prod-Role --role-session-name environment-prod

Exemplo de saída:

{
"AssumedRoleUser": {
"AssumedRoleId": "AROAXXXXXXXXXXXX:environment-prod",
"Arn": "arn:aws:sts::<account-number>:assumed-role/Prod-Role/environment-prod"
},
"Credentials": {
"SecretAccessKey": "<secret-access-Key-for-an-IAM-role>,
"SessionToken": "<session-token>",
"Expiration": "2020-03-31T17:17:53Z",
"AccessKeyId": "<access-Key-for-an-IAM-role>"
}

Observação: você pode aumentar a validade máxima da duração da sessão para credenciais temporárias para perfis do IAM usando o parâmetro DurationSeconds para seu caso de uso.

Em seguida, a nova chamada de API assume-role recupera um novo conjunto de credenciais válidas. Após a chamada de API, você deve atualizar manualmente o arquivo ~/.aws/config com as novas credenciais temporárias.

Você pode evitar atualizar o arquivo de configuração sempre que uma sessão expirar. Defina um perfil para o perfil do IAM junto com o usuário que assume a função no arquivo ~/.aws/config ou ~/.aws/credentials semelhante ao seguinte:

[profile project1]
role_arn = <arn-of-IAM-role>
source_profile = user1
region = <region>

Observe que user1 é definido em seu arquivo ~/.aws/credentials semelhante ao seguinte:

[user1]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Definir source\ _profile significa que você não precisa atualizar suas credenciais temporárias no arquivo ~/.aws/config ou ~/.aws/credentials.

O comando da AWS CLI a seguir lista os buckets do Amazon Simple Storage Service (Amazon S3) com credenciais para o user1 localizados no arquivo ~/.aws/credentials.

aws s3 ls --profile project1

Se você estiver usando a AWS CLI com um elemento source\ _profile, a chamada de API assume-role coloca as credenciais no arquivo .aws/cli/cache. As credenciais expiradas são atualizadas automaticamente no arquivo .aws/cli/cache. Se você receber um erro de credenciais expiradas, poderá limpar o cache com os seguintes comandos:

Linux/macOS:

$ rm -r ~/.aws/cli/cache

Windows:

C:\> del /s /q %UserProfile%\.aws\cli\cache

A AWS CLI cria novas credenciais no cache.

Crie variáveis de ambiente para assumir o perfil do IAM e verificar o acesso

Você pode usar as credenciais de perfil do IAM para criar três variáveis de ambiente para assumir o perfil do IAM semelhante à seguinte:

Linux/macOS:

export AWS_ACCESS_KEY_ID=RoleAccessKeyID
export AWS_SECRET_ACCESS_KEY=RoleSecretKey
export AWS_SESSION_TOKEN=RoleSessionToken

Windows:

C:\> setx AWS_ACCESS_KEY_ID RoleAccessKeyID
C:\> setx AWS_SECRET_ACCESS_KEY RoleSecretKey
C:\> setx AWS_SESSION_TOKEN RoleSessionToken

Para executar o comando que você considerou como perfil do IAM correto, execute o seguinte comando:

aws sts get-caller-identity

O comando get-caller-identity exibe informações sobre a identidade do IAM usada para autenticar a solicitação. Para obter mais informações, consulte Como assumir um perfil do IAM usando a AWS CLI?

As variáveis de ambiente mantêm credenciais temporárias em cache mesmo depois de expirarem e não são renovadas automaticamente. Use os comandos a seguir para verificar se as variáveis de ambiente de credenciais estão definidas:

Linux/macOS:

$ printenv | grep AWS

Windows:

C:\>set AWS

Você pode remover variáveis de ambiente expiradas com os seguintes comandos:

Linux/macOS:

$ unset AWS_ACCESS_KEY_ID
$ unset AWS_SECRET_ACCESS_KEY
$ unset AWS_SESSION_TOKEN

Windows:

C:\>set AWS_ACCESS_KEY_ID=
C:\>set AWS_SECRET_ACCESS_KEY=
C:\>set AWS_SESSION_TOKEN=

Agora você pode usar a chamada de API assume-role novamente para obter credenciais novas e válidas e definir as variáveis de ambiente novamente.

Importante: os arquivos .aws/credentials e .aws/config contêm detalhes de credenciais para suas entidades do IAM. Ao gerenciar suas credenciais, certifique-se de seguir as práticas recomendadas de segurança no IAM.

Informações relacionadas

Solicitar as credenciais de segurança temporárias

Como resolvo o erro “O token de segurança incluído na solicitação expirou” ao executar aplicativos Java no Amazon EC2?

AWS OFICIAL
AWS OFICIALAtualizada há 2 meses