本文へ移動

ホーム / Data / 第5部 品質・ガバナンス

第5部 品質・ガバナンス・第12章

権限と個人情報

★★☆ 重要6トピック・面接 3問

会社の大事なデータが集まる基盤を、必要な人に必要な範囲だけ見せ、法令に沿って扱う方法を押さえる。

ひとことで

必要な人に必要な範囲だけ見せる。テーブルだけでなく、列・行の単位でも絞る。

データ基盤には、会社の大事なデータが集まります。必要な人に、必要な範囲だけ見せるのが基本(最小権限)です。テーブル単位の権限だけでは足りないことが多く、列や行の単位でも絞ります。

見せる列と行を絞る注文ID支店メール金額1001東京***@example.com3,0001002大阪(見えない)(見えない)1003東京***@example.com1,2001004大阪(見えない)(見えない)列レベル:メールはマスキングして見せる行レベル:大阪の行は条件で返さない権限は人ではなくグループ(役割)に付け、定期的に棚卸しする
列レベルのマスキングと行レベルの権限(東京支店の担当者から見た例)
しくみできること例
列レベルの権限・マスキング特定の列を見せない、または隠した値で見せるメールアドレスは一部の人だけ。ほかの人には ***@example.com
行レベルの権限条件に合う行だけを見せる各支店の担当者は自分の支店の行だけ
ビューで渡す元のテーブルではなく、絞った・隠したビューを渡す分析者には個人を特定する列を除いたビュー

BigQuery のポリシータグ、Snowflake のマスキングポリシー・行アクセスポリシー、PostgreSQL の行レベルセキュリティ(RLS)などが使えます。権限は人ではなくグループ(役割)に付け、定期的に棚卸しします。

IAM の考え方は SRE の「IAM(権限管理)」へ

面接ではこう答える

データ基盤には会社の大事なデータが集まるので、必要な人に必要な範囲だけ見せる最小権限が基本です。テーブルの単位だけでは足りないことが多く、メールアドレスなどの列を隠すマスキング、支店ごとに見える行を絞る行レベルの権限、絞ったビューを渡す方法を組み合わせます。権限は人ではなくグループに付け、定期的に棚卸しします。

権限は人ではなく、グループと役割に付ける人入社・異動・退職グループ部署・職種役割読む・書く・管理データデータセット・スキーマ
異動や退職はグループの出入りだけで済む
決めること例
データの区分公開・社内・機密・個人情報、のように分け、区分ごとに見られる人を決める
層ごとの権限生データは基盤のチームだけ、mart は分析者、個人情報の列は一部の人だけ
書き込みの権限本番のスキーマに書けるのはパイプラインのサービスアカウントだけ。人は開発用のスキーマに書く
申請と期限機密のデータは申請制にし、期限が来たら外す
棚卸し半年に1回など、グループとメンバーを見直す

個人のアカウントで動いているパイプラインは、その人が退職すると止まります。パイプラインは必ずサービスアカウントで動かします。

IAM の考え方は SRE の「IAM(権限管理)」へ

ひとことで

個人情報は利用目的の範囲で使い、仮名加工などで扱いを変えられる。EU の人のデータは GDPR も関わる。

日本の個人情報の加工の区分(おおまかな違い)個人情報特定の個人を識別できる目的の範囲で使う第三者への提供は原則同意仮名加工情報他の情報と照らさないと識別できない社内の分析に使いやすい第三者への提供は原則不可匿名加工情報個人を識別できず、元に戻せない決まった手続きで提供できる加工の基準が厳しい
具体的な判断は法務と相談する

個人情報の扱い:日本の個人情報保護法では、利用目的をできるだけ特定して本人に示し、その目的の範囲で使うのが原則です(目的外の利用には原則として本人の同意が要る)。他の情報と照らし合わせないと個人を特定できないように加工した仮名加工情報にすると、利用目的の変更の制限などが外れ、社内の分析で使いやすくなります(その代わり、第三者への提供は原則できず、本人を特定しようとすることも禁止です)。EU の人のデータを扱うなら GDPR も関わり、処理の法的な根拠や、本人からの削除・開示の請求への対応が求められます。GDPR では、追加の情報で個人に結びつけられる仮名化したデータも個人データのままで、完全に匿名にしたデータだけが対象の外になります。具体的な判断は法務と相談します。

データエンジニアがすること理由
個人情報の列に印(タグ)を付けるどこに個人情報があるかを把握し、権限とマスキングを自動で効かせる
利用目的を記録する目的の範囲で使っているか説明できるようにする
不要な個人情報を取り込まない持たなければ漏れない。分析に要らない列は入口で落とす

面接ではこう答える

日本の個人情報保護法では、利用目的をできるだけ特定して本人に示し、その範囲で使うのが原則です。他の情報と照らし合わせないと個人を特定できないように加工した仮名加工情報にすると、社内の分析で使いやすくなりますが、第三者への提供は原則できません。EU の人のデータには GDPR も関わり、仮名化したデータも個人データのままです。具体的な判断は法務と相談し、データエンジニアは個人情報の列の把握と、不要なものを持たない設計を担います。

