인스턴스 메타데이터에서 보안 자격 증명 가져오기
인스턴스 메타데이터에서 보안 자격 증명 가져오기 (Retrieve security credentials from instance metadata)
인스턴스의 애플리케이션은 인스턴스 메타데이터 항목 iam/security-credentials/role-name에서 역할이 제공하는 보안 자격 증명을 가져와요. 애플리케이션에는 역할과 연결된 보안 자격 증명을 통해 역할에 정의한 작업(action)과 리소스에 대한 권한이 부여돼요. 이 보안 자격 증명은 임시이며 AWS가 자동으로 회전(rotate)해요. AWS는 이전 자격 증명이 만료되기 최소 5분 전에 새 자격 증명을 제공해요.
출처: 문서
본문
인스턴스 메타데이터에 대한 자세한 내용은 Use instance metadata to manage your EC2 instance를 참고하세요.
경고
IAM 역할과 함께 인스턴스 메타데이터를 사용하는 서비스를 사용한다면, 해당 서비스가 사용자를 대신해 HTTP 호출을 할 때 자격 증명을 노출하지 않도록 주의하세요. 자격 증명을 노출할 수 있는 서비스 유형에는 HTTP 프록시, HTML/CSS 검증기 서비스, XML 포함(include)을 지원하는 XML 프로세서가 있어요.
Amazon EC2 워크로드의 경우 아래에 설명된 방법으로 세션 자격 증명을 가져올 것을 권장해요. 이 자격 증명을 사용하면 인스턴스에 이미 연결된 것과 동일한 역할을 가정하기 위해 sts:AssumeRole을 사용하지 않고도 워크로드가 AWS API 요청을 할 수 있어야 해요. 속성 기반 액세스 제어(ABAC)를 위해 세션 태그를 전달하거나 역할의 권한을 더 제한하는 세션 정책을 전달해야 하는 경우가 아니라면, 이러한 역할 가정 호출은 동일한 임시 역할 세션 자격 증명의 새 집합을 만들 뿐이라서 필요하지 않아요.
워크로드가 역할을 사용해 자기 자신을 가정한다면, 그 역할이 자신을 가정하도록 명시적으로 허용하는 신뢰 정책(trust policy)을 만들어야 해요. 신뢰 정책을 만들지 않으면 AccessDenied 오류가 발생해요. 자세한 내용은 IAM User Guide의 Update a role trust policy를 참고하세요.
IMDSv2
Linux: Linux 인스턴스에서 다음 명령을 실행해 IAM 역할의 보안 자격 증명을 가져와요.
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
Windows: Windows 인스턴스에서 다음 cmdlet을 실행해 IAM 역할의 보안 자격 증명을 가져와요.
[string]$token = Invoke-RestMethod `
-Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
-Method PUT -Uri http://169.254.169.254/latest/api/token
Invoke-RestMethod `
-Headers @{"X-aws-ec2-metadata-token" = $token} `
-Method GET -Uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
IMDSv1
Linux: Linux 인스턴스에서 다음 명령을 실행해 IAM 역할의 보안 자격 증명을 가져와요.
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
Windows: Windows 인스턴스에서 다음 cmdlet을 실행해 IAM 역할의 보안 자격 증명을 가져와요.
Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
다음은 예시 출력이에요. 보안 자격 증명을 가져오지 못하는 경우 IAM User Guide의 I can't access the temporary security credentials on my EC2 instance를 참고하세요.
{
"Code" : "Success",
"LastUpdated" : "2012-04-26T16:39:16Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
"SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"Token" : "token",
"Expiration" : "2017-05-17T15:09:54Z"
}
인스턴스에서 실행되는 애플리케이션, AWS CLI, Tools for Windows PowerShell 명령의 경우 임시 보안 자격 증명을 명시적으로 가져올 필요가 없어요. AWS SDK, AWS CLI, Tools for Windows PowerShell이 EC2 인스턴스 메타데이터 서비스에서 자격 증명을 자동으로 가져와 사용하기 때문이에요. 임시 보안 자격 증명을 사용해 인스턴스 외부에서 호출하려면(예: IAM 정책 테스트) 액세스 키, 시크릿 키, 세션 토큰을 제공해야 해요. 자세한 내용은 IAM User Guide의 Using Temporary Security Credentials to Request Access to AWS Resources를 참고하세요.