このチュートリアルでは、クエリで返された結果がトークン化または匿名化されるように、Cloud Data Loss Prevention(Cloud DLP)経由で結果を渡すプロキシの使用方法について説明します。このプロキシは、このチュートリアルの説明に使用するもので、本番環境での使用を想定したものではありません。
このチュートリアルは、Cloud SQL に保存されているデータを Cloud DLP でトークン化するデータベース管理者、セキュリティ担当者、クラウド アーキテクトを対象としています。このチュートリアルは、Cloud Shell と Cloud SQL に精通していることを前提としています。
どの組織でも、保存されるデータの量は増え続けています。また、その大半はセンシティブ データに分類されます。しかし、このようなデータにアクセスするすべてのユーザーが、データベースにクエリを実行したときにセンシティブ データの表示を必要としているわけではありません。
このチュートリアルでは、センシティブ データを含む Cloud SQL データベースへのアクセスは制限しませんが、クエリ結果を表示するときに、こうしたセンシティブ データが表示されないようにします。
次の図に、このチュートリアルのデプロイ アーキテクチャを示します。
このチュートリアルでは、Cloud SQL とシンプルな SQL クライアント間のインターフェースとして機能する DLP プロキシを設定します。
目標
- データベースを作成して、センシティブ データのサンプルでテーブルを更新する。
- Cloud DLP テンプレートを作成する。
- DLP プロキシ サーバーとクライアント JAR ファイルをダウンロードする。
- Cloud SQL インスタンス データベースに接続し、Cloud DLP テンプレートを使用するように DLP プロキシを構成する。
- プロキシ機能をテストする。
料金
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。新しい Google Cloud ユーザーは無料トライアルをご利用いただけます。
このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。
始める前に
- Google アカウントにログインします。
Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する。
- 必要な API を有効にします。
Cloud SQL for MySQL データベースの作成
このセクションでは、Cloud SQL インスタンスを作成し、Cloud SQL for MySQLデータベースを作成して、センシティブ データのサンプルを追加します。
-
Cloud Console で、Cloud Shell をアクティブにします。
Cloud Console の下部にある Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。
gcloud
コマンドライン ツールなどの Cloud SDK がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
このチュートリアルのすべてのコマンドは Cloud Shell で実行されます。
- このチュートリアルに必要なファイルを Google の一般公開 Cloud Storage バケットから
gcp-dlp-tutorial
フォルダにコピーします。mkdir gcp-dlp-proxy-tutorial gsutil cp gs://solutions-public-assets/dlp-cloudsql-proxy/*.* gcp-dlp-proxy-tutorial
- Cloud プロジェクトを設定します。
gcloud config set project project-id
以下を置き換えます。
project-id
: 実際の Cloud プロジェクトの ID。
- チュートリアル ファイルをコピーしたフォルダに移動します。
cd gcp-dlp-proxy-tutorial
- ゾーンのリストを表示するには、次のコマンドを実行します。
gcloud compute zones list
ゾーンの詳細については、地域とリージョンをご覧ください。
- ゾーンを選択して Cloud SQL インスタンスを作成し、ゾーンを環境変数としてエクスポートします。
export ZONE=zone
以下を置き換えます。
zone
: Cloud SQL インスタンスを作成するゾーン。
dlp-test-instance
という名前で Cloud SQL for MySQL インスタンスを作成します。gcloud sql instances create dlp-test-instance --zone $ZONE
インスタンスが作成されると、次のような出力が表示されます。
Creating Cloud SQL instance...done. Created [https://www.googleapis.com/sql/v1beta4/projects/[PROJECT_ID]/instances/dlp-test-instance]. NAME DATABASE_VERSION LOCATION TIER PRIMARY_ADDRESS PRIVATE_ADDRESS STATUS dlp-test-instance MYSQL_5_7 [ZONE] db-n1-standard-1 35.195.26.16 - RUNNABLE
- MySQL ユーザー
root@%
のパスワードを設定します。gcloud sql users set-password root \ --host=% --instance=dlp-test-instance \ --password=password
以下を置き換えます。
password
: 安全なパスワード。
次のような出力が表示されます。
Updating Cloud SQL user...done.
- インスタンスに
dlp-test-db
という名前のデータベースを作成します。gcloud sql databases create dlp-test-db --instance dlp-test-instance
出力は次のようになります。
Creating Cloud SQL database...done. Created database [dlp-test-db]. instance: dlp-test-instance name: dlp-test-db project: project-id
dlptester
というデータベース ユーザーを作成します。gcloud sql users create dlptester \ --host=% --instance=dlp-test-instance --password=password-database
以下を置き換えます。
password-database
: 安全なパスワードで置き換えます。パスワードは後で必要になるため、メモしておいてください。
次のような出力が表示されます。
Creating Cloud SQL user...done. Created user [dlptester].
- Cloud SQL for MySQL インスタンスに接続します。
gcloud sql connect dlp-test-instance --user=dlptester
プロンプトが表示されたら、「
password-database
」と入力します。 - MySQL プロンプトで、
TEST_DATA
というテーブルを作成し、センシティブ データのサンプルを数行入力します。source create_test_data.sql
- MySQL プロンプトでクエリを実行し、テストデータがテーブルに読み込まれたことを確認します。
select * from TEST_DATA LIMIT 10;
クエリの結果は次のようになります。
MySQL [dlp-test-db]> select * from TEST_DATA LIMIT 10; +------+---------------------+--------------+-------------+--------+ | id | email | phone | ssn | metric | +------+---------------------+--------------+-------------+--------+ | 1 | mallory@example.org | 858-222-0222 | 222-22-2222 | 5 | | 2 | james@example.org | 858-333-0333 | 333-33-3333 | 8 | | 3 | mallory@example.org | 858-222-0222 | 222-22-2222 | 8 | | 4 | maria@example.org | 858-444-0444 | 444-44-4444 | 1 | | 1 | mallory@example.org | 858-222-0222 | 222-22-2222 | 5 | | 2 | james@example.org | 858-333-0333 | 333-33-3333 | 8 | | 3 | mallory@example.org | 858-222-0222 | 222-22-2222 | 8 | | 4 | maria@example.org | 858-444-0444 | 444-44-4444 | 1 | +------+---------------------+--------------+-------------+--------+ 8 rows in set (0.00 sec)
- MySQL クライアントを終了します。
exit
Cloud DLP テンプレートの作成
このセクションでは、2 つの Cloud DLP テンプレートを作成します。最初のテンプレートは、TEST_DATA
テーブルを検査して、InfoType でセンシティブ データと定義されているデータを識別するためのテンプレートです。2 つ目のテンプレートは、InfoType で定義されたセンシティブ データをトークン化し、匿名化するためのテンプレートです。
検査テンプレートを作成する
Cloud Console で、[Cloud DLP] ページに移動します。
[作成] をクリックして、[テンプレート] を選択します。
[テンプレート ID] フィールドに「
inspect-template-1
」と入力します。[続行] をクリックします。
InfoTypes を
EMAIL_ADDRESS
、PHONE_NUMBER
、US_SOCIAL_SECURITY_NUMBER
に設定します。[作成] をクリックします。
匿名化テンプレートを作成する
このセクションでは、de-identify-template-1
という名前の匿名化テンプレートを作成し、暗号ハッシュで生成されたサロゲート値でセンシティブ情報を置き換えます。詳細については、Cloud DLP ドキュメントの cryptoHashConfig
をご覧ください。
API Explorer に移動します。
[parent] フィールドで、
[YOUR-PROJECT]
を実際の Cloud プロジェクトの ID に置き換えます。[Execute] を選択します。プロンプトが表示されたら、もう一度 [Execute] を選択します。
次のような
200
レスポンスと出力が返されます。{ "name": "projects/YOUR-PROJECT-ID/deidentifyTemplates/de-identify-template-1", "createTime": "2019-10-15T12:46:51.944253Z", "updateTime": "2019-10-15T12:46:51.944253Z", "deidentifyConfig": { "infoTypeTransformations": { "transformations": [ { "infoTypes": [ { "name": "PHONE_NUMBER" }, { "name": "US_SOCIAL_SECURITY_NUMBER" }, { "name": "EMAIL_ADDRESS" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "transient": { "name": "abc" } }, "surrogateInfoType": { "name": "S1" }
匿名化テンプレートが正常に保存されたことを確認するため、API Explorer に戻り、テンプレートの一覧を表示します。
[parent] フィールドに「
projects/project-id
」と入力します。[Execute] を選択します。プロンプトが表示されたら、もう一度 [Execute] を選択します。
次のような出力が表示されます。作成したテンプレートが含まれています。
DLP プロキシの構成と使用
このセクションでは、DLP プロキシを構成し、クライアントを使用してプロキシに接続して、クエリ結果が Cloud DLP によって処理されることを確認します。
Cloud Shell で、チュートリアル ファイルをコピーしたフォルダのディレクトリに移動します。
cd ~/gcp-dlp-proxy-tutorial
DLP プロキシ サーバーの構成ファイルを編集します。
nano config.json
次の行を編集して、プレースホルダを構成の値で置き換えます。
"db_instance": "project_id:region:instance_name", "db_dbname": "dbase_name", "projectID": "project_id", "audit_template": "inspect_template", "deidentify_template": "deidentify_template",
以下を置き換えます。
project_id
: 実際の Cloud プロジェクトの ID。region
: Cloud SQL インスタンスを作成したゾーンに対応するリージョン名。たとえば、インスタンスをus-central1-a
ゾーンに作成した場合、リージョンはus-central1.
です。instance_name
: Cloud SQL インスタンス名(dlp-test-instance
など)。dbase_name
: データベース名(dlp-test-db
など)。inspect_template
: 検査テンプレートの名前(inspect-template-1
など)。inspect_template
: 匿名化テンプレートの名前(de-identify-template-1
など)。
DLP プロキシを起動するには、ターミナルの出力を
log.txt
ファイルにリダイレクトし、バックグラウンドでプロキシを実行します。java -jar dlp-cloudsql-proxy-server.jar database_userpassword-databaselog.txt 2>&1 &
以下を置き換えます。
database_user
: データベース ユーザーのユーザー名。password-database
: 以前に作成したデータベース ユーザーのパスワード。
DLP プロキシが動作していることを確認するため、プロセスが実行されていることを確認します。
ps -ax | grep dlp-cloudsql-proxy-server.jar
DLP プロキシを実行しているプロセスが出力に表示されます。
1233 pts/1 Sl 0:08 java -jar dlP-cloudsql-proxy-Server.jar dlptester XXXXXXXX 1266 pts/1 S+ 0:00 grep --color=auto dlp-cloud sql-proxy-Server
プロセスが実行されていない場合は、
log.txt
ファイルでエラー メッセージを確認します。付属のシンプルなクライアントを起動し、ポート
5000
で DLP プロキシに接続します。java -jar dlp-sql-proxy-client-0.1.0.jar 5000
クライアントから簡単なクエリを実行します。このコマンドは、Cloud DLP がデータを処理してから結果を返すため、しばらく時間がかかることがあります。
select * from TEST_DATA LIMIT 10;
出力では、クエリ結果に含まれる電話番号、メールアドレス、SSN の値がハッシュ値で暗号化されたサロゲート値で置き換えられています。プロキシを使用しない場合に返された結果と比べてください。
Connected to SQL Proxy Enter query here (enter "quit" to disconnect): select * from TEST_DATA LIMIT 10; id: 1 phone: S1(40):AYnPXA6QcxlpOITeaZZM3+U/s7KtXyTqv5KAbB8= metric: 5 email: S1(48):AS8hnzz6g1fGCabK2cbhPn5X7Qvc7FKmLTXnKF1iKF2nRjGQ ssn: S1(40):AQ1jSCdIsctniCkCHNEbsc+kliJArHmM6bOJRg== id: 2 phone: S1(40):AfiaKlOYHAzgWGtrkpvaCWUY1e2yvMaK7IQvM/M= metric: 8 email: S1(48):ASF7UBFuZ/xUzXJjD1Ap745xcGmKpTjw+IwIBB/F/OX53w== ssn: S1(40):AWYXh7U8PhNUZu+fXLuLFS0KCMmcM5uKH17rig== id: 3 phone: S1(40):AYnPXA6QcxlpOITeaZZM3+U/s7KtXyTqv5KAbB8= metric: 8 email: S1(48):AS8hnzz6g1fGCabK2cbhPn5X7Qvc7FKmLTXnKF1iKF2nRjGQ ssn: S1(40):AQ1jSCdIsctniCkCHNEbsc+kliJArHmM6bOJRg== id: 4 phone: S1(40):AXFnPkf620wIBXxW0uuBXSVERzRzvhdgbCdaYIw= metric: 1 email: S1(48):AZgs1pfjEPLL6sDAcIZWuCZhC/saw/rQrujxAFy/O60uIA== ssn: S1(40):AatdICHDpwCc19ELEjCS8zAmeSVvx/1KB5/S2Q== End of query results
クライアントを終了します。
quit
DLP プロキシ サーバーを終了します。
killall java
log.txt
ファイルをターミナルに出力し、DLP プロキシからの出力を表示します。cat log.txt
前に構成した 3 つの InfoType と一致するファイルの最後に監査フェーズの出力が表示されます。
RunCommand DLP Result DLP Findings: Quote: Info type: PHONE_NUMBER Likelihood: VERY_LIKELY Quote: Info type: EMAIL_ADDRESS Likelihood: LIKELY Quote: Info type: US_SOCIAL_SECURITY_NUMBER Likelihood: VERY_LIKELY Quote: Info type: PHONE_NUMBER Likelihood: VERY_LIKELY Quote: Info type: EMAIL_ADDRESS Likelihood: LIKELY Quote: Info type: US_SOCIAL_SECURITY_NUMBER Likelihood: VERY_LIKELY Quote: Info type: PHONE_NUMBER Likelihood: VERY_LIKELY Quote: Info type: EMAIL_ADDRESS Likelihood: LIKELY Quote: Info type: US_SOCIAL_SECURITY_NUMBER Likelihood: VERY_LIKELY Quote: Info type: PHONE_NUMBER Likelihood: VERY_LIKELY Quote: Info type: EMAIL_ADDRESS Likelihood: LIKELY Quote: Info type: US_SOCIAL_SECURITY_NUMBER Likelihood: VERY_LIKELY Got DLP Result Sensitive information found write log: 1503994 Logged Main.Query: 1503994
クリーンアップ
課金を停止する最も簡単な方法は、チュートリアル用に作成した Cloud プロジェクトを削除することです。また、リソースを個別に削除することもできます。プロジェクトの削除
- Cloud Console で [リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
次のステップ
- DLP プロキシを使用してセンシティブ データを含むデータベースにクエリを実行するアーキテクチャの例で、アーキテクチャで DLP プロキシを使用する方法を確認する。
- Google Cloud のその他の機能を試す。チュートリアルをご覧ください。