用語集/ Glossary
本文で用いた技術用語と、稼働中のサービス名
本文に出てくる技術用語と、実際に動いているリソースの名前をまとめました。本文では初出のときに短い注釈を添えていますが、あとから引くときはこちらをご覧ください。
技術用語Technical Terms
- 共有リンクShare Link
- Box に招待していない相手へ、ファイルやフォルダを期限つきで渡すための URL。ログイン不要で開けます。
- BoxBox
- このアプリでファイルを扱う単位。案件や取引先ごとに作り、メンバーを招待して共同で使います。
- トークンToken
- URL の末尾に付く長い文字列。共有リンクでは 32 バイトの乱数を base64url で表した 43 文字を使います。
- base64urlbase64url
- 任意のデータを、URL にそのまま置ける文字(英数字と
-_)だけで表す方式。 - 署名付き URLSigned URL
- 「この時刻まで、このファイルの取得だけを許す」という許可が埋め込まれた一時的な URL。共有リンクでは、ファイルも ZIP も短時間だけ有効なものを発行します。
- scryptscrypt
- パスワードを元に戻せない形へ変換する方式のひとつ。計算時間だけでなくメモリも要求するため、専用ハードウェアを並べた総当たりに強いのが特徴です。
- ソルトSalt
- ハッシュ化のときに混ぜる、行ごとに異なる乱数。同じパスワードでも保存される値が変わるため、あらかじめ計算した対応表による攻撃を防げます。
- HMAC-SHA256HMAC-SHA256
- 鍵を使って作る要約値。鍵を知らなければ同じ値を作れないため、値の照合や改ざん検知に使います。
- HKDFHKDF
- 1 つの秘密から、用途ごとに別々の鍵を導き出す方式。秘密の数を増やさずに、用途間で鍵を分離できます。
- 確認コード(ワンタイムパスワード)OTP
- 一度きり・短時間だけ有効な数字。共有リンクでは 6 桁・10 分で、受取人のメールアドレス宛に送ります。
- Cookie(HttpOnly / SameSite)Cookie
- ブラウザが保持する小さなデータ。
HttpOnlyはページ上のスクリプトから読めなくする指定、SameSiteは他サイトからの遷移で送られないようにする指定です。 - レート制限Rate Limit
- 一定時間内の要求回数に上限を設けること。共有リンクでは、接続元ごと・リンクごと・端点ごとに別々の上限を重ねています。
- 行ごとのアクセス制御Row Level Security
- データベース側で「この接続からはこの行だけ見える」を強制する仕組み。アプリに書き間違いがあっても、範囲外の行は返りません。
- 列単位の権限Column Grant
- 「この接続はこの列にだけ書き込める」という、より細かい権限指定。共有リンクでは、ログインした利用者が書けるのを無効化に関する 2 列だけに絞っています。
- トランザクションTransaction
- 複数の書き込みを「全部成功」か「全部なかったこと」のどちらかにまとめる仕組み。発行と監査ログと送信予定を、この単位で確定させています。
- 送信予定の記録Outbox
- メールなどの外部への送信を、その場で実行せず「送る予定」として同じトランザクションに記録しておく方式。送信の失敗が業務処理を巻き戻さないようにできます。
- Pub/SubPub/Sub
- 「発行する側」と「受け取る側」を直接つながずに、間にトピックを置いて中継する仕組み。片方が止まっても、もう片方は動き続けられます。
- デッドレターDead Letter
- 何度試しても届けられなかったメッセージの退避先。放置すると気づけないため、滞留を監視しています。
- 冪等(べきとう)Idempotent
- 同じ操作を何度行っても結果が変わらない性質。ZIP の準備要求や、無効化の操作がこの性質を持ちます。
- 監査ログAudit Log
- 「誰が・いつ・何をしたか」をあとから追うための記録。共有リンクでは発行・配布・無効化などの業務上の出来事だけを残します。
- アラートAlert
- システムが自動で見つけた異常の記録。重さ(重大/警告)と状態(未解決/解決済み)を持ちます。
- Cloud RunCloud Run
- Google Cloud のサービス実行環境。要求が来たときだけ動き、来なければ止まっているためコストが抑えられます。
- Cloud Run JobsCloud Run Jobs
- 同じ環境で「一度きりの処理」を動かす仕組み。要求への応答ではなく、時間のかかる処理(ZIP 生成・掃除)に使います。
- Cloud StorageCloud Storage
- ファイルを保管する場所。用途ごとに「バケット」という入れ物を分けます。
- LifecycleLifecycle
- バケットに設定する自動削除の決まり。ZIP の一時置き場は「作成から 72 時間で削除」にしています。
- Cloud ArmorCloud Armor
- Google Cloud の防御サービス。接続元ごとの回数制限や、攻撃パターンの遮断を入口で行います。
- Cloud SchedulerCloud Scheduler
- 決めた時刻に処理を起動する仕組み。共有リンクでは日次の掃除処理を起動しています。
- ZIPZIP
- 複数のファイルを 1 つにまとめる形式。共有リンクでは合計 200 MB・10 ファイルまでのフォルダを ZIP にします。
- ウイルス検査(検査済み)Malware Scan
- 取り込んだファイルを流通させる前に行う検査。共有リンクで渡せるのは、この検査を通過したファイルだけです。
- 列挙攻撃Enumeration
- 応答の違いを手がかりに、有効な値(メールアドレスなど)を 1 件ずつ突き止める攻撃。応答を常に同じにすることで防ぎます。
稼働リソース名Running Resources
本文に出てくる、実際に動いているリソースの名前です。
| 種別 | 名前 | 役割 |
|---|---|---|
| ホスト | portal.example.com | 本体アプリ。ログインが必要な全機能 |
| ホスト | inbox.portal.example.com | 受取ページ専用。共有リンクのために開いているのは受取ページと公開 API の 2 経路だけ |
| サービス | matsuba-web | 画面(発行ダイアログ・共有リンクタブ・全社管理画面・受取ページ) |
| サービス | matsuba-api | API(発行・管理・受け取り・メールの取込と送信) |
| ジョブ | matsuba-batch | まとめて動かす処理の実行環境。共有リンクでは 2 つの処理を追加 |
| 処理 | folder-zip-builder | フォルダの ZIP を生成する処理(要求のたびに単発で起動) |
| 処理 | bulk-download-jobs-cleanup-daily | 期限切れ ZIP の後始末と、条件が消えたアラートの整理(毎日) |
| バケット | 検査済みバケット | ウイルス検査を通過したファイルの保管場所 |
| バケット | 共有 ZIP バケット | 共有リンク用 ZIP の一時置き場(72 時間で自動削除) |
| 防御ルール | armor-matsuba-share | 受取ホストの外周。接続元ごとのレート制限 |
| トピック | share_link.created | 発行時の案内メールの配送経路 |
| トピック | share_link.brute_force | 総当たり検知の通知メールの配送経路 |
| テーブル | share_links | リンク本体(対象・期限・パスワード・回数・受取人・ZIP の状態) |
| テーブル | share_link_accesses | アクセス記録(9 種類の結果・日時・接続元・ブラウザ) |
| テーブル | share_link_otps | 確認コード(照合用の値・有効期限・使用済みかどうか) |
| テーブル | audit_logs | アプリ全体で共通の監査ログ |
| テーブル | app_alerts | システムが見つけた異常の記録 |
| テーブル | outbox_events | メールなどの送信予定 |
サービスアカウント(処理ごとに与えている実行権限の主体)は api の実行 SA(API から署名付き URL を発行し、ZIP 生成を起動する)と batch(Jobs)の実行 SA(ZIP を生成して書き込む・メールの配送経路へ発行する)の 2 つを使い分けています。どちらにも、必要な操作だけを与えています。