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

최종 업데이트 날짜: 2020년 8월 27일

Java용 AWS SDK를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행되는 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)

간략한 설명

Amazon Web Services(AWS)에 대한 모든 애플리케이션 API 요청은 AWS에서 발급한 자격 증명을 사용하여 암호화된 방식으로 서명되어야 합니다.

애플리케이션에서 AWS 클라이언트를 생성할 때 임시 자격 증명을 사용하는 경우 해당 자격 증명은 생성 중에 지정된 시간 간격으로 만료됩니다. 따라서 자격 증명이 만료되기 전에 새로 고쳐야 합니다.

시간을 잘못 지정한 경우에도 만료될 수 있습니다. 일관되고 정확한 시간 참조는 많은 서버 작업 및 프로세스에 있어서 매우 중요합니다. 인스턴스의 날짜 및 시간이 올바르게 설정되지 않은 경우 AWS 자격 증명이 거부됩니다.

애플리케이션이 Amazon EC2 인스턴스에서 실행 중인 경우 인스턴스에 할당된 AWS Identity and Access Management(IAM) 역할을 사용하는 것이 좋습니다. IAM 역할을 사용하면 기본 서비스 생성자를 사용할 수 있습니다. 기본 생성자 클라이언트는 다음 순서로 기본 자격 증명 공급자 체인을 사용하여 자격 증명을 검색합니다.

  1. 시스템 환경 변수에서 검색: AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
  2. Java 시스템 속성에서 검색: aws.accessKeyId aws.secretKey.
  3. 기본 자격 증명 파일(이 파일의 위치는 플랫폼에 따라 다름)에서 검색
  4. EC2 인스턴스의 IAM 역할과 연결된 인스턴스 메타데이터에 포함되어 있는 인스턴스 프로파일 자격 증명에서 검색 인스턴스에 인스턴스 프로파일을 연결하면 인스턴스 프로파일 자격 증명이 기본 자격 증명 공급자 체인에 추가됩니다. 자세한 내용은 IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 부여하기를 참조하십시오.
    인스턴스 프로파일 자격 증명을 사용할 수 있는 경우 기본 클라이언트 생성자는 AWS SDK InstanceProfileCredentialsProvider 클래스의 인스턴스를 생성합니다. AWS는 이 클래스를 사용하여 Amazon EC2 인스턴스 메타데이터임시 보안 자격 증명을 사용하여 AWS 자격 증명으로 API 요청에 서명합니다.

중요: 애플리케이션이 AWS SDK ProfileCredentialsProvider 클래스를 사용하여 임시 AWS 자격 증명을 제공하는 경우, 자격 증명이 만료되기 전에 고객이 자격 증명을 확인하고 새로 고쳐야 합니다. 자격 증명을 확인하거나 새로 고치지 않으면 ExpiredToken 오류로 인해 애플리케이션 오류가 발생할 가능성이 높아질 수 있습니다.

​해결 방법

Amazon Time Sync Service 또는 NTP 소스 사용

Linux 인스턴스의 시간 참조가 일관되고 정확한지 확인하려면 Amazon EC2 인스턴스에서 Amazon Time Sync Service 또는 다른 NTP(네트워크 시간 프로토콜) 소스를 구성합니다. 자세한 내용은 Linux 인스턴스의 시간 설정 또는 Windows 인스턴스에 대한 시간 설정을 참조하십시오.

사용자 지정 임시 AWS 자격 증명 사용

만료 5분 전에 임시 자격 증명을 새로 고칩니다.

인스턴스에 할당된 IAM 역할 사용

인스턴스에 인스턴스 프로파일을 연결합니다. 자세한 내용은 IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 부여하기를 참조하십시오. 코드 또는 인스턴스에 다른 자격 증명이 지정되어 있지 않은지 확인합니다. 인스턴스 프로파일 자격 증명은 기본 자격 증명 공급자 체인에서 자격 증명을 검색하는 마지막 위치입니다. 검색 체인의 이전 위치에 자격 증명이 있으면 해당 자격 증명으로 인해 IAM이 사용되지 않습니다. 자세한 내용은 AWS 자격 증명 작업을 참조하십시오.

인스턴스에 연결된 IAM 역할의 AWS 자격 증명을 보려면 Linux 셸 또는 Windows PowerShell(v3.0 이상)에서 다음 명령을 실행합니다. examplerole을 실제 IAM 역할의 이름으로 바꾸어야 합니다.

Linux의 경우 curl 명령을 사용하여 AWS 자격 증명을 확인합니다.

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

Windows의 경우 Invoke-RestMethod 명령을 사용하여 AWS 자격 증명을 확인합니다.

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

이 명령은 다음과 유사한 출력을 반환합니다.

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

이 명령을 사용하여 인스턴스의 최신 임시 자격 증명을 확인합니다. 이러한 자격 증명은 할당된 임시 자격 증명이 만료되기 약 5분 전에 자동으로 교체되거나 새로 고쳐집니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?