0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python SDKでOCI Vaultを操作する③ - シークレットでDB接続 -

Last updated at Posted at 2021-11-15

Vaultには、ユーザー名やパスワード、APIキーといった機密情報をシークレットとして管理することができます。シークレット情報は最大25KBの文字情報を保存でき、APIによる読み書きが可能です。プログラムにDBの接続情報をハードコーディングする、パスワードやSSHキーなどをメールやチャットなどで平文のままやり取りするなど、Vaultを一旦経由することでそのような漏洩リスクを減少させることができます。
また、シークレットはHSMではなく、Vault内のソフトウェア領域に保存され、5000シークレットまでは無償で利用できます。

ここでは、プログラムのDB接続情報をVaultのシークレット経由で取得する方法を紹介します

##Vaultにシークレットを作成する

  • Vaultのシークレットの作成をクリック
    image.png

  • シークレットを作成
    image.png

    • 名前: dbuser
    • 暗号化キー: 任意の暗号化キー
    • シークレットコンテンツ: DBの接続ユーザー名

同じようにパスワードと接続情報のためのシークレットをdbpassword, connectstrという名前で2つ作成します。
以降は、Pythonのサンプルコードですが、cx_OracleとOracle Instance Clientのインストールと設定は済ませておいてください。

シークレットの値でDBに接続する

アプリケーションのコードの中では、以下のようにDB接続に必要な設定を直接ハードコーディングしている場合があるかと思います
connection = cx_Oracle.connect("ユーザー名", "パスワード", "接続文字列またはサービス名")

以下のコードでは、接続に必要な情報はVaultのシークレットから呼びだすように変更しています。それぞれのシークレットのOCIDを追記して下さい

import cx_Oracle,os,oci,base64
cx_Oracle.init_oracle_client(r"C:\Program Files\instantclient_21_3")
config = oci.config.from_file("~/.oci/config","DEFAULT")
secret_client = oci.secrets.SecretsClient(config)

#シークレットのDBUserを取得
response  = secret_client.get_secret_bundle('<dbuserシークレットのOCID>')
dbuser = base64.b64decode(response.data.secret_bundle_content.content)

#シークレットのDBPasswordを取得
response = secret_client.get_secret_bundle('<dbpasswordシークレットのOCID>')
dbpasswd = base64.b64decode(response.data.secret_bundle_content.content)

#シークレットのconnectstrを取得
response = secret_client.get_secret_bundle('<connectstrシークレットのOCID>')
connectstr = base64.b64decode(response.data.secret_bundle_content.content)

#Oracle Databaseに接続
connection = cx_Oracle.connect(dbuser, dbpasswd, connectstr)

cur = connection.cursor()
cur.execute("select sysdate from dual")
rows=cur.fetchall()
    print("DB接続成功")
    print(row)

サンプルコードをdbconnect.pyとして保存し実行します。
接続が成功すれば、select sysdate from dualの結果が返ります。

#実行例
python .\dbconnect.py
DB接続成功
2021-11-15 11:52:03

シークレットは削除したり、バージョンを作成するなどして、漏洩リスクをコントロールすることができます。
image.png

DBだけでなく、OCIのFunctionsやバッチのシェルスクリプトなど、機密情報を外だしで管理したい利用ケースが多いと思うので、比較的お手軽に利用できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?