使SCRAM用後SQL密碼加密 - Amazon Relational Database Service

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

使SCRAM用後SQL密碼加密

鹽漬挑戰回應驗證機制 (SCRAM) 是 Postgre 用於加密密碼SQL的預設訊息摘要 (MD5) 演算法的替代方法。SCRAM驗證機制被認為比MD5. 若要深入瞭解這兩種不同的密碼保護方法,請參閱 Postgre SQL 文件中的密碼驗證

我們建議您使用SCRAM而非MD5作為 的密碼加密配置。RDS對於後置SQL數據庫實例。這是一種加密的挑戰回應機制,使用 scram-sha-256 演算法進行密碼身分驗證和加密。

您可能需要更新用戶端應用程式的程式庫才能支援SCRAM。例如,42.2.0 之前的JDBC版本不支援SCRAM。如需詳細資訊,請參閱 Postgre SQL JDBC 驅動程式文件中的 Postgre SQL JDBC 驅動程式。如需其他 Postgre SQL 驅動程式和SCRAM支援的清單,請參閱 Postgre 文SQL件中的驅動程式清單。

注意

RDS對於後置SQL版本 13.1 及更高版本支持刮沙 -256。這些版本也可讓您將資料庫執行個體設定為需要SCRAM,如下列程序所述。

RDS為 以進行要求 SCRAM

您可以要求 僅接受使用刮-SHA-256 演算法的密碼。

重要

對於具有 Postgre SQL 資料庫的現有RDS代理伺服器,如果您將資料庫驗證修改為SCRAM僅使用,代理伺服器會在 60 秒內無法使用。若要避免發生此問題,請執行下列其中一項:

  • 確定資料庫同時允許 SCRAMMD5 身分驗證。

  • 若只要使用 SCRAM 身分驗證,請建立新代理、將應用程式流量遷移至新代理,然後刪除先前與資料庫相關聯的代理。

在對系統進行變更之前,請確保您了解完整過程,如下所示:

  • 獲得所有資料庫使用者的所有角色與密碼加密相關資訊。

  • 請仔細檢查 Postgre 資料庫執行個體的 RDS的參數設定,以取得控制密碼加密的參數。SQL

  • 如果 RDS使用預設參數群組,則需要建立自訂,並將其套用至 RDS,以便在需要時修改參數。如果 使用自訂參數群組,您可以在稍後的程序中視需要修改必要的參數。

  • password_encryption 參數變更為 scram-sha-256

  • 通知所有資料庫使用者他們必須更新密碼。針對您的 postgres 帳戶進行相同的動作。系統會使用 scram-sha-256 演算法加密與儲存新密碼。

  • 驗證確認使用加密類型將所有密碼加密。

  • 如果所有密碼都使用 scram-sha-256,您可以將 rds.accepted_password_auth_method 參數從 md5+scram 變更為 scram-sha-256

警告

在您僅將 rds.accepted_password_auth_method 變更為 scram-sha-256 後,則任何具有 md5 加密密碼的使用者 (角色) 將無法連線。

準備好為 Postgre 資料庫執行個體使SCRAM用 RDS

資料SQL庫執行個體,請檢查所有現有的資料庫使用者帳戶。另外,請檢查用於密碼的加密類型。您可以使用 rds_tools 擴充功能執行這些任務。此擴充功能在 下支援。

獲得資料庫使用者 (角色) 與密碼加密方法清單
  1. RDS於連線psql至 Postgre 資料庫要執行個體,如下所示。SQL

    psql --host=db-name.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. 安裝 rds_tools 擴充功能。

    postgres=> CREATE EXTENSION rds_tools; CREATE EXTENSION
  3. 取得角色和加密清單。

    postgres=> SELECT * FROM rds_tools.role_password_encryption_type();

    您會看到類似下列的輸出。

    rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | md5 user_465 | md5 postgres | md5 (8 rows)

建立自訂資料庫參數群組

注意

如果 已使用自訂參數群組,則不需要建立新的參數群組。

如需 Amazon 參數群組的概觀RDS,請參閱在 RDS for PostgreSQL 資料庫執行個體上搭配使用參數

用於密碼的密碼加密類型是在某一個參數 (亦即 password_encryption) 中設定的。Postgre 資料庫行個體的 RDS允許的加密是在另一個參數中設定的。SQL rds.accepted_password_auth_method若要從這些預設值變更,則需要您建立自訂資料庫參數群組,並套用到您的執行個體。

您也可以使用 AWS Management Console 或建立RDSAPI自訂 DB 參數群組。如需詳細資訊,請參閱

您可以使用資料庫執行個體與自訂參數群組建立關聯。

