先日(11/19)に MySQL Database authorization with IAM and IAM Identity Domains がリリースされ、MDSへの接続にIAM認証が追加されました
そこで、本記事ではauthentication_ociプラグインを用いてMDSへ接続する手順を簡単に確認してみたいと思います
前提条件
- IAMユーザにauthentication_ociプラグインで使用するためのAPIキーを登録する
- 構成ファイルを作成する
- ポリシーを設定する
ドキュメントには記載されておりませんが、authentication_ociプラグインが8.0.27以降でなければ含まれていないようですので、8.0.27のパッケージを用意します
筆者は Oracle Linux 7 を使用しましたので、mysql-community-client-plugins-8.0.27-1.el7.x86_64.rpm
のパッケージに authentication_oci_client.so
が含まれていることを確認しています
他にも、ドキュメント には制限事項なども記載されておりますので、一度は目を通していただければと思います
それでは、authentication_ociプラグインを使用しての接続方法を紹介したいと思います
※前提条件のIAMユーザへのAPIキーの登録や構成ファイルの準備、ポリシーの設定などは完了しているものとします
IAMユーザーへのMySQLユーザーのマッピング
以下のようなクエリを管理者ユーザにて実行します
1 2 3 |
CREATE USER 'User001'@'%' IDENTIFIED WITH 'authentication_oci' AS '{"tenancy" : "ocid1.tenancy.oc1..aaaaaaaabbbbbcccc", "user" : "ocid1.user.oc1..aaaaaaaabbbbbcccc"}'; |
authentication_ociプラグインで指定している、各オプションは以下となります
- tenancy:ユーザーが作成されたテナンシのOCID
- user: MySQLユーザーUser001のマッピング先となるIAMユーザーのOCID
MySQL への接続確認
1.マップ済ユーザーを使用したDBシステムへの接続(MySQL クライアント)
1 2 3 4 5 6 |
[opc@blog01 ~]$ mysql --user=User001 --host=<MDS Endpoint ip> --execute='SELECT @@version' +-----------------+ | @@version | +-----------------+ | 8.0.27-u1-cloud | +-----------------+ |
構成ファイルがプラットフォームのデフォルトの場所にない場合は、 --oci-config-file
オプションで構成ファイルの場所を指定する必要があります
2.マップ済ユーザーを使用したDBシステムへの接続(MySQL Shell)
1 2 3 |
[opc@blog01 ~]$ echo 'SELECT @@version' | mysqlsh User001@<MDS Endpoint ip> --auth-method=authentication_oci_client --sql @@version 8.0.27-u1-cloud |
MySQL Shellでは、デフォルトのCLI構成のみが使用可能です
3.マップ済ユーザーを使用したDBシステムへの接続(MySQL Connector/Python)
下記のような簡単なPythonコードを用意しました
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/usr/bin/python3 import mysql.connector cnx = mysql.connector.connect(user='User001', host='<MDS Endpoint ip>') cursor = cnx.cursor() cursor.execute("SELECT @@version") rows = cursor.fetchall() for row in rows: print (row) cursor.close() cnx.close() |
実行してみます
1 2 |
[opc@blog01 ~]$ python3 ./blog.py ('8.0.27-u1-cloud',) |
構成ファイルがプラットフォームのデフォルトの場所にない場合は、 mysql.connector.connect() のオプション( oci_config_file ) で構成ファイルの場所を指定する必要があります
まとめ
すでに、OCI CLIを利用している場合は、MySQLクライアントやMySQL Shellからの接続に関しては、ポリシーの設定以外に特別な準備などは必要がないため、とても簡単に利用できるのではないでしょうか
また、authentication_ociプラグインを使用すれば、アプリケーション・コードからパスワードを排除することが可能になるなど、セキュアなコードの一助になるのでは無いでしょうか
※CLI構成ファイルには鍵ファイルの場所などが含まれているため、構成ファイルの管理は非常に重要になります