設定 RDS Proxy 的資料庫登入資料 - Amazon Aurora

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

設定 RDS Proxy 的資料庫登入資料

Amazon RDS 中的 RDS Proxy 會使用 AWS Secrets Manager 來安全地存放和管理資料庫登入資料。您可以將代理與包含必要身分驗證詳細資訊的 Secrets Manager 秘密建立關聯,而不是在應用程式中內嵌憑證。您在 Aurora 資料庫叢集上為代理連線的每個資料庫使用者帳戶建立個別的 Secrets Manager 秘密。

或者,您可以將 RDS Proxy 設定為使用end-to-end IAM 身分驗證,這樣就不需要在 Secrets Manager 中存放資料庫登入資料。RDS Proxy 會針對client-to-proxy連線和 proxy-to-database連線使用 IAM 身分驗證。這提供完全整合的 IAM 型身分驗證解決方案,不需要管理秘密或密碼。如需新增 IAM 資料庫使用者的相關資訊,請參閱 使用 IAM 身分驗證建立資料庫帳戶

建立要與 RDS Proxy 搭配使用的秘密

建立代理之前,您必須先建立至少一個存放資料庫憑證的秘密。

若要建立機密
  1. 請開啟位於 https://console.aws.amazon.com/secretsmanager/ 的機密管理員控制台。

  2. 選擇 Store a new secret (存放新機密)。

  3. 選擇 Amazon RDS 資料庫的憑證

  4. 輸入使用者名稱和密碼。您輸入的憑證必須符合存在於相關聯 RDS 資料庫中資料庫使用者的憑證。RDS Proxy 使用這些憑證來代表應用程式驗證和建立與資料庫的連線。

    如果不相符,您可以更新秘密以符合資料庫密碼。在您更新秘密之前,嘗試使用該秘密透過代理連線會失敗,但使用其他有效秘密的連線仍然可運作。

    注意

    對於 RDS for SQL Server,RDS Proxy 需要在 Secrets Manager 中設定區分大小寫的秘密,無論資料庫執行個體定序設定為何。如果您的應用程式允許具有不同大小寫的使用者名稱,例如 "Admin" 和 "admin",您必須為每個使用者名稱建立個別秘密。RDS Proxy 不支援用戶端和代理之間的不區分大小寫使用者名稱身分驗證。

    如需有關 SQL Server 中定序的詳細資訊,請參閱 Microsoft SQL Server 文件。

  5. 對於資料庫,請選取秘密將會存取的 Amazon RDS 資料庫。

  6. 填入秘密的其他設定,然後選擇儲存。如需完整指示,請參閱《AWS Secrets Manager 使用者指南》中的建立 AWS Secrets Manager 秘密

當您透過 建立代理時 AWS CLI,您可以指定對應秘密的 Amazon Resource Name (ARNs)。您可以針對代理可以存取的所有資料庫使用者帳戶執行此操作。在 中 AWS Management Console,您可以依秘密的描述性名稱來選擇秘密。

  • 若要建立 Secrets Manager 秘密以搭配 RDS Proxy 使用,請使用 create-secret 命令:

    aws secretsmanager create-secret \ --name "secret_name" \ --description "secret_description" \ --region region_name \ --secret-string '{"username":"db_user","password":"db_user_password"}'
  • 您也可以建立自訂金鑰來加密 Secrets Manager 秘密。以下命令會建立範例金鑰。

    aws kms create-key --description "test-key" --policy '{ "Id":"kms-policy", "Version": "2012-10-17", "Statement": [ { "Sid":"Enable IAM User Permissions", "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::account_id:root"}, "Action":"kms:*","Resource":"*" }, { "Sid":"Allow access for Key Administrators", "Effect":"Allow", "Principal": { "AWS": ["$USER_ARN","arn:aws:iam:account_id::role/Admin"] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource":"*" }, { "Sid":"Allow use of the key", "Effect":"Allow", "Principal":{"AWS":"$ROLE_ARN"}, "Action":["kms:Decrypt","kms:DescribeKey"], "Resource":"*" } ] }'

例如,下列命令會為兩個資料庫使用者建立 Secrets Manager 秘密:

aws secretsmanager create-secret \ --name secret_name_1 --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' aws secretsmanager create-secret \ --name secret_name_2 --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}'

若要建立以自訂 AWS KMS 金鑰加密的秘密,請使用下列命令:

aws secretsmanager create-secret \ --name secret_name_1 --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' \ --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id aws secretsmanager create-secret \ --name secret_name_2 --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}' \ --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id

若要查看您 AWS 帳戶擁有的秘密,請使用 list-secrets 命令:

aws secretsmanager list-secrets

當您使用 CLI 建立代理時,您會將一個或多個秘密的 Amazon Resource Names (ARN) 傳遞給 --auth 參數。下列範例顯示如何僅使用 AWS 帳戶擁有的每個秘密名稱和 ARN 來準備報告。此範例使用第 2 AWS CLI 版中可用的 --output table 參數。如果您使用的是第 1 AWS CLI 版,請--output text改用 。

aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table

若要確認秘密包含正確格式的正確憑證,請使用 get-secret-value 命令。將 your_secret_name 取代為秘密的簡短名稱或 ARN。

aws secretsmanager get-secret-value --secret-id your_secret_name

輸出包含具有類似下列項目的 JSON 編碼值的行:

... "SecretString": "{\"username\":\"your_username\",\"password\":\"your_password\"}", ...