跳至內容

如何使用 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 資料庫身份驗證比原生身份驗證方法更為安全。如需詳細資訊,請參閱 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身份驗證

若要使用 IAM 角色設定 IAM 資料庫身分驗證,請完成下列步驟:

  1. 在 RDS 資料庫執行個體啟用 IAM 資料庫身分驗證。
  2. 建立 IAM 使用者,並附加將資料庫使用者對應至 IAM 角色的 IAM 政策。
  3. 將 IAM 角色附加到 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體
  4. 若要識別 IAM 角色,請產生 AWS 身分驗證權杖。
  5. 下載 SSL 根憑證檔案或憑證套件檔案。
  6. 若要連線 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 資料庫身分驗證

  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 建立新的伺服器連線,請選擇 General (一般) 索引標籤,然後清除 Connect now (立即連線) 方塊。在 Connection (連線) 索引標籤輸入主機名稱、連接埠和使用者名稱,但先不要輸入密碼。在 SSL 索引標籤中,將 SSL mode (SSL 模式) 設定為 Require (需要) 並儲存伺服器連線。

  7. (選用) 在 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
  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 身分驗證

輪換您的 SSL/TLS 憑證