IT サービスには設定が必要です。設定の一部は、露出させたくない秘密情報です。一般的な例には、データベースの認証情報やセッションクッキーや認証情報を保護するランダムな値があります。ソフトウェアを開発している場合、ビルドパイプライン、配布証明書、アクセスキーなどで事態はさらに悪化する傾向にあります。
秘密情報が漏洩すると、ユーザーアカウントの乗っ取り、データの盗難、ビルドチェーン攻撃など、代償の大きな問題が引き起こされる可能性があります。悪評、知的財産の喪失、および潜在的に巨額の法的費用は、考えられるコストの一部にすぎません。
Psono は最新バージョンのpsonociを使用して保護された環境を提供します。 保護された環境により、環境変数を通じてプロセスを実行し構成することができ、システムに対して露出させることなく行うことができます。 これらの環境変数は Psono から安全にロードされ、サーバーには一切保管されず、単一のプロセスのみに晒されます。
まず、環境変数の秘密情報を作成する必要があります。単一の秘密情報が複数の環境変数を保持できるため、環境ごとやデータベースユーザーとデータベースパスワードなど関連する環境変数をグループ化することができます。
次に、API キーを作成し、この API キーに新しい環境変数の秘密情報にアクセスできる権限を与えます。
その後、API キーの秘密情報をメモしておきます。これらのパラメーターはシステムに直接露出される唯一のパラメーターです。
サーバーやビルドパイプラインに psono ci をインストールするには、以下のコマンドを実行します:
curl https://get.psono.com/psono/psono-ci/x86_64-linux/psonoci --output psonoci && chmod +x psonoci
そして、./some_command
を実行する代わりに、以下のようにプロセスを起動します:
psonoci \
--api-key-id eaee77c6-169f-4873-9be3-f2613149baa9 \
--api-secret-key-hex c8321d7a8e5b1f5ec3d969ecb5054c7548a1c709ddab2edae2ff7ff028538917 \
--server-url https://example.com/server \
run -- ./some_command
簡潔さのために、--api-key-id
や--api-secret-key-hex
のようなパラメーターを引数として渡していますが、設定ファイルを使用して構成することも可能です。
デモのために、環境変数とスクリプトに渡された引数をすべて出力する小さな Python スクリプトservice.py
を作成しました。
#!/usr/bin/python3
import os
import sys
print("args: {}".format(sys.argv))
print("environment: {}".format(os.environ))
例えば./service.py --whatever=argument_1
を実行する代わりに、以下のように実行できます:
psonoci \
--api-key-id eaee77c6-169f-4873-9be3-f2613149baa9 \
--api-secret-key-hex c8321d7a8e5b1f5ec3d969ecb5054c7548a1c709ddab2edae2ff7ff028538917 \
--server-url https://example.com/server \
run -- ./service.py --whatever=argument_1
以下の出力が得られます:
args: ['service.py', '--whatever', 'argument_1']
environment: environ({'db_host': 'prd-db.example.com:5432', 'db_password': 'Df55sr2UQm7Wshv7', 'db_username': 'production'})
ご覧のとおり、すべての引数が正しく渡され、事前に構成されたすべての環境変数がプロセスに利用可能となっています。システムの環境変数を渡し、それを Psono のものと拡張するフラグも用意されています。詳細情報はpsonoci のドキュメントに記載されています。
Psono がどのようにしてインフラストラクチャを保護できるかを示す短いデモを楽しんでいただけたら幸いです。これらすべてはこの機能の背後にいる天才Berndのおかげで可能になりました。Bernd、本当にありがとう!