メールアドレスを、鍵つきのハッシュで置き換えるtaro@example.com元の値HMAC(秘密の鍵)鍵は分析者が触れない所8f3a…(トークン)分析ではこれで JOIN
鍵なしの単純なハッシュは、ありそうな値を総当たりで戻される恐れがある

メールアドレスを単純にハッシュ化しただけでは、ありそうな値を総当たりで戻される恐れがあります。秘密の鍵を使うハッシュ(HMAC など)にし、鍵は分析者が触れない所に置きます。また削除の請求に応えるには、どのテーブルにその人のデータがあるかを把握しておく必要があり、生データやバックアップにも残ることを考えておきます。

方法すること向くもの
マスキング見せるときだけ一部を隠す(***@example.com)画面で確かめる業務。元の値は残る
鍵つきハッシュ(HMAC)同じ値は同じトークンになるので JOIN できる人をまたいで数える分析
トークン化元の値と対応表で置き換え、対応表は別に厳しく守る必要なときに元に戻したい
一般化・削除生年月日→年代、住所→都道府県、要らない列は消す統計の分析

本人からの削除の請求に応えるには、その人のデータがどこにあるかを知っている必要があります。データ基盤は同じデータを何段にも複製するので、業務 DB から消しただけでは残ります。

削除の請求は、データがある場所すべてに届かせる請求を受ける本人の IDある場所を探すカタログ・タグ消すDWH・レイク・生データ記録するいつ何を消したか
テーブル形式なら DELETE のあとに古いスナップショットも消す必要がある
残りやすい場所対策
生データ(レイクのファイル)ユーザー ID で探せるよう区切る。消せる形式(テーブル形式)で持つ
テーブル形式の古いスナップショットDELETE のあと、古いスナップショットの削除(期限切れ)を流す
バックアップ・エクスポート保存期間を決めて自動で消えるようにする
分析者の手元・スプレッドシート個人情報の持ち出しを制限する

いちばん効くのは、保存期間を決めて自動で消すことです。「念のため全部ずっと持つ」は、漏れたときの被害と削除の手間を大きくします。

「誰が、いつ、どのデータを読んだか」を記録しておくと、漏えいが疑われたときに範囲を確かめられます。クラウド DWH にはクエリの履歴と監査ログがあるので、保存期間を決めて残します。

見ること例
個人情報の列を読んだクエリ誰が、どれだけの行を読んだか
大量の書き出しCSV への書き出し・外部のストレージへのコピー
権限の変更誰が誰に何の権限を付けたか
普段と違う使い方深夜の大量の読み込み、使ったことのないデータセット

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • 最小権限と、列・行の単位の権限
  • 個人情報保護法・GDPR の基本と仮名化
  • 削除の請求・保存期間・監査ログ

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1個人情報を含むデータを分析に使うときの注意は?

模範回答

まず最小権限です。分析に本当に個人を特定する列が要るのかを確かめ、要らなければ最初から渡しません。名前やメールアドレスは列レベルの権限やマスキングで隠し、つなぎ合わせるのに ID が要るなら、秘密の鍵を使ったハッシュで仮名化します。単純なハッシュは総当たりで戻せることがあるので避けます。

次に目的外利用です。個人情報保護法では、本人に示した利用目的の範囲で使うのが原則なので、新しい使い方をするときは目的に入っているかを法務と確認します。あわせて、誰がいつ何を見たかのログを残し、権限を定期的に棚卸しし、削除の請求に応えられるよう、どこにその人のデータがあるかを把握しておきます。

深掘りされたら

  • 仮名化と匿名化はどう違いますか?
  • 削除の請求が来たら、データ基盤では何をしますか?

見られているポイント最小権限・マスキング・目的外利用

Q2データ基盤の権限は、どう設計しますか?

模範回答

最小権限を基本に、人ではなく役割(グループ)に権限を付けます。例えば、生データの層はデータのチームとパイプラインのサービスアカウントだけ、mart は分析者全員、個人情報の列は特定の役割だけ、というように層と役割で分けます。

テーブル単位で足りないところは、列レベルの権限やマスキングで個人情報を隠し、行レベルの権限で「自分の支店の行だけ」のように絞ります。権限の設定は Terraform などのコードで管理してレビューを通し、誰がいつ何を見たかのログを残し、定期的に棚卸しして使われていない権限を外します。

深掘りされたら

  • 急ぎで権限がほしいと頼まれたら?

見られているポイント最小権限・役割・列行レベル・監査

Q3ユーザーから自分のデータを削除してほしいと請求がありました。データ基盤では何をしますか?

模範回答

まず、その人のデータがどこにあるかを洗い出します。業務 DB だけでなく、DWH の各層、レイクの生データ、テーブル形式の古いスナップショット、バックアップ、エクスポートしたファイルにも残ります。個人情報の列にタグを付け、カタログで探せるようにしておくのが前提です。

見つけたら、ユーザー ID で DELETE し、テーブル形式なら古いスナップショットの期限切れも流して物理的に消えるようにします。バックアップは保存期間で自動で消えることを説明できるようにし、いつ何を消したかを記録します。普段から保存期間を決めて自動で消しておくと、この作業が軽くなります。

深掘りされたら

  • 仮名化したデータも消す必要がありますか?

見られているポイントデータの複製をすべて把握し、物理的に消すまで考えられるか