LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

ラックピープル | 

HCP Vault SecretsでOpenAIのAPIキーを安全に管理したいんじゃ!!

アプリケーション開発において、パスワードやAPIキーなどの「シークレット」をソースコードに直接記述してしまうと、セキュリティ事故に繋がるリスクがあります。そこで検討したいのが、シークレットマネジメントです。

本記事では2023年10月から正式に提供開始されたHCP Vault Secretsを使って、APIキーをアプリケーション実行時に取得する手法を説明します。

シークレットマネジメント

アプリケーション開発において、様々な場面でシークレットを扱う必要があります。シークレットとはパスワードや資格情報、APIキーなどのことです。

下記に記載したサンプルコードは、学習用やちょっとした実験用に使うには良いのですが、実際のAPIキーをソースコードに記述したままリポジトリで公開してしまうと、不正利用や情報漏えいなどのセキュリティ事故につながる可能性があります。

openai.api_key = "ここにAPI_KEYを入力する"

シークレットを安全に管理するためには、シークレットの生成・更新・廃棄にわたる一連のライフサイクルを考慮しなければなりません。そこで導入を検討したいのがシークレットマネジメントです。

HCP Vault Secrets

HashiCorp Vaultは、シークレットの管理、動的シークレット、データ暗号化などの機能を備えたシークレットマネジメントを行うソリューションです。HashiCorp Vaultはオンプレミス版やクラウド版などのバージョンがありますが、2023年10月のHashiConf2023で一般提供が開始された「HCP Vault Secrets」を使って、アプリケーションのAPIキーを安全に管理する方法をご紹介します。

HashiConf2023

HCP Vault SecretsはHashiCorp社が提供するSaaSのサービスで、シークレットマネジメントの機能を簡単かつ無料で試せます。

What is HCP Vault Secrets? | HashiCorp Cloud Platform | HashiCorp Developer

HCP Vault Secretsで、OpenAIのAPIキーを安全に管理する

ここからはOpenAIのAPIキーを活用して、Pythonで「ChatGPT風」のアプリケーション作成をご覧いただきます。

OpenAIのAPIキーはソースコードに直接埋め込むのではなく、HCP Vault Secretsを使用して管理します。そして、アプリケーションの実行時にそのキーを取得します。

用意するものと手順は以下の通りです。OpenAIのAPIには無料枠が存在するため、この手順をすべて無料で進められます。また、本記事ではWindows環境で動作させることを想定しています。今回は、コマンドライン(PowerShell)上で動作する簡易的なサンプルアプリケーションを用意します。

  • OpenAIのアカウントを取得し、APIキーを発行する
  • HCP Vault Secretsのアカウントを取得し、APIキーを登録する
  • Pythonの実行環境を用意する
  • ChatGPT風のアプリケーションを開発する

HCP Vault Secretsにシークレットを登録する

まずOpenAIのアカウントを取得し、APIキーを発行しておきましょう。OpenAIのサイトにサインインし、APIキーを作成します。メニューで「API Keys」を選び、その後「Create new secret key」をクリックし、APIキーを発行しておいてください。

OpenAI

続いて、HCP Vault Secretsのアカウントを作成し、APIキーを登録します。HashiCorp Cloud Platform(HCP)にアクセスし、サインアップします。HCPは、HashiCorp製品をサービス形式で利用するためのプラットフォームです。今回はHCP Vault Secretsを選択します。

HashiCorp Cloud Platform

HashiCorp Cloud Platform(HCP)のダッシュボード
HashiCorp Cloud Platform(HCP)のダッシュボード

「Create your first application」をクリックし、好きな名称を登録します。続いて「Add new secret」をクリックしてシークレットを登録します。「Name」フィールドには、アプリケーションから参照する際の名称を入力します。「Value」フィールドには、OpenAIのAPIキーを入力します。

シークレットの登録
シークレットの登録

WindowsからHCP Vault Secretsにコマンドラインでアクセスできるようにする

HCP Vault Secrets CLIをインストールすることで、Windows環境からコマンドラインを使用してHCP Vault Secretsにアクセスできるようにします。PowerShellターミナルを管理者権限で起動し、Vault Secrets CLIをダウンロードして解凍します。解凍したCLIのパスをPATH環境変数に追加するのを忘れないよう注意してください。

#Vault Secrets CLIをダウンロード
Invoke-WebRequest -URI https://releases.hashicorp.com/vlt/1.0.0/vlt_1.0.0_windows_amd64.zip -OutFile vlt_1.0.0_windows_amd64.zip
 
# Vault Secrets CLIを解凍
Expand-Archive -Path .¥vlt_1.0.0_windows_amd64.zip -Destination "C:¥Program Files¥HashiCorp¥vlt¥bin¥"
 
# PATH環境変数に設定
$Env:path = $env:path + ";C:¥Program Files¥HashiCorp¥vlt¥bin"

ここから先は、コマンドラインでHCP Vault Secrets CLIを使って設定を行っていきます。

まず、コマンドラインから'vlt login'を実行してHCP Vault Secretsにアクセスできるようにします。'vlt login'コマンドを実行すると、ブラウザが起動します。ブラウザに「Login is successful. You may close the browser and return to the command line.」というメッセージが表示されれば、ログインが成功したことを意味します。

コマンドラインでHCP Vault Secretsにログイン

次に、'vlt config init'コマンドを使って、HCP Vault Secretsで作成したApplicationを指定します。複数のApplicationがある場合は、矢印キーで対象のApplicationを選択します。

コマンドラインで、HCP Vault Secretsで作成したApplicationを指定

ここまでできたら、実際にHCP Vault Secretsに保存したシークレットにアクセスできるか確認してみましょう。'vlt secrets list'コマンドを実行すると、HCP Vault Secretsに保存されているシークレットが一覧表示されます。

