無料ではじめる
ページの一覧セキュリティの概要

セキュリティ

aikagi が値をどう暗号化して保存し、誰に渡し、何を記録しているかをまとめます。

保存時の暗号化

値は AES-256-GCM で暗号化して保存します。暗号化に使うデータ暗号鍵(DEK)はプロジェクトごと(自分用のワークスペースではワークスペースごと)に別々で、DEK はさらにマスターキー(KEK)で暗号化しています。KEK は値とは別の場所に保管しています。KEK を入れ替えても、保存済みの値を暗号化し直す必要はありません。

キーの一覧を取得しても、値は返しません。値を返すのは、キーを名前で指定して取得したときだけです。

通信

Web の画面と CLI からサーバへの通信は、すべて TLS で暗号化しています。CLI の認証情報は ~/.config/aikagi に、本人だけが読める権限で保存されます。

サインイン

Web の画面へのサインインは Google アカウントだけです。aikagi 専用のパスワードはありません。そのため、パスワードの使い回しや、退職者のパスワードが残る問題が起きません。

CLI からのログインは、毎回ブラウザで承認します。承認した端末は一覧に表示され、いつでも失効できます(端末)。

アクセス制御

値を渡すかどうかは、次の 3 つを順に確認して決めます。

  • ワークスペースとプロジェクトでの役割。
  • フォルダの範囲。aws/dev のように絞れます。
  • アクセス元。承認した端末のログインか、プロジェクトで許可した GitHub Actions の 2 つだけです。GitHub Actions は値を読むことしかできません。

許可されていないキーは、名前も返しません。権限が足りない場合は、空の結果ではなく、権限が無いことを示すエラーを返します。

監査ログ

値の取得は 1 回ごとに 1 行記録され、誰が・いつ・どのキーの・どの版を・どこから取得したかが残ります。監査ログは Web の画面からも CLI からも確認できます。値そのものは記録しません。

アクセスを止める

値の受け渡しを止める方法は 3 つあります。どれも操作した時点で反映されます。

  • 端末を失効する。その端末は、再びログインするまで値を取得できません。
  • プロジェクトの設定で GitHub Actions の許可を削除する。そのリポジトリからは値を取得できなくなります。
  • メンバーを外す、または招待を取り消す。

AI ツールや CI に値を渡すときの設計

一度渡した値は、受け取った側の手元に残ります。aikagi は次の 4 点で、渡した後の値を管理しやすくしています。

  • 値は環境変数として渡し、.env のようなファイルを作りません。値は起動したコマンド(子プロセス)の中にだけ存在します。
  • 渡す範囲は役割とフォルダで狭められます。GitHub Actions が受け取るのは、許可した環境の共有の値だけです。
  • AI ツールや CI のために長期間有効な token を発行しません。手元の AI ツールはその人のログインを使い、CI は実行中だけ有効な認証情報を使います。
  • 値を渡したことも取得したことも、すべて監査ログに記録されます。