藉由 IAM 發放權限給某些使用者,可以對 RDS 做某些程度的操作。除了能夠更快速地發放、收回權限,對於資料安全性也將更有保障。
以下將介紹透過 IAM 管理用戶存取 RDS 的幾項注意事項:
- 使用 Signature Version 4 Signing Process,比用戶密碼更加安全。
- Token只有 15 分鐘的有效期限,不需要再進行密碼重置。
- 必須使用 SSL 連接。
- 能夠使用 IAM Auth 的 RDS:
- MySQL 5.6.34 以上,除了 db.t1.micro, db.m1.small
- MySQL 5.7.16 以上,除了 db.t1.micro, db.m1.small
- Amazon Aurora 1.10 以上,除了 db.t2.small
前置動作
如果還沒安裝 aws-cli 的話請參考 AWS 命令列界面。
pip install -U awscli |
如果還沒安裝 mysql cli 的話。
brew install mysql --client-only --universal |
建立 RDS Instance
設定 RDS Instance
試著使用 mysql cli 連線到剛剛開好的 instance
mysql -h rammus2.[your-endpoint].ap-southeast-1.rds.amazonaws.com -u [your-username] -p |
CREATE USER iam_user IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS'; |
在 IAM User 添加一筆 Permission
{ |
使用 IAM Auth 連線到 MySQL
取得 auth token
aws rds generate-db-auth-token \ |
這邊才是重點,因為 AWS 的文件上沒有提到這幾個重要步驟,讓我卡關卡很久。
必須要使用 SSL 連線,並使用 RDS CA 才能正確連線!
下載 SSL CA https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
--ssl-ca=~/.ssh/rds-combined-ca-bundle.pem |
必須打開這個 plugin,否則 token 無法正確帶入密碼欄。
--enable-cleartext-plugin |
Oneline command
mysql -u iam_user -h rammus2.xxxxxxxx.ap-southeast-1.rds.amazonaws.com \ |
Reference
- 对 MySQL 和 Amazon Aurora 使用 IAM 数据库身份验证
http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html - IAM認証によるRDS接続を試してみた http://dev.classmethod.jp/cloud/aws/iam-auth-rds/
- How To Create a New User and Grant Permissions in MySQL https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql
Troubleshooting
出現錯誤 MySQL said: Authentication plugin ‘mysql_clear_password’ cannot be loaded: plugin not enabled
因為 token 字串會被 encrypt,所以必須開啟 cleartext plugin 才能正確送出 token。
如果是使用 Sequel Pro 的話,要在 Terminal 執行以下指令開啟 App。
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=y /Applications/Sequel\ Pro.app/Contents/MacOS/Sequel\ Pro |