我有 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 或 Amazon Aurora PostgreSQL 相容版本資料庫執行個體。我想使用 AWS Identity and Access Management (IAM) 身分驗證連線我的執行個體。
簡短說明
IAM 資料庫身份驗證比原生身份驗證方法更為安全。如需詳細資訊,請參閱 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身份驗證。
若要使用 IAM 角色設定 IAM 資料庫身分驗證,請完成下列步驟:
- 在 RDS 資料庫執行個體啟用 IAM 資料庫身分驗證。
- 建立 IAM 使用者,並附加將資料庫使用者對應至 IAM 角色的 IAM 政策。
- 將 IAM 角色附加到 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。
- 若要識別 IAM 角色,請產生 AWS 身分驗證權杖。
- 下載 SSL 根憑證檔案或憑證套件檔案。
- 若要連線 RDS 資料庫執行個體,請使用 IAM 角色憑證和身分驗證權杖或 SSL 憑證。
如果您執行 MySQL,請參閱如何允許使用者利用其 IAM 憑證對 Amazon RDS MySQL 資料庫執行個體進行身分驗證?
解決方法
先決條件
請完成下列先決條件:
- 啟動支援 IAM 資料庫身分驗證的 Amazon RDS for PostgreSQL 資料庫執行個體或 Aurora PostgreSQL 相容叢集
- 啟動 EC2 執行個體來連線資料庫
如需詳細資訊,請參閱 Aurora 的 IAM 資料庫身分驗證和 Amazon RDS 的 IAM 資料庫身分驗證。
若要驗證使用 Amazon RDS 執行個體或 Aurora 叢集進行 IAM 驗證所需的組態,或疑難排解 IAM 身分驗證問題,請使用 AWSSupport-TroubleshootRDSIAMAuthentication 執行手冊。如需詳細資訊,請參閱 AWSSupport-TroubleshootRDSIAMAuthentication。
使用 IAM 資料庫身分驗證
若要連線 RDS 資料庫執行個體或 Aurora PostgreSQL 相容資料庫叢集,請使用 PostgreSQL 的 IAM 資料庫身分驗證:
-
在 RDS 資料庫執行個體或 Aurora 叢集上啟用 IAM 身分驗證。
-
建立 IAM 使用者,並附加下列原則:
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:REGION:ACCOUNT:dbuser:RESOURCE_ID/iamuser"
]
}
]
}
**注意:**以 IAM 使用者資訊取代 iamuser。
-
利用主要使用者登入 Amazon RDS for PostgreSQL 資料庫執行個體或 Aurora PostgreSQL 相容叢集:
psql
psql -h {database or cluster endpoint} -U {Master username} -d {database name}
pgAdmin
從 pgAdmin 導覽窗格選擇伺服器。然後,選擇伺服器名稱並輸入主要使用者密碼。
-
建立與 IAM 使用者具有相同名稱的子使用者:
CREATE USER iamuser WITH LOGIN; GRANT rds_iam TO iamuser;
-
利用您建立的使用者名稱執行 generate-db-auth-token。此動作會建立臨時密碼,以供您在稍後步驟使用:
[ec2-user@ip-172-31-24-237 ~]$ export RDSHOST="aurorapg-ssl.cluster-XXXXXXXXXXX.us-west-2.rds.amazonaws.com"[ec2-user@ip-172-31-24-237 ~]$ export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username iamuser)"
[ec2-user@ip-172-31-24-237 ~]$ echo $PGPASSWORD
aurorapg-ssl.cluster-XXXXXXX.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=iamuser&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=AKIA2O5GXNVDTAMABZFE%2F20190909%2Fus-west-2%2Frds-db%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20190909T171907Z&X-Amz-Signature=ead28003477c3082e5a17529ac8316db4f4bdf2fa8f79d3aaea806e9bafa2673
[ec2-user@ip-172-31-24-237 ~]$
-
若要在 pgAdmin 建立新的伺服器連線,請選擇 General (一般) 索引標籤,然後清除 Connect now (立即連線) 方塊。在 Connection (連線) 索引標籤輸入主機名稱、連接埠和使用者名稱,但先不要輸入密碼。在 SSL 索引標籤中,將 SSL mode (SSL 模式) 設定為 Require (需要) 並儲存伺服器連線。
-
(選用) 在 SSL 索引標籤中,您可以將 SSL mode (SSL 模式) 變更為 verify-full (完整驗證)。根據選取的 SSL 模式輸入憑證的路徑。若要下載路徑,請執行下列命令:
wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem
如果您的應用程式不接受憑證鏈,請下載包含舊根憑證和新根憑證的憑證套件:
$ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
-
連線至伺服器。在出現提示時,輸入 generate-db-auth-token 為使用者 iamuser 產生的臨時權杖。
對於 psql,請執行以下命令進行連線。本範例利用您在產生權杖時設定的環境變數 $PGPASSWORD。此變數會啟動連線:
psql -h aurorapg-ssl.cfkx5hi8csxj.us-west-2.rds.amazonaws.com -p 5432 "sslmode=verify-full sslrootcert=rds-ca-2019-root.pem dbname=aurora_pg_ssl user=iamuser"
**注意:**每個權杖在您產生後 15 分鐘到期。如果您嘗試使用相同的權杖重新建立連線,連線則會失敗。您必須產生新的權杖。
如果仍然收到類似於使用者的 PAM 身分驗證失敗等錯誤,請檢查 AWS 帳戶是否屬於 AWS Organizations 組織。如果帳戶屬於某個組織,請將 rds-db:* 加入帳戶所屬組織的服務控制政策 (SCP)。此外,請檢查 IAM 使用者或角色的階層是否不具備 rds-db 權限。
如需詳細資訊,請參閱如何使用服務控制政策設定 AWS Organization 中跨帳戶的權限防護機制。
相關資訊
透過 Aurora PostgreSQL 相容性使用 IAM 身分驗證
輪換您的 SSL/TLS 憑證。