本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從密碼型身分驗證 (AUTH) 遷移至 IAM 身分驗證
本指南說明如何將 Amazon ElastiCache 節點型叢集或無伺服器快取從密碼型身分驗證 (AUTH) 遷移至 AWS Identity and Access Management (IAM) 身分驗證,而不會中斷服務。
注意
建議您在非生產環境中測試此遷移,然後再將變更套用至生產環境。
概觀
IAM 身分驗證透過消除對長期密碼的需求,提供增強的安全性。相反地,應用程式會使用 AWS Signature 第 4 版簽署程序產生短期身分驗證字符 (有效期最長 15 分鐘)。
先決條件
開始之前,確認下列事項:
-
您的快取正在執行 Redis OSS 7.0 或更新版本,或 Valkey。舊版引擎不支援 IAM 身分驗證。
-
您的快取上已啟用傳輸中加密 (TLS)。IAM 身分驗證需要 TLS。如需詳細資訊,請參閱ElastiCache 傳輸中加密 (TLS)。
-
您擁有建立使用者和修改使用者群組所需的 IAM 許可。如需詳細資訊,請參閱如何搭配使用 Amazon ElastiCache 與 IAM。
-
應用程式使用的 IAM 角色或使用者具有 IAM 政策,允許目標快取和 IAM 使用者執行
elasticache:Connect動作。如需詳細資訊,請參閱以 IAM 進行身分驗證。 -
您的應用程式沒有其他 IAM 身分驗證限制。如需限制的完整清單,請參閱 以 IAM 進行身分驗證。
遷移程序
遷移程序涉及建立密碼型使用者和 IAM 驗證使用者、驗證連線,然後將您的應用程式轉換為 IAM 身分驗證。
步驟 1:建立使用者
建立兩個 ElastiCache 使用者,讓您的快取在遷移期間支援密碼型和 IAM 身分驗證。
建立密碼型身分驗證使用者
注意
如果您已設定密碼型使用者,您可以略過建立新的使用者,並使用現有的使用者。
使用下列 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 Signature 第 4 版簽署程序產生 IAM 身分驗證字符,並在用戶端AUTH命令中將其作為密碼傳遞。
完成遷移
在您的應用程式可以使用 IAM 身分驗證進行連線後,請完成下列步驟以完成遷移。
步驟 1:使用備用設定 IAM 身分驗證
移除密碼型使用者之前,請更新您的應用程式碼以使用 IAM 身分驗證做為主要方法,同時將密碼型使用者保留為備用。
在您的應用程式程式碼中:
-
將用戶端設定為使用 IAM 產生的字符做為主要方法進行身分驗證。
-
新增備用機制,以便在 IAM 身分驗證失敗 (例如,由於權杖過期或產生錯誤) 時,用戶端會使用密碼型 AUTH 憑證重試。
-
記錄所有身分驗證嘗試,包括備用和重試,以便您可以監控是否有任何連線落回以密碼為基礎的身分驗證。
步驟 2:監控和驗證
在至少 IamAuthenticationThrottling 24-48 小時內檢閱您的應用程式日誌和 IamAuthenticationExpirations和 Amazon CloudWatch 指標,以確認所有連線都是透過 IAM 進行。
任一指標的非零值都需進行調查:
-
IamAuthenticationExpirations– IAM 驗證連線會在 12 小時後自動中斷連線。使用新的 IAM 身分驗證字符傳送AUTH或HELLO命令,可以延長連線。 -
IamAuthenticationThrottling– 表示身分驗證請求太多,這可能表示您的應用程式產生字符過於積極或有連線集區問題。
對於節點型叢集,您可以執行其他引擎層級檢查:
-
ACL LOG– 檢查身分驗證嘗試是否失敗。尋找具有 的項目reason=auth。 -
CLIENT LIST– 驗證已連線的使用者。檢查user=欄位以確認用戶端正在使用 IAM 使用者。
ACL LOG 和 CLIENT 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 中建立的密碼型使用者沒有使用者名稱 default,您可以使用上述針對 Valkey 快取顯示的相同命令直接將其移除。
取代:
<disabled-default-id>– 已停用預留位置使用者的唯一 ID (僅限 Redis OSS)。<user-group-id>– 與您的快取相關聯的使用者群組 ID。<password-user-id>– 要移除的密碼型使用者的使用者 ID。
注意
從使用者群組中移除密碼型使用者後,請勿將其刪除。如果您需要轉返以密碼為基礎的身分驗證,請將其保持可用狀態。
步驟 4:確認移除後
從使用者群組中移除密碼型使用者之後,請監控 AuthenticationFailures Amazon CloudWatch 指標。持續值為零可確認未發生身分驗證失敗,包括任何以密碼為基礎的剩餘嘗試。在此指標上設定 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)。