建立自訂資料庫參數群組
  1. 使用指create-db-parameter-group CLI令建立自訂資料庫參數群組。此範例使用 postgres13 作為此自訂參數群組的來源。

    用於 Linux, macOS,或 Unix:

    aws rds create-db-parameter-group --db-parameter-group-name 'docs-lab-scram-passwords' \ --db-parameter-group-family postgres13 --description 'Custom parameter group for SCRAM'

    用於 Windows:

    aws rds create-db-parameter-group --db-parameter-group-name "docs-lab-scram-passwords" ^ --db-parameter-group-family postgres13 --description "Custom DB parameter group for SCRAM"
  2. 使用指modify-db-instanceCLI令將此自訂參數群組套用至您的 RDS Postgre SQL 資料庫叢集。

    用於 Linux, macOS,或 Unix:

    aws rds modify-db-instance --db-instance-identifier 'your-instance-name' \ --db-parameter-group-name "docs-lab-scram-passwords

    用於 Windows:

    aws rds modify-db-instance --db-instance-identifier "your-instance-name" ^ --db-parameter-group-name "docs-lab-scram-passwords

    若要將 Postgre SQL 資料庫執RDS行個體與自訂資料庫參數群組重新同步,您需要重新啟動叢集的主執行個體和所有其他執行個體。為了盡量降低對使用者的影響,排程在一般維護時段期間進行此操作。

設定要使用的密碼加密 SCRAM

執行個體RDS的密碼加密機制是在參數的資料庫參數群組中設定password_encryption。SQL允許的值為未設定、md5scram-sha-256。默認值取決於 波斯特格雷,如下所示:

  • RDS對於波斯特格雷 SQL 14 及以上-默認為 scram-sha-256

  • RDS對於後 SQL 13-默認為 md5

將自訂資料庫參數群組連接至 對於 Postgre SQL 資料庫執行個體,您可以修改密碼加密參數的值。

接下來,RDS控制台顯示 Postgre password_encryption SQL 參數RDS的默認值。
將密碼加密設定變更為 scram-sha-256
  • 將密碼加密的值變更為 scram-sha-256,如下所示。變更會立即套用,因為參數是動態的,因此不需要重新啟動即可使變更生效。

    用於 Linux, macOS,或 Unix:

    aws rds modify-db-parameter-group --db-parameter-group-name \ 'docs-lab-scram-passwords' --parameters 'ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate'

    用於 Windows:

    aws rds modify-db-parameter-group --db-parameter-group-name ^ "docs-lab-scram-passwords" --parameters "ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate"

將使用者角色的密碼移轉至 SCRAM

您可以將使用者角色的密碼移轉至,SCRAM如下所述。

將資料庫使用者 (角色) 密碼從移轉MD5到 SCRAM
  1. 以管理員使用者身分 (預設使用者名稱 postgres) 登入,如下所示。

    psql --host=db-name.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. 使用下列命令檢查 Postgre SQL 資料庫執行個體上的password_encryption參數設定。RDS

    postgres=> SHOW password_encryption; password_encryption --------------------- md5 (1 row)
  3. 將此參數的值變更為 scram-sha-256。這是動態參數,因此您在進行此變更之後不需要重新啟動執行個體。再次檢查該值以確定它現在已設定為 scram-sha-256,如下所示。

    postgres=> SHOW password_encryption; password_encryption --------------------- scram-sha-256 (1 row)
  4. 通知所有資料庫使用者變更自己的密碼。務必亦為帳戶 postgres (具有 rds_superuser 權限的資料庫使用者) 變更您自己的密碼。

    labdb=> ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me'; ALTER ROLE
  5. 對 上的所有資料庫重複此程序。RDS對於後置SQL數據庫實例。

將參數變更為需要 SCRAM

這是程序中的最後一個步驟。在下列程序中進行變更後,仍使用密碼md5加密的任何使用者帳戶 (角色) 都無法登入 。RDS對於後置SQL數據庫實例。

rds.accepted_password_auth_method指定 Postgre 資料庫執行個體的 RDS在登入程序期間接受使用者密碼的加密方法。SQL預設值為 md5+scram,這意味著任何一種方法都接受。在下圖中,您可以找到此參數的預設設定。

顯示rds.accepted_password_auth_method參數預設值和允許值的RDS主控台。

此參數的允許值為 md5+scram 或僅 scram。將此參數值變更為 scram 會使此成為一個需求。

若要將參數值變更為要求密碼SCRAM驗證
  1. 確認適用於 Postgre 資料庫執行個體的 的所有RDS資料SQL庫使用者密碼均用scram-sha-256於密碼加密。若要這麼做,請向 rds_tools 查詢角色 (使用者) 和加密類型,如下所示。

    postgres=> SELECT * FROM rds_tools.role_password_encryption_type(); rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | scram-sha-256 user_465 | scram-sha-256 postgres | scram-sha-256 ( rows)
  2. 對 中的所有資料庫執行個體重複查詢。RDS對於後置SQL數據庫實例。

    如果所有密碼都使用 scram-sha-256,您可以繼續進行。

  3. 將接受的密碼身分驗證值變更為 scram-sha-256,如下所示。

    用於 Linux, macOS,或 Unix:

    aws rds modify-db-parameter-group --db-parameter-group-name 'docs-lab-scram-passwords' \ --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'

    用於 Windows:

    aws rds modify-db-parameter-group --db-parameter-group-name "docs-lab-scram-passwords" ^ --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"