HCP Vault Secretsに保存したシークレットにアクセスできるか確認する

シークレットを平文で表示するには、'vlt secrets get --plaintext'コマンドを使用します。

コマンドラインで、シークレットを平文で表示する

ChatGPT風のアプリケーションを開発する

ここからは、ChatGPT風のアプリケーション開発の方法を説明します。Pythonの実行環境がまだインストールされていない場合は、先にインストールしておきます。また、openaiライブラリも必要になるので'pip install openai'でインストールしておきましょう。ちなみに筆者の環境ではPython 3.11.6とopenai 0.28.1の組み合わせで動作を確認しました。

Python Releases for Windows | Python.org

今回はHCP Vault Secretsから取得したOpenAIのAPIキーを、環境変数にセットしてプログラムから参照できるようにしてみたいと思います。ちなみにHCP Vault Secretsからシークレットを取得するAPIも提供されているので、興味のある方はAPIドキュメントを参照ください。

HCP Vault Secrets | HashiCorp Developer

まずは環境変数にOpenAIのAPIキーがセットされるのを確認します。以下のpythonスクリプトを実行すると、環境変数の一覧が表示されます。'printenv.py'という名前で保存し、'vlt run -c "python .¥printenv.py"'コマンドを実行します。vlt runコマンドを実行するとシークレットを環境変数にセットし、引数で指定したプロセスが起動されます。

import os
 
if __name__ == "__main__":
    for key, value in os.environ.items():
        print(f"{key}={value}")
HCP Vault Secretsに登録したシークレットが環境変数にセットされているのが確認できる

実行結果を確認すると、HCP Vault Secretsに登録したシークレットが環境変数にセットされているのが確認できます。環境変数名は全て大文字となっているため、アプリケーションからはこの形式で参照する必要があります。変数名がややわかりにくいと感じるかもしれませんが、HCP Vault Secretsでシークレット名にアンダースコア(_)は利用できません。シークレット名にはアルファベットと数字とハイフンが指定できるようです。

それでは、ChatGPT風のアプリケーションを開発してみましょう。この機会に、プログラムの生成もChatGPTに依頼してみました。以下のプロンプトを使用して、ChatGPTにPythonのプログラムを生成してもらいました。

openaiライブラリを使って動作するChatGPTもどきのアプリケーションを作成してください。APIキーは環境変数「MYCHATGPTAPITOKEN」から参照し、CLIで動作するpythonのスクリプトでお願いします。

実際に出力されたスクリプトはこちらです。engineには利用する言語モデルを指定します。当初はdavinciが指定されていましたが、いろいろと試した結果、text-davinci-003が最適であると判断しました。利用の用途に合わせて、適切な言語モデルを選択してください。さらに、max_tokensの値も150では十分ではなかったので、300に増やしました。

import openai
import os
 
def chat_with_gpt(prompt_text):
    openai.api_key = os.environ["MYCHATGPTAPITOKEN"]
     
    response = openai.Completion.create(
        engine=" text-davinci-003",
        prompt=prompt_text,
        max_tokens=300
     
    return response.choices[0].text.strip()
 
if __name__ == "__main__":
    user_input = input("ChatGPTに問い合わせる内容を入力してください: ")
    response = chat_with_gpt(user_input)
    print(f"ChatGPT: {response}")

スクリプトをMyChatGPT.pyとして保存し、'vault run -c "python MyChatGPT.py"'で実行してみましょう。

vault run -c "python MyChatGPT.py"

英語での質問「What is HashiCorp?」や、日本語での質問「HashiCorp Vaultとは何ですか?」にも対応しています。さらに、「むかしむかし、あるところに」というプロンプトに対しても、続く物語を生成してくれました。

「python MyChatGPT.py」を実行。ChatGPTに問い合わせる内容を入力して、質問内容に応えるかどうか検証

最後に、HCP Vault Secretsでは、シークレットへのアクセス(作成、更新、取得など)がログとして記録されているので確認しておきましょう。HCP Vault SecretsのWebサイトにアクセスし、「Activity Logs」を選択することで、シークレットへのアクセス履歴を確認できます。

Activity Logsでシークレットへのアクセス履歴を確認する
Activity Logsでシークレットへのアクセス履歴を確認する

さいごに

HCP Vault Secretsを使用してシークレットを管理する方法と、アプリケーション実行時にシークレットを参照する手法(シークレット・インジェクション)について解説しました。ソースコードに埋め込まれたAPIキーなどのシークレットの漏えいリスクを軽減するため、シークレットマネジメントのアプローチは欠かせません。

HashiCorp Vaultには、今回紹介したHCP Vault Secretsの他にも、ユーザーが独自に構築・管理する「Vault Enterprise」や、SaaS版の「HCP Vault」などのエディションが存在します。最初は、HCP Vault Secretsを用いてアプリケーションのシークレットマネジメントを検討してみてください。

実際のプロジェクト導入時には、組織やシステムのポリシーに基づいて、適切なエディションの選択をおすすめします。本記事をもとにHashiCorp Vaultによるシークレットマネジメントについてイメージをつかんでもらえれば幸いです。

関連サービス
Vault(ヴォルト)
「HashiCorp製品」に関するお問い合わせ

この記事は役に立ちましたか?

はい いいえ

関連記事

LAC WATCH

関連記事をご紹介します

  • 生成AIを活用した新機能も発表!~サンフランシスコ開催「HashiConf Global 2023」参加レポート

  • カード業界必見!PCI DSS v4.0のデータ暗号化に「HashiCorp Vault」をおすすめする理由

  • アイデンティティ管理で開発現場のゼロトラスト・セキュリティを実現、セキュリティとIT運用を自動化するHashiCorpとラックがタッグ

関連サービス
Vault(ヴォルト)