ライフサイクル管理およびデータ保護
この記事では、OutSystemsシステムのアプリケーションがどのような個人データを収集し、どこに保管するかを説明し、その個人データを難読化または削除する方法についての例をいくつか紹介します。
個人データには、私生活や仕事、一般生活関連など直接または間接的に個人を特定できる情報がすべて含まれています。氏名、写真、メールアドレス、住所、ユーザー名、コンピュータのIPアドレスなどがあります。
Service CenterおよびLifeTime{ #service-center-and-lifetime }
ITユーザー管理
Service CenterおよびLifeTimeはどちらもOutSystemsの管理コンソールで、ITユーザーの管理を行います。 LifeTimeが利用できない場合、Service CenterがITユーザーの作成および管理を行います。LifeTimeが利用可能な場合は、LifeTimeでこの管理を実行します(Service Centerをバックグラウンドで使用)。
ITユーザーを管理するため、Service CenterおよびLifeTimeは、Userシステムエンティティ(物理テーブル名:ossys_User)にユーザーごとに以下の情報を保存しています。
- 氏名(Joel Grantなど)
- ユーザー名(Firwassなど)
- モバイル端末[Service Center専用](414-382-6132など)
- メール(JoelGrant@rhyta.comなど)
総当たり攻撃からの保護
Service CenterおよびLifeTimeには、ユーザーパスワードの体系的な推測を試みる総当たり攻撃から保護するシステムが用意されています。
このシステムでは、ユーザーレベルの攻撃とIPレベルの攻撃の2段階の攻撃に対する保護を提供しています(詳細については、「こちら」をご覧ください)。保護が機能するためには、ユーザーの一部の個人データを保存する必要があります。LoginAttemptシステムエンティティには、以下の個人情報が保存されています(物理テーブル名: OSSYS_LOGIN_ATTEMPT)。
- ユーザー名(Firwassなど)
- IPアドレス(69.89.31.226など)
LifeTimeの監査イベント
LifeTimeには、インフラでITユーザーが実行した操作をすべてログに記録する監視システムが組み込まれています。これらのログは、[Applications]画面、[Deployment Plans]画面、[Users]画面、[Teams]画面、[Roles]画面で実行された操作に関連するものです。
上記のログには、ユーザーの氏名やユーザー名、ならびにクライアントのIPなどの個人情報も一部含まれる場合があります。個人情報は、MessageアトリビュートおよびClientIPアトリビュートのAuditEventエンティティ[OSLTM_AUDITEVENT]に保存されます。
パフォーマンス上の理由から、LifeTimeは1年以上古い監査ログを削除します。デフォルトでは、この削除プロセスは毎日午前7時30分(データベース時間)に実行されます。
LifeTime Analytics
LifeTime Analyticsを使用して、アプリケーションに関するパフォーマンスレポートを自動的に構成できます。このレポートは、登録されたユーザーまたは特定のメールに送信できます。
この連絡先リストは、LifeTimeAnalyticsモジュールのPerformanceReportConfigurationエンティティのプラットフォームデータベースに保存されています(物理テーブル名: OSLTM_REPORTCONF)。
メール
OutSystemsにはWebアプリケーションからメールを送信する機能があります。この仕組みで必要とされるメタデータには、ユーザーに関連する個人情報が含まれる場合があります。 ユーザーデータはメールを送信するために必要ですし(メールアドレス)、メールの内容自体にも含まれる場合があります。
このデータはすべて次のSystemエンティティに含まれます。Sent_Email(物理テーブル名: OSSYS_EMAIL)およびEmail_Content(物理テーブル名: OSSYS_EMAIL_CONTENT)。
ログ
Service Centerでは、ユーザーのログイン情報をGeneralログに記録します。これらのログの形式は以下の通りです。
Login (user: '<ユーザー名>').
この情報は、すべてのGeneralログテーブル(oslog_General_0、oslog_General_1、oslog_General_2、 …)に含まれる場合があります。
ユーザー
Usersは、エンドユーザーを管理するために使用されるデフォルトのアプリケーションです。このアプリケーションは、「[Service Center]セクションおよび[LifeTime]セクション」に記載済みのユーザー関連情報と同じ情報を使用します。具体的に以下の情報です。
- 氏名(Joel Grantなど)
- ユーザー名(Firwassなど)
- モバイル端末(414-382-6132など)
- メール(JoelGrant@rhyta.comなど)
この情報が保存されているエンティティは、Service Center およびLifeTimeで使用されているのと同じエンティティ(Userシステムエンティティ)ですが、使用するテナント識別子は異なります。
また、Usersでは、前述した総当たり攻撃に対する保護システムを使用しています。そのため、このシステムには以下の個人ユーザー情報が保存されています。
- ユーザー名(Firwassなど)
- IPアドレス(69.89.31.226など)
Usersは別のエンティティ、つまりUsersモジュールのLoginAttemptエンティティ(物理テーブル名: OSUSR_<PREFIX>_LOGINATTEMPT)を使用してこの情報を保存します。
注記: Usersをコピーして、ユーザープロバイダを新規作成した場合、同じメカニズムをご利用のユーザープロバイダで使用できます。
アプリのフィードバック
アプリのフィードバックは、ユーザーのフィードバックを収集するシステムアプリケーションで、ユーザーがモバイルアプリケーションやWebアプリケーションを使用しながら、入力したフィードバックや口頭のフィードバックを共有できるようにすることでこれを行います。 また、フィードバックを送信すると、その瞬間のユーザー画面の表示内容のスクリーンショットがツールによって取得されます。 そのため、アプリケーションのタイプによっては機密情報が取得される可能性があります。
たとえば、ユーザーがディレクトリタイプのアプリケーションを使用していて、連絡先リスト画面のフィードバックを送信する場合、その瞬間に一覧表示されたすべての連絡先が、スクリーンショットまたはHTMLコードとしてツールによって収集されます。 その結果、一部の個人情報がApp Feedbackデータベースに保存されることがあります。 このデータは、ECT_Providerモジュールの以下のエントリの以下のアトリビュートに保存されるている可能性があります。
- Feedbackエンティティ
originalHTML
(Webアプリケーションで使用)- 画面のHTML。
- WebpageContentエンティティ
Content
(Webアプリケーションで使用)- ユーザーがフィードバックを送信したときにHTMLで参照されるすべてのリソース
- FeedbackScreenshotエンティティ
ImageBinary
(モバイルアプリケーションで使用)- フィードバックを送信した際のユーザー画面のスクリーンショット。
- FeedbackSoundMessageエンティティ
SoundBinary
(モバイルアプリケーションで使用)- フィードバックを送信した際に録音された音。
ユーザーのフィードバック自体に加えて、できるだけ多くのコンテキストを提供するため、一部の詳細なメタデータも保存されます。以下はこの情報の一部です。
- ユーザーの氏名
- ユーザーのユーザー名
- ユーザーのメール
- 使用しているブラウザ
- 使用しているデバイス(モバイルアプリで)
- 使用しているOS
個人データの難読化/除去の例
本番環境以外では、収集した個人データ(エンドユーザーの名前など)が重要でないため、マスキングや削除が必要なケースがあります。たとえば、トラブルシューティングが目的の場合は、実際の本番データベースのクローン使用した方がよいかもしれません。あるいは、新機能のテストを実行するためには、本番前環境で実際の本番データを使用した方がよいかと思われます。
こうした状況において、OutSystemsシステムのアプリケーションが収集した個人データを差し替えたり、削除したりする方法を以下に例示します。
ユーザー
以下のSQLスニペットで、UserエンティティのName
、Username
、Email
、MobilePhone
番号をマスクします。
UPDATE ossys_User SET NAME = CONCAT('User_', ID), USERNAME = CONCAT('User_', ID), EMAIL = CONCAT('user_', ID, '@email.com'), MobilePhone = '' WHERE USERNAME <> 'admin';
注記:admin
は内部プラットフォームユーザーで更新できません。admin以外のユーザーはプラットフォームで新規作成されます。
このSQLスニペットは、本番環境で使用しないでください。エンドユーザーのユーザー名とメールがすべて変更され、エンドユーザーがサポートなしにはログインできなくなります。
システムログイン試行
以下のSQLスニペットによって、LoginAttemptシステムエンティティからログイン試行のログがすべて削除されます。
DELETE FROM OSSYS_LOGIN_ATTEMPT;
このSQLスニペットは、本番環境で使用しないでください。
ログイン試行のログを削除することで、個人データは消去されますが、それと同時に以前は総当たり攻撃を保護するシステムによって阻止されていたはずのユーザー/IPがすべて阻止されなくなります。
ユーザーログイン試行
以下のSQLスニペットを使用して、UsersモジュールのLoginAttemptエンティティの物理テーブル名を検索します。
SELECT PHYSICAL_TABLE_NAME FROM ossys_Entity WHERE NAME = 'LoginAttempt' AND ESPACE_ID = (SELECT ID FROM ossys_Espace WHERE NAME = 'Users')
次に、以下のSQLスニペットで物理テーブル名を使用してユーザーのログイン試行のログをすべて削除します。
DELETE FROM <検索された物理テーブル名>;
ここで、<検索された物理テーブル名>
は上記の手順で検索したUsersモジュールのLoginAttemptエンティティの物理テーブル名です。
このSQLスニペットは、本番環境で使用しないでください。
ログイン試行のログを削除することで、個人データは消去されますが、それと同時に以前は総当たり攻撃を保護するシステムによって阻止されていたはずのユーザー/IPがすべて阻止されなくなります。
メール
以下のSQLスニペットによって、送信済みメールおよび未送信メールの情報や内容がすべて削除されます。
DELETE FROM OSSYS_EMAIL; DELETE FROM OSSYS_EMAIL_CONTENT;
ログ
以下のSQLスニペットによってすべてのService Centerの全般的なログテーブルからログイン試行に関するログエントリがすべて削除されます。
DELETE FROM oslog_General_0 WHERE Message LIKE 'Login (%'; DELETE FROM oslog_General_1 WHERE Message LIKE 'Login (%'; DELETE FROM oslog_General_2 WHERE Message LIKE 'Login (%'; DELETE FROM oslog_General_3 WHERE Message LIKE 'Login (%'; DELETE FROM oslog_General_4 WHERE Message LIKE 'Login (%'; DELETE FROM oslog_General_5 WHERE Message LIKE 'Login (%'; DELETE FROM oslog_General_6 WHERE Message LIKE 'Login (%'; DELETE FROM oslog_General_7 WHERE Message LIKE 'Login (%'; DELETE FROM oslog_General_8 WHERE Message LIKE 'Login (%'; DELETE FROM oslog_General_9 WHERE Message LIKE 'Login (%';
アプリのフィードバック
以下のSQLスニペットを使用して、個人情報を含む可能性のあるECT_ProviderモジュールのApp Feedbackエンティティごとの物理テーブル名を検索します。
SELECT PHYSICAL_TABLE_NAME FROM ossys_Entity WHERE ESPACE_ID = (SELECT ID FROM ossys_Espace WHERE NAME = 'ECT_Provider') AND NAME IN ('Feedback', 'WebpageContent')
次に、以下のSQLスニペットで各物理テーブル名を使用して、各物理テーブルのデータをすべて削除します。
DELETE FROM <検索された各物理テーブル名>;
ここで、<検索された各物理テーブル名>
は、上記の手順で検索したECT_Providerモジュールの各エンティティの物理テーブル名です。
注記: WebpageContentエンティティの内容は、外部キーの参照制約により最後に削除する必要があります。