-
タグ
タグ
- セキュリティ
- 人材開発・教育
- システム開発
- アプリ開発
- モバイルアプリ
- DX
- AI
- サイバー攻撃
- サイバー犯罪
- 標的型攻撃
- 脆弱性
- 働き方改革
- 企業市民活動
- 攻撃者グループ
- JSOC
- JSOC INSIGHT
- サイバー救急センター
- サイバー救急センターレポート
- LAC Security Insight
- セキュリティ診断レポート
- サイバー・グリッド・ジャパン
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- ラックセキュリティアカデミー
- すごうで
- ランサムウェア
- ゼロトラスト
- ASM
- EDR
- SASE
- デジタルアイデンティティ
- インシデントレスポンス
- 情シス向け
- 対談
- CIS Controls
- Tech Crawling
- クラウド
- クラウドインテグレーション
- データベース
- アジャイル開発
- DevSecOps
- OWASP
- CTF
- FalconNest
- セキュリティ診断
- IoT
- EC
- サプライチェーンリスク
- スレットインテリジェンス
- テレワーク
- リモートデスクトップ
- アーキテクト
- プラス・セキュリティ人材
- 障がい者採用
- 官民学・業界連携
- カスタマーストーリー
- 白浜シンポジウム
- CODE BLUE
- 情報モラル
- クラブ活動
- 初心者向け
- 趣味
- カルチャー
- 子育て、生活
- 広報・マーケティング
- コーポレート
- ライター紹介
- IR
アプリケーション開発において、パスワードや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キーを安全に管理する方法をご紹介します。
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を選択します。
「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.」というメッセージが表示されれば、ログインが成功したことを意味します。
次に、'vlt config init'コマンドを使って、HCP Vault Secretsで作成したApplicationを指定します。複数のApplicationがある場合は、矢印キーで対象のApplicationを選択します。
ここまでできたら、実際にHCP Vault Secretsに保存したシークレットにアクセスできるか確認してみましょう。'vlt secrets list'コマンドを実行すると、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でシークレット名にアンダースコア(_)は利用できません。シークレット名にはアルファベットと数字とハイフンが指定できるようです。
それでは、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とは何ですか?」にも対応しています。さらに、「むかしむかし、あるところに」というプロンプトに対しても、続く物語を生成してくれました。
最後に、HCP Vault Secretsでは、シークレットへのアクセス(作成、更新、取得など)がログとして記録されているので確認しておきましょう。HCP Vault SecretsのWebサイトにアクセスし、「Activity Logs」を選択することで、シークレットへのアクセス履歴を確認できます。
さいごに
HCP Vault Secretsを使用してシークレットを管理する方法と、アプリケーション実行時にシークレットを参照する手法(シークレット・インジェクション)について解説しました。ソースコードに埋め込まれたAPIキーなどのシークレットの漏えいリスクを軽減するため、シークレットマネジメントのアプローチは欠かせません。
HashiCorp Vaultには、今回紹介したHCP Vault Secretsの他にも、ユーザーが独自に構築・管理する「Vault Enterprise」や、SaaS版の「HCP Vault」などのエディションが存在します。最初は、HCP Vault Secretsを用いてアプリケーションのシークレットマネジメントを検討してみてください。
実際のプロジェクト導入時には、組織やシステムのポリシーに基づいて、適切なエディションの選択をおすすめします。本記事をもとにHashiCorp Vaultによるシークレットマネジメントについてイメージをつかんでもらえれば幸いです。
タグ
- セキュリティ
- 人材開発・教育
- システム開発
- アプリ開発
- モバイルアプリ
- DX
- AI
- サイバー攻撃
- サイバー犯罪
- 標的型攻撃
- 脆弱性
- 働き方改革
- 企業市民活動
- 攻撃者グループ
- JSOC
- もっと見る +
- JSOC INSIGHT
- サイバー救急センター
- サイバー救急センターレポート
- LAC Security Insight
- セキュリティ診断レポート
- サイバー・グリッド・ジャパン
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- ラックセキュリティアカデミー
- すごうで
- ランサムウェア
- ゼロトラスト
- ASM
- EDR
- SASE
- デジタルアイデンティティ
- インシデントレスポンス
- 情シス向け
- 対談
- CIS Controls
- Tech Crawling
- クラウド
- クラウドインテグレーション
- データベース
- アジャイル開発
- DevSecOps
- OWASP
- CTF
- FalconNest
- セキュリティ診断
- IoT
- EC
- サプライチェーンリスク
- スレットインテリジェンス
- テレワーク
- リモートデスクトップ
- アーキテクト
- プラス・セキュリティ人材
- 障がい者採用
- 官民学・業界連携
- カスタマーストーリー
- 白浜シンポジウム
- CODE BLUE
- 情報モラル
- クラブ活動
- 初心者向け
- 趣味
- カルチャー
- 子育て、生活
- 広報・マーケティング
- コーポレート
- ライター紹介
- IR