내용으로 건너뛰기

AWS CLI를 사용하여 IAM 역할을 수임할 때 ‘요청에 포함된 보안 토큰 만료’라는 AWS STS 오류 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

AWS Command Line Interface(AWS CLI)를 사용하여 AWS Identity and Access Management(IAM) 역할을 수임하려고 했습니다. ‘요청에 포함된 보안 토큰 만료’ 오류가 발생했습니다.

간략한 설명

IAM 사용자에 대한 임시 보안 자격 증명은 AWS Security Token Service(AWS STS) 서비스를 사용하여 요청됩니다. AssumeRole API 작업으로 생성된 임시 자격 증명은 기본적으로 1시간 동안 지속됩니다. 임시 자격 증명이 만료된 후에는 다시 사용할 수 없습니다. 자세한 내용은 IAM의 임시 보안 자격 증명을 참조하십시오.

해결 방법

사용 사례에 대한 다음 문제 해결 단계를 따르십시오.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

임시 보안 자격 증명 요청이 AWS 엔드포인트에 도달할 수 있는지 확인하십시오.

역할에 대한 자격 증명을 설정하려면 액세스 키 ID, 비밀 액세스 키, 세션 토큰이 필요합니다. 전송된 요청은 요청 타임스탬프로부터 5분 이내에 AWS 엔드포인트에 도달해야 하며, 그렇지 않으면 요청이 거부됩니다. 자세한 내용은 요청에 서명하는 이유를 참조하십시오.

프로파일을 사용하여 IAM 역할 수임

명명된 프로파일은 AWS CLI 명령에 적용할 수 있는 설정 및 자격 증명의 모음입니다. 올바른 자격 증명을 사용하고 있는지 확인하십시오.

다음 AWS CLI 명령은 기본 프로파일 자격 증명을 사용합니다.

aws s3 ls

이 예제 명령은 .config 파일에 구성된 project1 프로파일 자격 증명을 사용합니다.

aws s3 ls --profile project1

만료된 자격 증명을 사용한 예제 출력:

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

이러한 프로파일은 .credentials 및 .config 파일이 포함된 .aws 폴더에서 정의됩니다.

구성 파일은 Linux/macOS의 경우 ~/.aws/config에 있고 Windows의 경우 C:\Users\%USERPROFILE%\.aws\config에 있습니다. 자격 증명 파일은 Linux/macOS의 경우 ~/.aws/credentials에 있고 Windows의 경우 C:\Users\%USERPROFILE%\.aws\credentials에 있습니다.

기본 프로파일 자격 증명을 확인하려면 다음 명령을 실행합니다.

aws configure list --profile default

출력 예시:

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

프로파일 ** project1**에 동일한 자격 증명이 사용되는지 확인하려면 다음 명령을 실행합니다.

aws configure list --profile project1

출력 예시:

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

예제 출력에서는 기본 프로파일과 project1 프로파일에 대해 서로 다른 자격 증명이 구성될 수 있습니다.

다음 형식을 사용하여..aws/config 파일에 프로파일을 생성할 수 있습니다.

[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>

이러한 자격 증명은 다음과 유사한 AWS STS assume-role 명령을 실행할 때 제공됩니다.

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

출력 예시:

{
"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>"
}

참고: 사용 사례에 대한 DurationSeconds 파라미터를 사용하여 IAM 역할의 임시 보안 인증 정보에 대한 최대 세션 기간 만료 시간을 늘릴 수 있습니다.

그러면 새로운 assume-role API 직접 호출이 새로운 유효한 자격 증명 세트를 검색합니다. API 직접 호출 이후 새로운 임시 자격 증명으로~/.aws/config 파일을 수동으로 업데이트해야 합니다.

세션이 만료될 때마다 구성 파일을 업데이트하지 않아도 됩니다. 다음과 유사하게 ~/.aws/config 또는 ~/.aws/credentials 파일에서 역할을 수임하는 사용자와 함께 IAM 역할에 대한 프로파일을 정의합니다.

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

user1은 다음과 유사하게 ~/.aws/credentials 파일에 정의되어 있습니다.

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

source_profile을 정의하면 ~/.aws/config 또는 ~/.aws/credentials 파일에서 임시 자격 증명을 업데이트할 필요가 없습니다.

다음 AWS CLI 명령은 ~/.aws/credentials 파일에 있는 user1에 대한 자격 증명이 있는 Amazon Simple Storage Service(Amazon S3) 버킷을 나열합니다.

aws s3 ls --profile project1

source_profile 요소와 함께 AWS CLI를 사용하는 경우 API 직접 호출 assume-role은 자격 증명을 .aws/cli/cache 파일에 저장합니다. 만료된 자격 증명은 .aws/cli/cache 파일에 자동으로 업데이트됩니다. 만료된 자격 증명으로 인해 오류가 발생하는 경우 다음 명령을 사용하여 캐시를 지울 수 있습니다.

Linux/macOS:

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

Windows:

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

AWS CLI는 캐시에 새 자격 증명을 생성합니다.

환경 변수를 생성하여 IAM 역할 수임 후 액세스 확인

IAM 역할 자격 증명을 사용하면 다음과 유사한 IAM 역할을 맡을 세 개의 환경 변수를 생성할 수 있습니다.

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

올바른 IAM 역할을 맡았는지 확인하려면 다음 명령을 실행합니다.

aws sts get-caller-identity

get-caller-identity 명령은 요청을 인증하는 데 사용된 IAM ID에 대한 정보를 표시합니다. 자세한 내용은 AWS CLI를 사용하여 IAM 역할을 위임하려면 어떻게 해야 합니까?를 참조하십시오.

환경 변수는 만료되고 자동으로 갱신되지 않더라도 임시로 캐시된 자격 증명을 보관합니다. 다음 명령을 사용하여 자격 증명 환경 변수가 설정되었는지 확인합니다.

Linux/macOS:

$ printenv | grep AWS

Windows:

C:\>set AWS

다음 명령을 사용하여 만료된 환경 변수를 제거할 수 있습니다.

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=

이제 다시 assume-role API 직접 호출을 사용하여 새롭고 유효한 자격 증명을 얻고 환경 변수를 다시 설정할 수 있습니다.

중요: .aws/credentials.aws/config 파일에는 IAM 엔터티에 대한 자격 증명 세부 정보가 포함되어 있습니다. 자격 증명을 관리할 때 IAM의 보안 모범 사례를 따라야 합니다.

관련 정보

임시 보안 자격 증명 요청

Amazon EC2에서 Java 애플리케이션을 실행할 때 ‘요청에 포함된 보안 토큰 만료’ 오류를 해결하려면 어떻게 해야 합니까?

AWS 공식업데이트됨 일 년 전