Amazon EC2에서 Java 애플리케이션을 실행할 때 "The security token included in the request is expired" 오류를 해결하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 AWS SDK for Java를 사용하는 Java 애플리케이션에서 다음 오류가 발생합니다. "com.amazonaws.AmazonServiceException: The security token included in the request is expired (Service: AmazonSQS; Status Code: 403; Error Code: ExpiredToken; Request ID: 12a345b6-78cd-901e-fg23-45hi67890jkl)".

간략한 설명

AWS에서는 모든 애플리케이션 API 요청이 AWS에서 제공한 자격 증명을 사용하여 디지털로 서명되어야 합니다. 애플리케이션에서 임시 자격 증명을 사용하여 AWS 클라이언트를 생성하는 경우, 자격 증명이 만료되기 전에 해당 자격 증명을 갱신해야 합니다. 자격 증명이 만료되면 security token included in the request is expired 오류 메시지가 표시됩니다. 이 오류를 해결하려면 시간 참조를 확인하고 만료된 임시 자격 증명을 새로 고친 다음, AWS Identity and Access Management(IAM) 구성을 확인하십시오.

해결 방법

인스턴스가 일관된 시간 참조를 갖는지 확인

잘못된 시간을 사용하면 자격 증명이 만료되므로 서버가 정확해야 합니다. EC2 인스턴스에는 일관되고 정확한 시간 및 날짜 참조가 있어야 합니다. Amazon Time Sync Service를 구성하거나, 인스턴스에 다른 네트워크 시간 프로토콜(NTP) 소스를 구성하십시오. 자세한 내용은 인스턴스의 시간대 변경을 참조하십시오.

임시 자격 증명이 만료되지 않았는지 확인

임시 자격 증명을 사용하는 경우 해당 자격 증명이 만료되지 않아야 합니다. 임시 자격 증명이 만료된 경우에는 새 임시 자격 증명 세트를 생성하여 사용해야 합니다. 임시 자격 증명은 만료되기 5분 전에 새로 고치는 것이 좋습니다.

IAM 구성 확인

EC2 인스턴스에서 실행되는 애플리케이션의 경우, 인스턴스에 할당된 IAM 역할을 사용하는 것이 좋습니다. IAM 역할을 사용하는 경우에는 구성이 올바르게 설정되었는지 확인하십시오.

IAM 역할을 가진 기본 서비스 생성자는 기본 자격 증명 공급자 체인을 사용하여 다음과 같은 순서로 자격 증명을 검색합니다.

  1. AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 시스템 환경 변수
  2. aws.accessKeyIdaws.secretKey Java 시스템 속성
  3. 기본 자격 증명 파일
  4. IAM 역할과 연결된 인스턴스 메타데이터에 있는 인스턴스 프로파일 자격 증명

자세한 내용은 IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 부여를 참조하십시오.

인스턴스 프로파일을 제외한 위치에 자격 증명을 나열하면 기본 클라이언트 생성자가 해당 자격 증명을 먼저 찾습니다. 이 구성은 IAM 역할 자격 증명을 차단합니다. 자세한 내용은 AWS SDK for Java에 임시 자격 증명 제공을 참조하십시오.

IAM 역할의 자격 증명을 보려면 Windows PowerShell 버전 3.0 이상 또는 Linux 쉘에서 다음 명령을 실행하십시오. 임시 자격 증명을 사용하는 경우 다음 Windows 및 Linux 명령은 인스턴스의 최신 임시 자격 증명을 표시합니다.

참고: 다음 명령에서 examplerole을 IAM 역할의 이름으로 바꾸십시오.

Windows:

PS C:\> Invoke-RestMethod http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole

다음 예와 유사한 출력이 표시됩니다.

Code            : SuccessLastUpdated     : 2016-07-18T18:09:47Z
Type            : AWS-HMAC
AccessKeyId     : AKIAIOSFODNN7EXAMPLE
SecretAccessKey : wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Token           : token
Expiration      : 2016-04-27T22:39:16Z

Linux:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole

다음 예와 유사한 출력이 표시됩니다.

{    "Code" : "Success",
    "LastUpdated" : "2016-04-26T16:39:16Z",
    "Type" : "AWS-HMAC",
    "AccessKeyId" : "AKIAIOSFODNN7EXAMPLE",
    "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    "Token" : "token",
    "Expiration" : "2016-04-27T22:39:16Z"
}

위의 curl 명령을 실행할 때 404 오류가 발생하면 HTTP 프록시가 메타데이터 IP 주소에 대해 꺼져 있는지 확인하십시오. 또한 인스턴스 프로파일이 인스턴스에 연결되어 있는지 확인하십시오.

문제가 지속되면 인스턴스가 여러 개의 동시 요청을 하고 여러 세션을 병렬로 실행하고 있지 않은지 확인하십시오. 이 시나리오로 인해 인스턴스 메타데이터 서비스(IMDS)가 쿼리를 제한할 수 있습니다. 이 문제를 완화하려면 지수 백오프 패턴을 통한 재시도를 사용하십시오.

재시도를 설정하려면 AWS_METADATA_SERVICE_NUM_ATTEMPTS를 수정합니다. 옵션을 설정하려면 환경 변수, ~/.aws/config 파일 또는 사용자의 botocore 세션을 사용합니다. 자세한 내용은 Boto3 문서 웹사이트에서 ]( 참조하십시오.

예:

AWS_METADATA_SERVICE_TIMEOUT = 10
AWS_METADATA_SERVICE_NUM_ATTEMPTS = 5

Docker 컨테이너에서 curl 명령을 실행하는 경우 http-put-response-hop-limit2로 증가시킵니다. 다음 AWS Command Line Interface(AWS CLI) modify-instance-metadata-options 명령을 실행하십시오.

aws ec2 modify-instance-metadata-options --instance-id instance --http-put-response-hop-limit 2 --http-endpoint enabled

참고: instance를 사용자의 인스턴스 ID로 바꾸십시오. AWS CLI 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

자세한 내용은 EC2 인스턴스 메타데이터 서비스의 향상된 기능을 사용하여 열린 방화벽, 역방향 프록시 및 SSRF 취약성에 대한 심층 방어 추가를 참조하십시오.

역할 자격 증명은 할당된 임시 자격 증명이 만료되기 5분 전에 자동으로 교체되거나 새로 고쳐집니다.

관련 정보

SDK 인증 구성

Amazon EC2의 IAM 역할

AWS 공식
AWS 공식업데이트됨 한 달 전
댓글 없음

관련 콘텐츠