View a markdown version of this page

암호 기반 인증(AUTH)에서 IAM 인증으로 마이그레이션 - Amazon ElastiCache

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

암호 기반 인증(AUTH)에서 IAM 인증으로 마이그레이션

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

참고

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

개요

IAM 인증은 수명이 긴 암호의 필요성을 제거하여 보안을 강화합니다. 대신 애플리케이션은 AWS 서명 버전 4 서명 프로세스를 사용하여 수명이 짧은 인증 토큰(최대 15분 동안 유효)을 생성합니다.

사전 조건

시작하기 전에 다음을 확인하세요.

  • 캐시에서 Redis OSS 7.0 이상 또는 Valkey를 실행 중입니다. 이전 엔진 버전에서는 IAM 인증이 지원되지 않습니다.

  • 전송 중 데이터 암호화(TLS)는 캐시에서 활성화됩니다. IAM 인증에는 TLS가 필요합니다. 자세한 내용은 ElastiCache 전송 중 데이터 암호화(TLS) 단원을 참조하십시오.

  • 사용자를 생성하고 사용자 그룹을 수정하는 데 필요한 IAM 권한이 있습니다. 자세한 내용은 Amazon ElastiCache IAM의 작동 방식 단원을 참조하십시오.

  • 애플리케이션이 사용하는 IAM 역할 또는 사용자에게는 대상 캐시 및 IAM 사용자에 대한 elasticache:Connect 작업을 허용하는 IAM 정책이 있습니다. 자세한 내용은 IAM을 통한 인증 단원을 참조하십시오.

  • 애플리케이션에는 추가 IAM 인증 제한이 적용되지 않습니다. 제한 사항의 전체 목록은 섹션을 참조하세요IAM을 통한 인증.

마이그레이션 프로세스

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

1단계: 사용자 생성

마이그레이션 기간 동안 캐시가 암호 기반 인증과 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단계: 사용자 그룹 생성 및 연결

암호 기반 사용자가 포함된 사용자 그룹이 이미 있는 경우 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단계: 두 인증 방법 모두 확인 단원을 참조하십시오.

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

다음 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단계: 두 인증 방법 모두 확인

2단계를 완료한 후 캐시는 두 인증 방법을 모두 지원합니다. 계속하기 전에 애플리케이션이 두 방법을 모두 사용하여 연결할 수 있는지 확인합니다.

  • 암호 기반 인증을 사용하는 애플리케이션은 암호로 계속 연결할 수 있습니다.

  • IAM 인증을 위해 구성된 애플리케이션은 IAM 토큰을 사용하여 연결할 수 있습니다.

4단계: IAM에 연결

IAM 인증 토큰 생성

AWS SigV4 미리 서명된 요청을 사용하여 수명이 짧은 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단계: 애플리케이션 통합

Java 애플리케이션의 경우 기본 AWS 자격 증명 공급자 체인을 사용하여 임시 보안 자격 증명을 생성합니다. 자세한 내용은 IAM을 통한 인증 단원을 참조하십시오. 다른 언어의 경우 AWS 서명 버전 4 서명 프로세스를 사용하여 IAM 인증 토큰을 생성하고 클라이언트 AUTH 명령의 암호로 전달합니다.

마이그레이션 완료

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

1단계: 대체를 사용하여 IAM 인증 구성

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

애플리케이션 코드에서:

  • IAM 생성 토큰을 기본 방법으로 사용하여 인증하도록 클라이언트를 구성합니다.

  • IAM 인증이 실패할 경우(예: 토큰 만료 또는 생성 오류) 클라이언트가 암호 기반 AUTH 자격 증명을 사용하여 재시도하도록 폴백 메커니즘을 추가합니다.

  • 폴백 및 재시도를 포함한 모든 인증 시도를 로깅하여 연결이 암호 기반 인증으로 폴백되는지 모니터링할 수 있습니다.

2단계: 모니터링 및 확인

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

두 지표 중 하나에 대해 0이 아닌 값을 지정하면 조사가 필요합니다.

  • IamAuthenticationExpirations - IAM 인증 연결은 12시간 후에 자동으로 연결이 해제됩니다. 새 IAM 인증 토큰을 사용하여 AUTH 또는 HELLO 명령을 전송하여 연결을 연장할 수 있습니다.

  • IamAuthenticationThrottling - 인증 요청이 너무 많음을 나타냅니다. 이는 애플리케이션이 토큰을 너무 적극적으로 생성하거나 연결 풀링 문제가 있음을 의미할 수 있습니다.

노드 기반 클러스터의 경우 추가 엔진 수준 검사를 수행할 수 있습니다.

  • ACL LOG - 실패한 인증 시도가 있는지 확인합니다. 에서 항목을 찾습니다reason=auth.

  • CLIENT LIST - 연결된 사용자를 확인합니다. user= 필드를 확인하여 클라이언트가 IAM 사용자를 사용하고 있는지 확인합니다.

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

3단계: 암호 기반 사용자 제거

모든 애플리케이션이 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단계: 제거 후 확인

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

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

롤백 프로시저

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

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단계: 암호 기반 사용자 제거추가하고 비활성화된 자리 표시자 사용자를 단일 작업으로 제거합니다.

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만 해당).