간략한 설명
AWS Security Token Service(AWS STS)를 사용해 IAM 사용자에 대한 임시 보안 자격 증명을 요청합니다. AssumeRole API 작업을 사용해 만드는 임시 자격 증명은 1~12시간 동안 지속됩니다. 임시 자격 증명의 지속 시간은 IAM 역할에 대하여 구성하는 역할 세션 지속 시간에 좌우됩니다. 임시 자격 증명은 만료되고 나면 다시 사용할 수 없습니다. 자세한 내용은 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."
이 프로파일은 .aws 폴더의 .credentials 및 .config 파일에서 정의됩니다.
config 파일은 Linux/macOS에서는 ~/.aws/config, Windows에서는 C:\Users\%USERPROFILE%\.aws\config에 있습니다. credentials 파일은 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 =
aws_secret_access_key = <secret-access-Key-for-an-IAM-role>
aws_session_token = <session-token>
다음 형식을 사용해 .aws/credentials 파일에서 프로파일을 만들 수 있습니다.
[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>"
}
참고: IAM 역할의 임시 자격 증명 최대 세션 지속 시간 만료는 DurationSeconds 파라미터를 사용해 늘릴 수 있습니다. 하지만 역할 체인을 사용하는 경우 역할 세션의 최대 지속 시간은 1시간입니다.
그러면 새 assume-role API 호출이 새로운 유효한 자격 증명 세트를 검색합니다. API 호출 이후 새 임시 자격 증명을 사용해 ~/.aws/config 파일을 수동으로 업데이트해야 합니다.
세션이 만료될 때마다 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
AWS CLI를 source_profile 요소와 함께 사용하는 경우, 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의 보안 모범 사례를 따라야 합니다.
관련 정보
임시 보안 자격 증명 요청
Update the maximum session duration for a role(역할의 최대 세션 기간 업데이트)
Amazon EC2에서 Java 애플리케이션을 실행할 때 "The security token included in the request is expired" 오류를 해결하려면 어떻게 해야 합니까?