

# 인스턴스 메타데이터에서 보안 자격 증명 검색
<a name="instance-metadata-security-credentials"></a>

인스턴스의 애플리케이션은 인스턴스 메타데이터 항목 `iam/security-credentials/`*role-name*에서 역할이 제공하는 보안 자격 증명을 검색합니다. 역할에 연결된 보안 자격 증명을 통해 역할에 정의한 작업 및 리소스에 대한 권한이 애플리케이션에 부여됩니다. 이러한 보안 자격 증명은 임시로 발급되며 자동으로 교체됩니다. 이전 자격 증명이 만료되기 최소 5분 전에 새 자격 증명이 제공됩니다.

인스턴스 메타데이터에 대한 자세한 내용은 [인스턴스 메타데이터를 사용하여 EC2 인스턴스를 관리합니다.](ec2-instance-metadata.md) 섹션을 참조하세요.

**주의**  
IAM 역할과 함께 인스턴스 메타데이터를 사용하는 서비스를 사용하는 경우 서비스에서 사용자 대신 HTTP 호출을 수행할 때 자격 증명이 노출되지 않도록 주의하세요. 자격 증명이 노출될 수 있는 서비스 유형은 HTTP 프록시, HTML/CSS 검증 서비스, XML 포함을 지원하는 XML 프로세서 등입니다.

Amazon EC2 워크로드의 경우 아래 설명된 방법을 사용하여 세션 자격 증명을 검색하는 것이 좋습니다. 이러한 자격 증명을 사용하면 `sts:AssumeRole`을 사용하여 인스턴스와 이미 연결된 동일한 역할을 맡을 필요 없이 워크로드에서 AWS API 요청을 수행할 수 있습니다. 속성 기반 액세스 제어(ABAC)에 대한 세션 태그를 전달하거나 역할의 권한을 추가로 제한하기 위해 세션 정책을 전달해야 하는 경우가 아니면 이러한 역할 수임 호출은 동일한 임시 역할 세션 자격 증명의 새 세트를 생성하므로 불필요합니다.

워크로드가 역할을 사용하여 자체적으로 수임하는 경우 해당 역할이 자체적으로 수임하도록 명시적으로 허용하는 신뢰 정책을 생성해야 합니다. 신뢰 정책을 생성하지 않으면 `AccessDenied` 오류가 발생합니다. 자세한 내용은 *IAM 사용 설명서*의 [역할 신뢰 정책 업데이트](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)를 참조하세요.

------
#### [ 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 사용 설명서*의 [제 EC2 인스턴스의 임시 보안 자격 증명에 액세스할 수 없습니다.](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_iam-ec2.html#troubleshoot_iam-ec2_no-keys)를 참조하세요.

```
{
  "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 사용 설명서*에서 [임시 보안 자격 증명을 사용하여 AWS 리소스에 대한 액세스 요청](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)을 참조하세요.