生成AIのAPIを利用したpythonプログラムを作成するとき、問題になるのはそのAPIの認証情報をどこに格納するかです。
プログラムや設定ファイルにこれらの認証情報を直接記述すると漏洩リスクがあります。さらに最近はGithubなどの外部リポジトリを利用するケースも多くあり、これらのサービスへファイルアップロードするとさらに漏洩リスクが高まります。
そこでこういった認証情報をGCP Secret Managerに格納して実行時に参照させる方式とすることで、プログラムや設定ファイルに認証情報を格納しない方法を紹介します。
(もちろん、GCPへの認証情報も保持しないことを考慮済です)
1. 準備
(1) GCPポータルからSecret Managerの値を登録
GCPポータルのメニューパス:セキュリティ > Secret Managerで値を登録します。
メイン画面に「+ シークレットを作成」リンクがあり、それをクリックすると下記の登録画面が表示されます。
Secretの名前はプログラムから呼び出すときに使う名前、Secretの値はAPIキーなどの認証情報を入力します。
それ以外の項目はデフォルトのままで利用可能です。
(2) Secret Managerを取得するpythonのライブラリをインストール
pip install google-cloud-secret-manager
2. Pythonプログラムへの実装
pythonのプログラムに次のコードを記述することでGCP Secret Managerの値を取得できるようになります。
ライブラリの呼び出し
import google.auth
from google.cloud import secretmanager
Secret Managerに格納された値を取得するサブ関数(access_secret_version)
このコードでは、pythonプログラムを実行する前にgcloudコマンドで環境設定したGCPのproject_idを使用するようにしています。それによりpythonプログラムへの記述が不要となります。
# デフォルトの認証情報からGCP接続情報およびプロジェクトIDを自動取得
credentials, project_id = google.auth.default()
def access_secret_version(secret_id: str, version_id: str = "latest") -> str:
client = secretmanager.SecretManagerServiceClient(credentials=credentials)
name = f"projects/{project_id}/secrets/{secret_id}/versions/{version_id}"
response = client.access_secret_version(request={"name": name})
return response.payload.data.decode("UTF-8")
サブ関数を呼び出してSecret Managerの値を取得する
作成したサブ関数(access_secret_version)を呼び出してSecret Managerの値を取得します。
引数に渡すSECRET_IDは、Secret Managerで登録したキー名です。取得した結果はこのプログラムの変数 secret_valueに格納されます。
SECRET_ID = "your-secret-name"
try:
secret_value = access_secret_version(SECRET_ID)
print(f"取得した値: {secret_value}")
except Exception as e:
print(f"エラーが発生しました: {e}")
3. プログラムの実行方法
pythonプログラムを実行する前に、gcloudコマンドを実行して認証およびproject-idを設定します。
step1. gcloudでログイン、対象プロジェクトを割り当て
次のコマンドでGCPへログインおよびproject-idを設定します。
gcloud auth application-default login
gcloud config set project <project-id>
いま割り当てられているプロジェクトは次のコマンドでチェックします
gcloud config get-value project
利用可能なproject-id一覧は次のコマンドでチェックします
gcloud projects list
step2. pythonプログラムを実行
GCP Secret Managerの値を利用して処理するpythonプログラムを実行します
python <プログラム名>
最後に
最近はGithubなどの外部リポジトリサービスを利用する機会が増えたこともあり、プログラムや設定ファイルから認証情報が漏洩するケースが多発しています。
そのようなトラブルを防止するため、ぜひGCP Secret Managerの活用を検討されてみてはいかがでしょうか?
また、私のXアカウントでもAI関連情報を発信しているので、よろしければフォローしてください。
