如何允許使用者使用其 IAM 憑證對 Amazon RDS for MySQL 資料庫執行個體進行身分驗證?

3 分的閱讀內容
0

我想連接至正在執行 MySQL 的 Amazon Relational Database Service (Amazon RDS) 資料庫執行個體。我想使用 AWS Identity and Access Management (IAM) 而不是原生身分驗證方法。

簡短描述

使用者可以使用 IAM 使用者或角色憑證和身分驗證權杖連接至 Amazon RDS 資料庫執行個體或叢集。IAM 資料庫身分驗證比原生身分驗證方法更安全,原因如下:

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

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

  1. 在 RDS 資料庫執行個體上啟用 IAM 資料庫身分驗證。
  2. 建立使用 AWS 身分驗證字符的資料庫使用者帳戶。
  3. 新增可將資料庫使用者映射至 IAM 角色的 IAM 政策。
  4. 建立允許 Amazon RDS 存取的 IAM 角色。
  5. 將 IAM 角色連接至 Amazon EC2 執行個體。
  6. 產生 AWS 身分驗證權杖以識別 IAM 角色。
  7. 下載 SSL 根憑證檔案或憑證套件檔案。
  8. 使用 IAM 角色憑證和身分驗證權杖連接至 RDS 資料庫執行個體。
  9. 使用 IAM 角色憑證和 SSL 憑證連接至 RDS 資料庫執行個體。

解決方案

在開始之前,您必須啟動支援 IAM 資料庫身分驗證的資料庫執行個體和 Amazon EC2 執行個體才能連接至資料庫。

在 RDS 資料庫執行個體上啟用 IAM 資料庫身分驗證

您可以使用 Amazon RDS 主控台、AWS Command Line Interface (AWS CLI) 或 Amazon RDS API 開啟 IAM 資料庫身分驗證。如果您使用 Amazon RDS 主控台修改資料庫執行個體,請選擇立即套用以啟用 IAM 資料庫身分驗證。啟用 IAM 身分驗證需要短暫中斷。如需有關哪些修改需要中斷的詳細資訊,請參閱 Amazon RDS 資料庫執行個體

注意: 如果您選擇立即套用,則系統也會立即套用任何待定的修改,而不是在維護時段套用。這可能會導致您的執行個體延長中斷時間。如需詳細資訊,請參閱使用「立即套用」設定

建立使用 AWS 身分驗證權杖的資料庫使用者帳戶

1.    執行下列命令,以連接至資料庫執行個體或叢集端點。輸入主要密碼以登入。

$ mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p

2.    建立使用 AWS 身分驗證權杖而非密碼的資料庫使用者帳戶:

CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';

3.    依預設,資料庫使用者是在沒有任何權限的情況下建立的。當您執行 SHOW GRANTS FOR {dbusername} 時,這將顯示為 GRANT USAGE。若要要求使用者帳戶才能使用 SSL,請執行下列命令:

ALTER USER {dbusername} REQUIRE SSL;

4.    執行 exit 命令以關閉 MySQL。然後,從資料庫執行個體登出。

新增可將資料庫使用者映射至 IAM 角色的 IAM 政策

1.    開啟 IAM 主控台

2.    從導覽窗格中選擇政策

3.    選擇建立政策

4.    輸入允許對所需使用者執行 rds-db:connect 動作的政策。如需有關建立此政策的詳細資訊,請參閱針對 IAM 資料庫存取建立和使用 IAM 政策

注意:請確保使用資料庫資源的詳細資訊來編輯資源值,例如資料庫執行個體識別符和資料庫使用者名稱。

5.    選擇下一步: 標籤

6.    選擇下一步: 檢閱

7.    在名稱中,輸入政策名稱。

8.    選擇建立政策

建立允許 Amazon RDS 存取的 IAM 角色

1.    開啟 IAM 主控台

2.    從導覽窗格中選擇角色

3.    選擇建立角色

4.    選擇 AWS 服務

5.    選擇 EC2

6.    在選取您的使用案例中,選擇 EC2,然後選擇下一步: 授權

7.    在搜尋列中,尋找您先前在「新增可映射資料庫使用者的 IAM 政策」區段中建立的 IAM 政策。

8.    選擇下一步: 標籤

9.    選擇**下一步:**檢閱

10.    在角色名稱中,輸入此 IAM 角色的名稱。

11.    選擇建立角色

將 IAM 角色連接至 Amazon EC2 執行個體

1.    開啟 Amazon EC2 主控台

2.    選擇您用來連接至 Amazon RDS 的 EC2 執行個體。

3.    將您新建立的 IAM 角色連接至 EC2 執行個體。

4.    使用 SSH 連接至您的 EC2 執行個體

產生 AWS 身分驗證權杖以識別 IAM 角色

連接至 Amazon EC2 執行個體之後,執行下列 AWS CLI 命令以產生身分驗證權杖

注意: 如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您使用的是最新的 AWS CLI 版本

$ aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}

複製並儲存此身分驗證權杖供日後使用。權杖在建立後的 15 分鐘內到期。

或者,您可以使用 AWS SDK 產生權杖。

下載 SSL 根憑證檔案或憑證套件檔案

執行以下命令以下載適用於所有區域的根憑證:

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

使用 IAM 角色憑證和身分驗證權杖連接至 RDS 資料庫執行個體

下載憑證檔案之後,執行下列其中一個命令,以使用 SSL 連接至資料庫執行個體。

注意: 如果您的應用程式不接受憑證鏈,請執行下列命令以下載憑證套件:

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

RDSHOST="rdsmysql.abcdefghijk.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username {db username})"

視您使用的憑證 (RootCA 或套件) 而定,執行下列其中一個命令:

RootCA 命令:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-ca-2019-root.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

套件命令:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-combined-ca-bundle.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

**注意:**如果您使用的是 MariaDB 客戶端,則不需要使用 --enable-cleartext-plugin 選項。

使用 IAM 角色憑證和 SSL 憑證連接至 RDS 資料庫執行個體

下載憑證檔案之後,使用 SSL 連接至資料庫執行個體。如需詳細資訊,請參閱連接至執行 MySQL 資料庫引擎的資料庫執行個體

相關資訊

適用於 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身分驗證

使用者對 Amazon RDS 資料庫執行個體執行建立、刪除、修改、備份和復原所需的最低權限是什麼?

AWS 官方
AWS 官方已更新 1 年前