マルチテナントの SaaS アプリケーションで、テナントごとに異なる Cloud KMS キーを使ってデータを暗号化しています。テナント C のデータにテナント D のキーを使った暗号化が行われないよう保証するための最も適切な設計はどれですか?
- A. Cloud KMS の代わりに Google のデフォルト暗号化を使いテナント間の分離をアプリ層で管理する
- B. 全テナントで共通のキーを使用してアプリ内の論理分離でテナントを区別する
- C. 1 つのキーリングに全テナントのキーを作成し、アプリが正しいキーを選択するロジックを実装する
- D. テナントごとにキーリングを分け、テナントのサービスアカウントにはそのテナントのキーリングのみへのアクセスを IAM で制限する
解答と解説を見る
正解: D
テナントごとにキーリングを分け、テナント固有のサービスアカウントに当該キーリングのみへの roles/cloudkms.cryptoKeyEncrypterDecrypter を IAM で付与することで、テナント間のキーアクセスを IAM レベルで強制的に分離できます。誤ったキーを使う可能性をアプリロジックではなくインフラ(IAM)レベルで排除できます。1 つのキーリングに全テナントのキーをまとめる場合、サービスアカウントが他テナントのキーにアクセスできる可能性があり、アプリロジックのバグが情報漏洩につながります。デフォルト暗号化はテナント分離を保証しません。全テナントでの共通キーはテナント分離の観点で最も危険な設計です。
📚 関連サービスの解説: Cloud IAM