如何利用 IAM 身分驗證連線 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL?

2 分的閱讀內容
0

我有 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 或 Amazon Aurora PostgreSQL 相容版本資料庫執行個體。我想使用 AWS Identity and Access Management (IAM) 身分驗證連線我的執行個體。

簡短描述

IAM 資料庫身分驗證比原生身分驗證方法更安全,原因如下:

  • IAM 使用 AWS 存取金鑰來產生資料庫身分驗證權杖。您無需儲存資料庫使用者憑證。
  • 身分驗證權杖的生命週期為 15 分鐘,因此您無需強制執行密碼重設。
  • IAM 資料庫身分驗證需要使用 SSL 連線。這會加密您傳入和傳出 Amazon RDS 資料庫執行個體的所有資料。
  • 如果您的應用程式執行於 Amazon Elastic Compute Cloud (Amazon EC2),您可以利用 Amazon EC2 執行個體設定檔來存取資料庫。您不需要在您的執行個體儲存資料庫密碼。

若要利用 IAM 角色設定 IAM 資料庫身分驗證,請依照下列步驟執行:

  1. 在 RDS 資料庫執行個體啟用 IAM 資料庫身分驗證。
  2. 建立 IAM 使用者並附加 IAM 原則,將資料庫使用者對應 IAM 角色。
  3. 將 IAM 角色附加到 EC2 執行個體
  4. 產生 AWS 身分驗證權杖以識別 IAM 角色。
  5. 下載 SSL 根憑證檔案或憑證套件檔案。
  6. 若要連線 RDS 資料庫執行個體,請使用 IAM 角色憑證和身分驗證權杖或 SSL 憑證。

如果您執行 MySQL,請參閱如何允許使用者利用其 IAM 憑證對 Amazon RDS MySQL 資料庫執行個體進行身分驗證?

解決方案

開始之前,請完成下列先決條件:

  • 啟動支援 IAM 資料庫身分驗證的 Amazon RDS for PostgreSQL 資料庫執行個體或 Aurora PostgreSQL 相容叢集
  • 啟動 EC2 執行個體來連線資料庫

如需詳細資訊,請參閱 Aurora 的 IAM 資料庫身分驗證和 Amazon RDS 的 IAM 資料庫身分驗證

若要連線 RDS 資料庫執行個體或 Aurora PostgreSQL 相容資料庫叢集,請使用 PostgreSQL 的 IAM 資料庫身分驗證

  1. RDS 資料庫執行個體Aurora 叢集上啟用 IAM 身分驗證。

  2. 建立 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

  3. 利用主要使用者登入 Amazon RDS for PostgreSQL 資料庫執行個體或 Aurora PostgreSQL 相容叢集:

    psql

    psql -h {database or cluster endpoint} -U {Master username} -d {database name}

    pgAdmin

    從 pgAdmin 導覽窗格選擇伺服器。然後,選擇伺服器名稱並輸入主要使用者密碼。

  4. 建立與 IAM 使用者具有相同名稱的子使用者:

    CREATE USER iamuser WITH LOGIN;
    GRANT rds_iam TO iamuser;
  5. 利用您建立的使用者名稱執行 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 ~]$
  6. 若要在 pgAdmin 建立新的伺服器連線,請選擇一般索引標籤並清除立即連接方塊。在連線索引標籤輸入主機名稱、連接埠和使用者名稱,但無需輸入密碼。在 SSL 索引標籤將 SSL 模式設定為需要並儲存伺服器連線。

  7. (選擇性) 在 SSL 索引標籤,您可以將 SSL 模式變更為 verify-full。根據選取的 SSL 模式輸入憑證的路徑。若要下載路徑,請執行下列命令:

    wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

    注意: 2015 年根憑證已於 2020 年到期。若要移至 2019 年根憑證,請參閱輪換 SSL/TLS 憑證

    如果您的應用程式不接受憑證鏈,請下載包含舊根憑證和新根憑證的憑證套件:

    $ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  8. 建立伺服器之後,請連線伺服器。在出現提示時,輸入 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 身分驗證