

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# SDK for Java 2.x를 사용하여 Amazon EC2에서 IAM 역할 자격 증명 읽기
<a name="ec2-iam-roles"></a>

 IAM 역할을 사용하여 EC2 인스턴스에서 실행되고 AWS CLI 또는 AWS API 요청을 수행하는 애플리케이션의 임시 자격 증명을 관리할 수 있습니다. 이것은 EC2 인스턴스 내에 액세스 키를 저장하는 경우에 바람직한 방법입니다. EC2 인스턴스에 AWS 역할을 할당하고 모든 애플리케이션에서 사용할 수 있도록 하려면 인스턴스에 연결된 인스턴스 프로파일을 생성합니다. 인스턴스 프로필에는 역할이 포함되어 있으며 EC2 인스턴스에서 실행되는 프로그램이 임시 보안 인증을 얻을 수 있습니다. 자세한 정보는 *IAM 사용 설명서*의 [IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)를 참조하세요.

이 주제에서는 EC2 인스턴스에서 실행되도록 Java 애플리케이션을 설정하고가 IAM 역할 자격 증명을 획득 AWS SDK for Java 2.x 하도록 설정하는 방법에 대한 정보를 제공합니다.

## 환경에서 IAM 역할 자격 증명 획득
<a name="default-provider-chain"></a>

애플리케이션이 `create` 메서드(또는 `builder().build()` 메서드)를 사용하여 AWS 서비스 클라이언트를 생성하는 경우 Java용 SDK는 *기본 자격 증명 공급자 체인*을 사용합니다. 기본 자격 증명 공급자 체인은 SDK가 임시 자격 증명과 교환할 수 있는 구성 요소를 위한 실행 환경을 검색합니다. 이 [의 기본 자격 증명 공급자 체인 AWS SDK for Java 2.x](credentials-chain.md) 섹션에서는 전체 검색 프로세스를 설명합니다.

기본 공급자 체인의 마지막 단계는 애플리케이션이 Amazon EC2 인스턴스에서 실행되는 경우에만 사용할 수 있습니다. 이 단계에서는 SDK가 `InstanceProfileCredentialsProvider`를 사용하여 EC2 인스턴스 프로필에 정의된 IAM 역할을 읽습니다. 그런 다음 SDK는 해당 IAM 역할에 대한 임시 보안 인증을 획득합니다.

이러한 자격 증명은 임시용이므로 기간이 경과되면 만료되지만, `InstanceProfileCredentialsProvider`는 가져온 자격 증명을 통해 계속 AWS에 액세스할 수 있도록 자격 증명을 정기적으로 새로 고칩니다.

## 프로그래밍 방식으로 IAM 역할 자격 증명 획득
<a name="programmatic-configuration-for-IAM-role"></a>

최종적으로 EC2에서 `InstanceProfileCredentialsProvider`를 사용하는 기본 자격 증명 공급자 체인의 대안으로 `InstanceProfileCredentialsProvider`를 사용하여 서비스 클라이언트를 명시적으로 구성할 수 있습니다. 이 접근 방법은 다음 코드 조각에 나와 있습니다.

```
S3Client s3 = S3Client.builder()
       .credentialsProvider(InstanceProfileCredentialsProvider.create())
       .build();
```

## IAM 역할 자격 증명을 안전하게 획득
<a name="securely-read-IAM-role_credentials"></a>

기본적으로 EC2 인스턴스는 구성된 IAM 역할과 같은 정보에 SDK의 `InstanceProfileCredentialsProvider`가 액세스할 수 있도록 [IMDS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)(인스턴스 메타데이터 서비스)를 실행합니다. EC2 인스턴스는 기본적으로 2가지 버전의 IMDS를 실행합니다.
+ 인스턴스 메타데이터 서비스 버전 1(IMDSv1) – 요청/응답 방법
+ 인스턴스 메타데이터 서비스 버전 2(IMDSv2) – 세션 지향 방법

[IMDSv2는 IMDSv1보다 더 안전한 접근 방식](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/)입니다.

기본적으로 Java SDK는 먼저 IMDSv2를 시도하여 IAM 역할을 가져오지만, 실패하면 IMDSv1을 시도합니다. 그러나 IMDSv1은 덜 안전하므로 에서는 IMDSv2만 사용하고 SDK가 IMDSv1을 시도하지 못하도록 비활성화하는 것이 AWS 좋습니다.

보다 안전한 접근 방식을 사용하려면 다음 설정 중 하나에 `true` 값을 제공하여 SDK가 IMDSv1을 사용하지 않도록 설정합니다.
+ 환경 변수: `AWS_EC2_METADATA_V1_DISABLED`
+ JVM 시스템 속성: aws.`disableEc2MetadataV1`
+ 공유 구성 파일 설정: `ec2_metadata_v1_disabled`

이러한 설정 중 하나를 `true`로 설정하면 초기 IMDSv2 직접 호출이 실패할 경우 SDK는 IMDSv1을 사용하여 IMDS 역할 자격 증명을 로드하지 않습니다.