セキュアなBigQueryの運用方法
by
yu-yamada
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
セキュアなBigQueryの 運用方法 July Tech Festa 2021 株式会社リクルート データ推進室 山田 雄 #JTF2021 #JTF2021_C
Slide 2
Slide 2 text
Hobby & Ability ビール/日本酒/ゴルフ/トミカ/子育て 山田 雄(Yamada Yu) @nii_yan 社会人歴 20年ぐらい データエンジニア/セキュリティエンジニア (データ/セキュリティ基盤の開発・運用) AWS/GCP/BigData/Mail/Hadoop...
Slide 3
Slide 3 text
BigQueryの責任共有モデル 出典:https://www.slideshare.net/GoogleCloudPlatformJP/cloud-onair-google-cloud-platform-2018222
Slide 4
Slide 4 text
BigQueryの責任共有モデル 出典:https://www.slideshare.net/GoogleCloudPlatformJP/cloud-onair-google-cloud-platform-2018222 BigQueryでユーザ側 の責任範囲
Slide 5
Slide 5 text
監査ログ
Slide 6
Slide 6 text
デフォルトで保存される日数 ログの永続化検討 ログのタイプ 保存日数 管理アクティビティ 400日 データアクセス 30日 システムイベント 400日 ポリシー拒否 30日
Slide 7
Slide 7 text
デフォルトで保存される日数 ログの永続化検討 ログのタイプ 保存日数 管理アクティビティ 400日 データアクセス 30日 システムイベント 400日 ポリシー拒否 30日 BigQueryの監査ログはDefaultだと30日で削除されてしまうの で、永続化を検討
Slide 8
Slide 8 text
データアクセスログは30日で削除されるため、 バックアップ用にBigQueryに保存する設定を行う。 データセット名は任意 他のプロジェクトにデータアクセスログを集約させ る場合はこちらの手順はスキップ ログ保存のためデータセットをBigQueryに作成
Slide 9
Slide 9 text
BigQuery データアクセスログの保存設定 シンク名は任意 エクスポート先は前前 ページで作ったデータ セットを指定 BigQueryを選択 注)プロジェクト内でBigQueryに対する操作を行ってない (ログが無い)場合、BigQueryが選択出来ません 何かしら操作をしてからシンク設定をしてください
Slide 10
Slide 10 text
権限による制御
Slide 11
Slide 11 text
BigQueryの権限制御は基本的にIAMを使用します ・権限制御範囲 org->folder->project->dataset->table->colum/row 特権での閲覧理由(監査など)が無い限り、 project単位またはdataset単位での権限付与がおすすめ projectをどの単位で作るかはこちらのベストプラクティスを参照 エンタープライズ企業のベスト プラクティス IAMによる権限制御
Slide 12
Slide 12 text
権限付与は人単位で行うと、運用工数が上がるため Googleグループを使用してグループ単位で権限を付与 IAMによる権限制御 dataset A dataset B dataset C 分析者 グループ 営業 グループ 管理者 グループ
Slide 13
Slide 13 text
複数のdatasetの特定のテーブルのみ閲覧したい場合は、 承認済みviewを使用する 通常のviewだと、元テーブルに対しての閲覧権限が必要となる。 承認済みview Table1 Table2 Table3 Table4 datasetA datasetB datasetC View1 View4 承認済み viewを作成 新規 グループ datsetCに対する 権限を付与
Slide 14
Slide 14 text
テーブル単位での閲覧権限付与時のtips テーブルレベルでのみ権限をつけると、GUIのエクスプローラでは発見出来ず、 直接テーブル名まで入れるとクエリが出来る テーブル構造などをGUIで見ることも出来ない
Slide 15
Slide 15 text
IAMより細かい制御をしたい時に設定可能 時刻やリソース名でアクセス出来るリソースを絞る事が出来る BigQueryが対応しているのは時刻のみ ・20時以前のみアクセス出来る設定例 { "expression": "request.time.getHours(\"Asia/Tokyo\") <= 20", "title": "テスト", "description": "" } IAM Condition
Slide 16
Slide 16 text
GUI/API/SQLで権限付与が可能 いつ誰に何を付与したという記録を残すためにも、IaCなどでの 付与を推奨 terraformを使う場合、 google_project_iam_policyの取り扱いに注意 google_project_iam_policy内で宣言していないIAMはすべて 消えます 権限付与方法
Slide 17
Slide 17 text
ネットワークでの制御
Slide 18
Slide 18 text
IAMで制御をかけても、BigQueryにアクセス出来るサービスア カウントのクレデンシャル漏洩したら外部からアクセス出来 てしまう 悪意ある内部からのデータ持ち出しも可能 BigQueryでネットワークレベルの制限をかけたい場合には VpcServiceControlsを使用する さらにセキュリティを高めるために
Slide 19
Slide 19 text
VpcServiceControlsの概要 VpcServiceControls(以下vpc-sc)は BigQueryやGCSといった、 vpc+fwでは制限をかけられない プロダクトに対して、 IPやIDでのアクセス制限をかけられ るサービス ingress/egress双方の制限が可能 機密データありプロジェクト vpc-sc BigQuery Cloud Storage Firewall Compute Engine
Slide 20
Slide 20 text
2021/4にingress/egressそれぞれ別にruleを設定出来る機能が GAとなった ingress/egress rules ProjectA vpc-sc ProjectB vpc Compute Engine Cloud Storage 特定のプロジェクトから、 特定のAPIのみ叩くことを許可す るといった設定が可能に
Slide 21
Slide 21 text
project(11111)の test@...から、 project(22222)の GCSのAPIに対して getとcreateが可能 ingress/egress rules 設定例
Slide 22
Slide 22 text
ingress/egress fromプロジェクトの概念 ingress/egressで許可されたプロジェクト内の ネットワークからしか通信は出来ない ProjectA vpc-sc ProjectB vpc Compute Engine Cloud Storage ユーザがローカル PCから gcloud config set project しても通信は通らない
Slide 23
Slide 23 text
ingress/egress BigQueryの場合 BigQueryを使用した通信許可の場合、一方向の通信であっても、 双方向のAPI許可設定が必要となる ProjectA vpc-sc ProjectB vpc BigQuery Cloud Storage BigQueryからGCSへの 書き込み設定をする場合は ingress/egress双方で 下記の許可が必要(一部抜粋) - method: google.storage.buckets.testIamPermissions - method: google.storage.objects.delete - method: google.storage.buckets.get - method: google.storage.objects.create serviceName: storage.googleapis.com
Slide 24
Slide 24 text
VpcServiceControlsによる防御出来るパターン ・意図せぬIAMの設定 ・クレデンシャルの漏洩などによる外部からのアクセス ・内部犯による外部へのデータの持ち出し等 アクセス境界の作成、編集には専用の権限(AccessContextManager)が必要 (プロジェクトオーナーでも変更は不可能)
Slide 25
Slide 25 text
VpcServiceControlsの注意点 ● 境界内で使えるサービスは限られる ○ 新しいサービスは基本使えない ○ 制限を把握した上での設計が必要 ≠ 一般的なクラウド設計 ● 境界内で使えるサービスにおいても制限事項あり →利便性とのトレードオフが多く、 vpc-scを使うと一般的なGCPとは別物になると考えたほうが良い 金融など絶対にデータを守りたい場合にはあっているが、 まずはvpc-sc以外での防御方法がないか吟味を行い どうしても使わないといけない場合のみvpc-scの選択を行う
Slide 26
Slide 26 text
GCPの静的外部IPアドレスは、解放すると即座に他のプロジェ クトで使われる可能性があります。 そのため、IPの解放タイミングには注意してください。 ✕ IPアドレス解放→vpc-scの設定変更 ○ vpc-scの設定変更→IPアドレス解放 IPについての取り扱い注意点
Slide 27
Slide 27 text
監査
Slide 28
Slide 28 text
BigQueryは権限設定で意図せず、 データをpublic公開してしまう場合があります データがpublic公開されている場合は以下のコマンドで 検知が可能 gcloud asset search-all-iam-policies \ --scope organizations/ORGANIZATION_NUMBER \ --query "policy:(allAuthenticatedUsers OR allUsers)" またはSecurityCommandCenterのGUI上でも確認が可能です public公開の検知
Slide 29
Slide 29 text
BigQueryは権限設定で個人のGmailアカウントなどにも閲覧権 限をつけることが出来ます こちらは組織ポリシーで、組織のドメイン以外には権限付与を 許可しないといった設定が可能です 組織ポリシーを使わない場合は、CloudAssetInventoryなどを 使用して権限を持っているアカウント一覧を抽出し、閲覧許可 をしていいドメインのみになっているかの監査が必要です 自組織以外のドメインからのアクセス
Slide 30
Slide 30 text
BigQueryのデータに意図せず機密情報が入ってないか、 Cloud Data Loss Prevention(DLP)を使用して確認することが 出来ます infoType 検出器リファレンス (リファレンスに無い場合は独自の辞書を追加可能) 個人情報検知 GUIからの確認方法
Slide 31
Slide 31 text
Tips
Slide 32
Slide 32 text
gcloud asset search-all-iam-policies \ --scope='projects/PROJECT_NAME' \ --query='policy : "USER_ACCOUNT" ' 呼び出しにはcloudasset.assets.searchAllIamPolicies 権限が必要 自分の権限の確認方法 CloudAssetInventoryのIAMポリシーの検索を使用することで、 一括で取得可能
Slide 33
Slide 33 text
gcloud asset analyze-iam-policy \ --project=PROJECT_NAME \ --full-resource-name='//bigquery.googleapis.com/projects/PROJECT_NAME/datasets/ DATASET_NAME/tables/TABLE_NAME' \ --permissions='bigquery.tables.get' \ --expand-groups テーブルにアクセス出来る人の確認方法 CloudAssetInventoryのPolicyAnalyzerを使用することで、 一括で取得可能
Slide 34
Slide 34 text
まとめ
Slide 35
Slide 35 text
まとめ IDでのアクセス制御とネットワークでの制御の大きく2つを 紹介させていただきました 他にもデータライフサイクルの管理や、余剰な権限の監査など やったほうが良いことは多くあります 会社や組織によってやるべき対策はそれぞれ違うと思いますの で、うまく組み合わせて安心・快適なBigQueryライフを送りま しょう
Slide 36
Slide 36 text
We Are Hiring! https://recruit-saiyo.jp/technology/