

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

# 암호 기반 인증(AUTH)에서 IAM 인증으로 마이그레이션
<a name="auth-to-iam-migration"></a>

이 가이드에서는 서비스 중단 없이 Amazon ElastiCache 노드 기반 클러스터 또는 서버리스 캐시를 암호 기반 인증(AUTH)에서 AWS Identity and Access Management (IAM) 인증으로 마이그레이션하는 방법을 설명합니다.

**참고**  
프로덕션 환경에 변경 사항을 적용하기 전에 비프로덕션 환경에서이 마이그레이션을 테스트하는 것이 좋습니다.

## 개요
<a name="auth-to-iam-overview"></a>

IAM 인증은 수명이 긴 암호의 필요성을 제거하여 보안을 강화합니다. 대신 애플리케이션은 [AWS 서명 버전 4 서명 프로세스를](https://docs.aws.amazon.com//general/latest/gr/signature-version-4.html) 사용하여 수명이 짧은 인증 토큰(최대 15분 동안 유효)을 생성합니다.

## 사전 조건
<a name="auth-to-iam-prereqs"></a>

시작하기 전에 다음을 확인하세요.
+ 캐시에서 Redis OSS 7.0 이상 또는 Valkey를 실행 중입니다. 이전 엔진 버전에서는 IAM 인증이 지원되지 않습니다.
+ 전송 중 데이터 암호화(TLS)는 캐시에서 활성화됩니다. IAM 인증에는 TLS가 필요합니다. 자세한 내용은 [ElastiCache 전송 중 데이터 암호화(TLS)](in-transit-encryption.md) 단원을 참조하십시오.
+ 사용자를 생성하고 사용자 그룹을 수정하는 데 필요한 IAM 권한이 있습니다. 자세한 내용은 [Amazon ElastiCache IAM의 작동 방식](security_iam_service-with-iam.md) 단원을 참조하십시오.
+ 애플리케이션이 사용하는 IAM 역할 또는 사용자에게는 대상 캐시 및 IAM 사용자에 대한 `elasticache:Connect` 작업을 허용하는 IAM 정책이 있습니다. 자세한 내용은 [IAM을 통한 인증](auth-iam.md) 단원을 참조하십시오.
+ 애플리케이션에는 추가 IAM 인증 제한이 적용되지 않습니다. 제한 사항의 전체 목록은 섹션을 참조하세요[IAM을 통한 인증](auth-iam.md).

## 마이그레이션 프로세스
<a name="auth-to-iam-process"></a>

마이그레이션 프로세스에는 암호 기반 사용자와 IAM 인증 사용자를 모두 생성하고 연결을 확인한 다음 애플리케이션을 IAM 인증으로 전환하는 작업이 포함됩니다.

### 1단계: 사용자 생성
<a name="auth-to-iam-create-users"></a>

마이그레이션 기간 동안 캐시가 암호 기반 인증과 IAM 인증을 모두 지원하도록 두 명의 ElastiCache 사용자를 생성합니다.

**암호 기반 인증 사용자 생성**

**참고**  
암호 기반 사용자가 이미 구성되어 있는 경우 새 사용자를 생성하지 않고 기존 사용자를 사용할 수 있습니다.

다음 AWS CLI 명령을 사용하여 암호 기반 사용자를 생성합니다.

Linux, macOS, Unix의 경우:

```
aws elasticache create-user \
  --user-id {{<user-id>}} \
  --user-name default \
  --engine {{<engine>}} \
  --passwords "{{<your-existing-auth-password>}}" \
  --access-string "on ~* +@all"
```

Windows의 경우:

```
aws elasticache create-user ^
  --user-id {{<user-id>}} ^
  --user-name default ^
  --engine {{<engine>}} ^
  --passwords "{{<your-existing-auth-password>}}" ^
  --access-string "on ~* +@all"
```

다음과 같이 바꿉니다.
+ {{<user-id>}} -이 사용자의 고유 ID입니다.
+ {{<engine>}} - 캐시에서 사용하는 엔진: `valkey` 또는 `redis`.
+ {{<your-existing-auth-password>}} - 현재 캐시에 구성된 AUTH 토큰입니다.

**IAM 인증 사용자 생성**

다음 AWS CLI 명령을 사용하여 IAM 인증 사용자를 생성합니다.

Linux, macOS, Unix의 경우:

```
aws elasticache create-user \
  --user-id {{<iam-user-id>}} \
  --user-name {{<iam-user-name>}} \
  --authentication-mode Type=iam \
  --engine {{<engine>}} \
  --access-string "on ~* +@all"
```

Windows의 경우:

```
aws elasticache create-user ^
  --user-id {{<iam-user-id>}} ^
  --user-name {{<iam-user-name>}} ^
  --authentication-mode Type=iam ^
  --engine {{<engine>}} ^
  --access-string "on ~* +@all"
```

다음과 같이 바꿉니다.
+ {{<iam-user-id>}} - IAM 사용자의 고유 ID입니다.
+ {{<iam-user-name>}} - IAM 사용자의 사용자 이름입니다.
+ {{<engine>}} - 캐시에서 사용하는 엔진: `valkey` 또는 `redis`.

### 2단계: 사용자 그룹 생성 및 연결
<a name="auth-to-iam-user-group"></a>

암호 기반 사용자가 포함된 사용자 그룹이 이미 있는 경우 IAM 인증 사용자를 기존 그룹에 추가합니다.

Linux, macOS, Unix의 경우:

```
aws elasticache modify-user-group \
  --user-group-id {{<user-group-id>}} \
  --user-ids-to-add {{<iam-user-id>}}
```

Windows의 경우:

```
aws elasticache modify-user-group ^
  --user-group-id {{<user-group-id>}} ^
  --user-ids-to-add {{<iam-user-id>}}
```

다음과 같이 바꿉니다.
+ {{<user-group-id>}} - 기존 사용자 그룹의 ID입니다.
+ {{<iam-user-id>}} - 1단계에서 생성한 IAM 인증 사용자의 사용자 ID입니다.

[3단계: 두 인증 방법 모두 확인](#auth-to-iam-verify-dual) 단원을 참조하십시오.

그렇지 않으면 새 사용자 그룹을 생성하고, 두 사용자를 모두 추가하고, 그룹을 캐시에 연결합니다.

다음 AWS CLI 명령을 사용하여 두 사용자로 사용자 그룹을 생성합니다.

Linux, macOS, Unix의 경우:

```
aws elasticache create-user-group \
  --user-group-id {{<user-group-id>}} \
  --engine {{<engine>}} \
  --user-ids {{<user-id>}} {{<iam-user-id>}}
```

Windows의 경우:

```
aws elasticache create-user-group ^
  --user-group-id {{<user-group-id>}} ^
  --engine {{<engine>}} ^
  --user-ids {{<user-id>}} {{<iam-user-id>}}
```

다음과 같이 바꿉니다.
+ {{<user-group-id>}} - 사용자 그룹의 고유 ID입니다.
+ {{<engine>}} - 캐시에서 사용하는 엔진: `valkey` 또는 `redis`.
+ {{<user-id>}}, {{<iam-user-id>}} - 1단계에서 생성한 사용자 IDs.

그런 다음 새 사용자 그룹을 사용하도록 캐시를 수정합니다.

노드 기반 클러스터의 경우:

Linux, macOS, Unix의 경우:

```
aws elasticache modify-replication-group \
  --replication-group-id {{<replication-group-id>}} \
  --auth-token-update-strategy DELETE \
  --user-group-ids-to-add {{<user-group-id>}}
```

Windows의 경우:

```
aws elasticache modify-replication-group ^
  --replication-group-id {{<replication-group-id>}} ^
  --auth-token-update-strategy DELETE ^
  --user-group-ids-to-add {{<user-group-id>}}
```

다음과 같이 바꿉니다.
+ {{<replication-group-id>}} - 복제 그룹의 ID입니다.
+ {{<user-group-id>}} - 위에서 생성한 사용자 그룹 ID입니다.

서버리스 캐시의 경우:

Linux, macOS, Unix의 경우:

```
aws elasticache modify-serverless-cache \
  --serverless-cache-name {{<serverless-cache-name>}} \
  --user-group-id {{<user-group-id>}}
```

Windows의 경우:

```
aws elasticache modify-serverless-cache ^
  --serverless-cache-name {{<serverless-cache-name>}} ^
  --user-group-id {{<user-group-id>}}
```

다음과 같이 바꿉니다.
+ {{<serverless-cache-name>}} - 서버리스 캐시의 이름입니다.
+ {{<user-group-id>}} - 위에서 생성한 사용자 그룹 ID입니다.

### 3단계: 두 인증 방법 모두 확인
<a name="auth-to-iam-verify-dual"></a>

2단계를 완료한 후 캐시는 두 인증 방법을 모두 지원합니다. 계속하기 전에 애플리케이션이 두 방법을 모두 사용하여 연결할 수 있는지 확인합니다.
+ 암호 기반 인증을 사용하는 애플리케이션은 암호로 계속 연결할 수 있습니다.
+ IAM 인증을 위해 구성된 애플리케이션은 IAM 토큰을 사용하여 연결할 수 있습니다.

### 4단계: IAM에 연결
<a name="auth-to-iam-connect"></a>

**IAM 인증 토큰 생성**

[AWS SigV4 미리 서명된 요청을](https://docs.aws.amazon.com//general/latest/gr/sigv4-signed-request-examples.html) 사용하여 수명이 짧은 IAM 인증 토큰을 생성합니다. 다음 Python 예제에서는 토큰 생성을 보여줍니다.

```
import boto3
from botocore.auth import SigV4QueryAuth
from botocore.awsrequest import AWSRequest

cache_name = "<cache-name>"
user = "<username>"
region = "<region>"
expires = 900

session = boto3.Session()
credentials = session.get_credentials().get_frozen_credentials()

req = AWSRequest(
    method="GET",
    url=f"http://{cache_name}/",
    params={"Action": "connect", "User": user}
)
SigV4QueryAuth(credentials, "elasticache", region, expires=expires).add_auth(req)

token = req.url.replace("http://", "")
print(token)
```

**참고**  
생성된 토큰은 생성 후 최대 15분 동안 유효합니다.

**valkey-cli를 사용하여 연결**

생성된 토큰을 사용하여 ElastiCache 캐시에 연결합니다. **valkey-cli** 또는 **redis-cli**를 사용하여 Valkey 클러스터에 연결할 수 있습니다. Redis OSS 클러스터의 경우를 사용합니다**redis-cli**.

```
valkey-cli -h {{<host>}} -p 6379 --tls
```

클러스터 모드가 활성화된 클러스터의 경우 `--cluster` 플래그를 추가합니다.

```
valkey-cli -h {{<host>}} -p 6379 --tls --cluster
```

그런 다음 다음 명령을 사용하여 인증합니다.

```
AUTH {{<username>}} {{<token>}}
```

다음과 같이 바꿉니다.
+ {{<host>}} - 캐시의 엔드포인트입니다.
+ {{<username>}} - IAM 인증 사용자의 사용자 이름입니다.
+ {{<token>}} - 생성한 IAM 인증 토큰입니다.

예상 결과:

```
OK
```

다음 명령을 실행하여 사용자 이름을 확인합니다.

```
ACL WHOAMI
```

### 5단계: 애플리케이션 통합
<a name="auth-to-iam-app-integration"></a>

Java 애플리케이션의 경우 기본 AWS 자격 증명 공급자 체인을 사용하여 임시 보안 자격 증명을 생성합니다. 자세한 내용은 [IAM을 통한 인증](auth-iam.md) 단원을 참조하십시오. 다른 언어의 경우 [AWS 서명 버전 4 서명 프로세스를](https://docs.aws.amazon.com//general/latest/gr/signature-version-4.html) 사용하여 IAM 인증 토큰을 생성하고 클라이언트 `AUTH` 명령의 암호로 전달합니다.

## 마이그레이션 완료
<a name="auth-to-iam-completing"></a>

애플리케이션이 IAM 인증을 사용하여 연결할 수 있게 되면 다음 단계를 완료하여 마이그레이션을 완료합니다.

### 1단계: 대체를 사용하여 IAM 인증 구성
<a name="auth-to-iam-fallback"></a>

암호 기반 사용자를 제거하기 전에 애플리케이션 코드를 업데이트하여 IAM 인증을 기본 방법으로 사용하는 동시에 암호 기반 사용자를 대체 방법으로 유지합니다.

애플리케이션 코드에서:
+ IAM 생성 토큰을 기본 방법으로 사용하여 인증하도록 클라이언트를 구성합니다.
+ IAM 인증이 실패할 경우(예: 토큰 만료 또는 생성 오류) 클라이언트가 암호 기반 AUTH 자격 증명을 사용하여 재시도하도록 폴백 메커니즘을 추가합니다.
+ 폴백 및 재시도를 포함한 모든 인증 시도를 로깅하여 연결이 암호 기반 인증으로 폴백되는지 모니터링할 수 있습니다.

### 2단계: 모니터링 및 확인
<a name="auth-to-iam-monitor"></a>

최소 24\~48시간 동안 애플리케이션 로그와 `IamAuthenticationExpirations` 및 `IamAuthenticationThrottling` Amazon CloudWatch 지표를 검토하여 모든 연결이 IAM을 통과하는지 확인합니다.

두 지표 중 하나에 대해 0이 아닌 값을 지정하면 조사가 필요합니다.
+ `IamAuthenticationExpirations` - IAM 인증 연결은 12시간 후에 자동으로 연결이 해제됩니다. 새 IAM 인증 토큰을 사용하여 `AUTH` 또는 `HELLO` 명령을 전송하여 연결을 연장할 수 있습니다.
+ `IamAuthenticationThrottling` - 인증 요청이 너무 많음을 나타냅니다. 이는 애플리케이션이 토큰을 너무 적극적으로 생성하거나 연결 풀링 문제가 있음을 의미할 수 있습니다.

노드 기반 클러스터의 경우 추가 엔진 수준 검사를 수행할 수 있습니다.
+ `ACL LOG` - 실패한 인증 시도가 있는지 확인합니다. 에서 항목을 찾습니다`reason=auth`.
+ `CLIENT LIST` - 연결된 사용자를 확인합니다. `user=` 필드를 확인하여 클라이언트가 IAM 사용자를 사용하고 있는지 확인합니다.

`ACL LOG` 및 `CLIENT LIST`는 노드 기반 클러스터에서만 사용할 수 있습니다. ElastiCache Serverless 배포의 경우 애플리케이션 측 로깅 및 Amazon CloudWatch 지표를 사용합니다.

### 3단계: 암호 기반 사용자 제거
<a name="auth-to-iam-remove-user"></a>

모든 애플리케이션이 IAM 인증을 사용하는지 확인한 후 사용자 그룹에서 암호 기반 사용자를 제거합니다.

**Valkey 캐시**

암호 기반 사용자를 직접 제거합니다.

Linux, macOS, Unix의 경우:

```
aws elasticache modify-user-group \
   --user-group-id {{<user-group-id>}} \
   --user-ids-to-remove {{<password-user-id>}}
```

Windows의 경우:

```
aws elasticache modify-user-group ^
   --user-group-id {{<user-group-id>}} ^
   --user-ids-to-remove {{<password-user-id>}}
```

**Redis OSS 캐시**

Redis OSS 캐시의 경우 사용자 그룹에는 항상 사용자 이름이 인 사용자가 포함되어야 합니다`default`. 1단계에서 생성한 암호 기반 사용자에게 사용자 이름이 있는 경우 제거 전에 비활성화된 자리 표시자 사용자를 생성하여 대체해야 `default`합니다.

Linux, macOS, Unix의 경우:

```
aws elasticache create-user \
   --user-id {{<disabled-default-id>}} \
   --user-name default \
   --engine redis \
   --no-password-required \
   --access-string "off ~* -@all"
```

Windows의 경우:

```
aws elasticache create-user ^
   --user-id {{<disabled-default-id>}} ^
   --user-name default ^
   --engine redis ^
   --no-password-required ^
   --access-string "off ~* -@all"
```

그런 다음 비활성화된 사용자를 그룹에 추가하고 암호 기반 사용자를 제거합니다.

Linux, macOS, Unix의 경우:

```
aws elasticache modify-user-group \
   --user-group-id {{<user-group-id>}} \
   --user-ids-to-add {{<disabled-default-id>}} \
   --user-ids-to-remove {{<password-user-id>}}
```

Windows의 경우:

```
aws elasticache modify-user-group ^
   --user-group-id {{<user-group-id>}} ^
   --user-ids-to-add {{<disabled-default-id>}} ^
   --user-ids-to-remove {{<password-user-id>}}
```

1단계에서 생성한 암호 기반 사용자에게 사용자 이름이 없는 경우 위의 Valkey 캐시에 표시된 것과 동일한 명령을 사용하여 직접 제거할 `default`수 있습니다.

다음과 같이 바꿉니다.
+ {{<disabled-default-id>}} - 비활성화된 자리 표시자 사용자의 고유 ID입니다(Redis OSS만 해당).
+ {{<user-group-id>}} - 캐시와 연결된 사용자 그룹의 ID입니다.
+ {{<password-user-id>}} - 제거할 암호 기반 사용자의 사용자 ID입니다.

**참고**  
암호 기반 사용자를 사용자 그룹에서 제거한 후에는 삭제하지 마십시오. 암호 기반 인증으로 롤백해야 하는 경우를 대비하여 계속 사용할 수 있습니다.

### 4단계: 제거 후 확인
<a name="auth-to-iam-confirm"></a>

사용자 그룹에서 암호 기반 사용자를 제거한 후 `AuthenticationFailures` Amazon CloudWatch 지표를 모니터링합니다. 값이 0이면 남은 암호 기반 시도를 포함하여 인증 실패가 발생하지 않음을 확인합니다. 이 지표에 CloudWatch 경보를 설정하여 예상치 못한 시도를 감지합니다.

노드 기반 클러스터의 경우 `ACL LOG` 및를 사용하여 확인할 수도 있습니다`CLIENT LIST`. 서버리스 캐시의 경우 애플리케이션 측 로깅 및 CloudWatch 지표를 사용합니다.

## 롤백 프로시저
<a name="auth-to-iam-rollback"></a>

암호 기반 사용자를 사용자 그룹에 다시 추가한 다음 조사하는 동안 애플리케이션에서 암호 기반 인증을 복원합니다.

Valkey 캐시의 경우:

Linux, macOS, Unix의 경우:

```
aws elasticache modify-user-group \
   --user-group-id {{<user-group-id>}} \
   --user-ids-to-add {{<password-user-id>}}
```

Windows의 경우:

```
aws elasticache modify-user-group ^
   --user-group-id {{<user-group-id>}} ^
   --user-ids-to-add {{<password-user-id>}}
```

암호 기반 사용자에게 사용자 이름이 없는 Redis OSS 캐시의 경우 위의 동일한 명령을 `default`사용합니다.

에서 비활성화된 자리 표시자 사용자를 생성한 Redis OSS 캐시의 경우 암호 기반 사용자를 [3단계: 암호 기반 사용자 제거](#auth-to-iam-remove-user)추가하고 비활성화된 자리 표시자 사용자를 단일 작업으로 제거합니다.

Linux, macOS, Unix의 경우:

```
aws elasticache modify-user-group \
   --user-group-id {{<user-group-id>}} \
   --user-ids-to-add {{<password-user-id>}} \
   --user-ids-to-remove {{<disabled-default-id>}}
```

Windows의 경우:

```
aws elasticache modify-user-group ^
   --user-group-id {{<user-group-id>}} ^
   --user-ids-to-add {{<password-user-id>}} ^
   --user-ids-to-remove {{<disabled-default-id>}}
```

다음과 같이 바꿉니다.
+ {{<user-group-id>}} - 캐시와 연결된 사용자 그룹의 ID입니다.
+ {{<password-user-id>}} - 다시 추가할 암호 기반 사용자의 사용자 ID입니다.
+ {{<disabled-default-id>}} - 비활성화된 자리 표시자 사용자의 사용자 ID입니다(Redis OSS만 해당).