

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

# 의 자격 증명 캐싱 AWS SDK for Java 2.x
<a name="credential-caching"></a>

는 자격 증명 캐싱을 AWS SDK for Java 2.x 구현하여 성능을 개선하고 자격 증명 소스에 대한 호출을 줄입니다. 이 섹션에서는 자격 증명 캐싱의 작동 방식과 애플리케이션에 맞게 자격 증명을 구성하는 방법을 설명합니다.

## 자격 증명 공급자 캐싱 이해
<a name="understanding-credential-provider-caching"></a>

SDK for Java 2.x의 자격 증명 공급자는 다양한 캐싱 전략을 사용합니다.
+ **내부 자격 증명 캐싱**: 많은 공급자가 검색한 자격 증명을 캐시합니다.
+ **자동 새로 고침**: 캐시된 자격 증명이 있는 공급자는 새로 고침 메커니즘을 구현합니다.

### 내부 자격 증명 캐싱이 있는 공급자
<a name="providers-with-internal-caching"></a>

다음 자격 증명 공급자는 새 인스턴스를 만들 때도 자격 증명을 내부적으로 캐시합니다.
+ **인스턴스 프로파일 자격 증명 공급자**: Amazon EC2 메타데이터 서비스에서 자격 증명을 캐시합니다.
+ **컨테이너 자격 증명 공급자**: 컨테이너 메타데이터 엔드포인트에서 자격 증명을 캐시합니다.
+ **STS 기반 공급자**: AWS Security Token Service (STS)에서 임시 자격 증명을 캐시합니다.
+ **웹 ID 토큰 공급자**: 웹 ID 토큰에서 얻은 자격 증명을 캐시합니다.
+ **프로세스 자격 증명 공급자**: 외부 프로세스에서 자격 증명을 캐시합니다.

### 내부 캐싱이 없는 공급자
<a name="providers-without-caching"></a>

다음 공급자는 내부 캐싱을 구현하지 않습니다.
+ **환경 변수 자격 증명 공급자**
+ **시스템 속성 자격 증명 공급자**
+ **정적 자격 증명 공급자**

## 자격 증명 캐싱 구성
<a name="configuring-credential-caching"></a>

자격 증명 공급자를 구축할 때 캐싱 동작을 사용자 지정할 수 있습니다.

### 기한 경과 시간
<a name="stale-time"></a>

자격 증명이 오래된 것으로 간주되어 새로 고침이 필요한 경우를 제어합니다.

```
.staleTime(Duration.ofMinutes(2))  // Consider stale 2 minutes before expiration.
```

### 미리 가져오기 시간
<a name="prefetch-time"></a>

만료되기 전에 자격 증명 새로 고침을 시작할 시기를 결정합니다.

```
.prefetchTime(Duration.ofMinutes(10))  // Start refresh 10 minutes before expiration.
```

### 비동기식 업데이트
<a name="async-updates"></a>

백그라운드 자격 증명 새로 고침을 사용합니다.

```
.asyncCredentialUpdateEnabled(true)  // Refresh credentials in background thread.
```

### 세션 지속 시간
<a name="session-duration"></a>

STS 기반 공급자의 경우는 임시 자격 증명이 유효한 기간을 제어합니다.

```
.refreshRequest(r -> r.durationSeconds(3600))  // 1 hour session.
```

## 자격 증명 구성 캐싱 예제
<a name="example-optimized-sts-config"></a>

자격 증명 공급자 구현을 위한 캐싱을 구성하는 예로 SDK가 백그라운드 스레드를 사용하여 자격 증명이 만료되기 전에 미리 가져오도록(사전 검색) 할 수 있습니다. 이렇게 하면 새 자격 증명을 검색하는 차단 직접 호출을 방지할 수 있습니다.

다음은 빌더에서 `[asyncCredentialUpdateEnabled](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsCredentialsProvider.BaseBuilder.html#asyncCredentialUpdateEnabled(java.lang.Boolean))` 속성을 `true`로 설정하여 백그라운드 스레드를 사용해 자격 증명을 미리 가져오는 `[StsAssumeRoleCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProvider.html)`를 만드는 예제입니다.

```
StsAssumeRoleCredentialsProvider provider = StsAssumeRoleCredentialsProvider.builder()
    .refreshRequest(r -> r
        .roleArn("arn:aws:iam::111122223333:role/example-role")
        .roleSessionName("example-session")
        .durationSeconds(3600))  // 1 hour session
    .staleTime(Duration.ofMinutes(5))  // Consider stale 5 minutes before expiration
    .prefetchTime(Duration.ofMinutes(10))  // Start refresh 10 minutes before expiration
    .asyncCredentialUpdateEnabled(true)  // Refresh in background
    .build();

S3Client s3 = S3Client.builder()
    .credentialsProvider(provider)
    .build();
```

에서 작업을 `s3Client` 처음 호출하면 `[AssumeRoleRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/model/AssumeRoleRequest.html)`가 AWS Security Token Service (STS)로 전송됩니다. STS는 15분(900초) 동안 유효한 임시 자격 증명을 반환합니다. `s3Client` 인스턴스는 15분이 경과하기 전에 새로 고침될 때까지 캐시된 자격 증명을 사용합니다. 기본적으로 SDK는 현재 세션의 만료 시간 5분\$11분 전에 새 세션에 대한 새 자격 증명을 검색하려고 시도합니다. 사전 가져오기 기간에는 `[prefetchTime](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsCredentialsProvider.BaseBuilder.html#prefetchTime(java.time.Duration))` 및 `[staleTime](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsCredentialsProvider.BaseBuilder.html#staleTime(java.time.Duration))` 속성을 사용하여 구성할 수 있습니다.

다음과 같은 세션 기반 자격 증명 공급자를 유사하게 구성할 수 있습니다.
+ `StsWebIdentityTokenFileCredentialsProvider`
+ `StsGetSessionTokenCredentialsProvider`
+ `StsGetFederationTokenCredentialsProvider`
+ `StsAssumeRoleWithWebIdentityCredentialsProvider`
+ `StsAssumeRoleWithSamlCredentialsProvider`
+ `StsAssumeRoleCredentialsProvider`
+ `DefaultCredentialsProvider`(세션을 사용하는 자격 증명 공급자에 위임하는 경우)
+ `ProcessCredentialsProvider`
+ `WebIdentityTokenFileCredentialsProvider`
+ `ContainerCredentialsProvider`
+ `InstanceProfileCredentialsProvider`

자격 증명 캐싱을 이해하면 작업 시 애플리케이션의 성능과 신뢰성을 최적화하는 데 도움이 됩니다 AWS 서비스.