View a markdown version of this page

從密碼型身分驗證 (AUTH) 遷移至 IAM 身分驗證 - Amazon ElastiCache

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

從密碼型身分驗證 (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> – 快取使用的引擎: valkeyredis

  • <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> – 快取使用的引擎: valkeyredis

步驟 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> – 快取使用的引擎: valkeyredis

  • <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-cliredis-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 身分驗證字符傳送 AUTHHELLO命令,可以延長連線。

  • 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 中建立的密碼型使用者沒有使用者名稱 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)。