GMOアドマーケティングのT.Oです。
今回はGCPのカスタムリクエストヘッダー機能を利用してGDPR対応をしてみます。
0.GDPR(EU一般データ保護規制)とは
GDPRとはEU内のすべての個人データ保護やその取り扱いについて定めた規則で2018年5月25日に施行されました。個人データについては「識別された又は識別され得る自然人に関するあらゆる情報」と定義されており、識別可能な個人に関連する情報(名前、識別番号、所在地、Emailアドレス、IPアドレスやCookieのようなオンライン識別子)が保護の対象となります。
データ主体の権利を侵害する行為や域外移転の手続に反する行為に対しては、2,000万ユーロ以下か、全世界の年間総売上の4%以下のいずれか高い方の制裁金が科されます。
1.GDPR対応の内容
Cloud Load Balancingのグローバル外部HTTP(S)ロードバランサで使用されるバックエンドサービスには カスタムリクエストヘッダーを作成する機能があります。この機能にはヘッダー値として使用可能な変数が複数あり、その中には以下のように国別コードを取得できる変数があります。この変数を利用してGDPR対象国かを判別し、対象国の場合にはアクセス拒否のHTTPステータスコードである403を返すことにします。
変数 | 説明 |
client_region | クライアントの IP アドレスに関連付けられる国(またはリージョン)。”US” や “FR” などの Unicode CLDR リージョン コード。(ほとんどの国では、このコードが ISO-3166-2 コードに直接対応している) |
2.カスタムリクエストヘッダーを指定する
バックエンドサービスがすでに存在している状態でカスタムリクエストヘッダーを指定するには、以下のようにgcloudコマンドを実行します。バックエンドサービス名にはロードバランサで使用しているバックエンド サービスの名前を設定します。
ヘッダ名には任意の名前を設定します。
ヘッダー値には「1.GDPR対応の内容」で説明した変数であるclient_regionを設定します。ヘッダー値は中括弧で囲む必要があります。
1 2 3 4 |
(コマンド説明) $ gcloud compute backend-services update (バックエンドサービス名) \ --global \ --custom-request-header '(ヘッダ名):(ヘッダ値)' |
1 2 3 4 |
(コマンド指定例) $ gcloud compute backend-services update test-backend-service \ --global \ --custom-request-header 'X-Client-Region:{client_region}' |
3.実装例
phpで実装することにします。3.1.国別コードからブロック対象か否かを判定する
カスタムリクエストヘッダーのヘッダ名として指定した’X-Client-Region’の値をHTTPヘッダから取得します。その値がブロック対象国の配列に含まれている場合、ブロック対象と判定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php class BlockCountry { private static $blockCountyArray = array( // EU加盟国 + EEA加盟国 + イギリス + スイス "AT", // オーストリア "BE", // ベルギー "BG", // ブルガリア "HR", // クロアチア "CY", // キプロス "CZ", // チェコ "DK", // デンマーク "EE", // エストニア "FI", // フィンランド "FR", // フランス "DE", // ドイツ "GR", // ギリシャ "HU", // ハンガリー "IE", // アイルランド "IT", // イタリア "LV", // ラトビア "LT", // リトアニア "LU", // ルクセンブルク "MT", // マルタ "NL", // オランダ "PL", // ポーランド "PT", // ポルトガル "RO", // ルーマニア "SK", // スロバキア "SI", // スロベニア "ES", // スペイン "SE", // スウェーデン "IS", // アイスランド "NO", // ノルウェー "LI", // リヒテンシュタイン "GB", // イギリス "CH" // スイス ); public static function isBlockCountry() { if (isset($_SERVER['X-Client-Region'])){ $countryCode = $_SERVER['X-Client-Region']; } else { $countryCode = 'default'; } return in_array($countryCode, self::$blockCountyArray); } } |
3.2.ブロック対象国からのアクセスの場合、アクセス拒否のHTTPステータスコードを返却する
「国別コードからブロック対象か否かを判定する」処理でブロック対象であった場合、アクセス拒否のHTTPステータスコードである403を返却します。
1 2 3 4 5 6 7 8 9 10 |
<?php require_once('./BlockCountry.php'); $isGDPR = BlockCountry::isBlockCountry(); if ($isGDPR){ http_response_code(403); exit; } // ↓ブロックしない場合の処理を記述 |
4.まとめ
GCPのカスタムリクエストヘッダー機能を使用したGDPR対応についてご紹介しました。今回の内容が皆さんのお役に立てれば幸いです。
参考
執筆にあたり以下を参考にさせていただきました。バックエンド サービスでカスタム ヘッダーを作成する
Ingress機能の構成(ユーザー定義のリクエストヘッダー)
明日は@ytpcasさんによる「GASでSalesforceのOpportunityテーブルを更新する」です。
引き続き、 GMOアドマーケティング Advent Calendar 2022 をお楽しみください!
■学生インターン募集中!
https://note.gmo-ap.jp/n/nc42c8a60afaf
■エンジニア採用ページはこちら!
https://note.gmo-ap.jp/n/n02cbeb6edb0d
■GMOアドパートナーズ 公式noteはこちら!
https://note.gmo-ap.jp/