1. GDPRの

GDPRの技術ガイダンス(EXMおよびSitecore Commerceを含む)

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

一般データ保護規則(GDPR)は、2018年5月25日に発効する欧州連合の規則(EU 2016/679)です。Sitecoreは、GDPRコンプライアンスの取り組みをサポートするためにSitecoreの実装を設定する方法を説明するホワイトペーパーを公開しています。

このテクニカル ガイダンスでは、開発者がGDPRの個々のデータ主体の権利要求要件 (特定の消去権、通知を受ける権利、アクセス権、データポータビリティなど) に準拠するための手順を実装する方法に関する情報を提供します。このトピックでは、すべてを網羅するガイダンスを提供するわけではありません。Sitecoreのお客様は、ご自身のリスクを評価できるのはお客様のみであり、個人データの処理方法など、お客様のビジネスに対する法律または規制の適用性を理解するために、弁護士に相談することをお勧めします。

メモ

Sitecore 9.0以降については、プライバシー ガイドを参照してください。

EXMとSitecore Commerceに関する情報もあります。

消去する権利

このセクションでは、GDPRの第17条で説明されているように、消去する権利 (忘れられる権利とも呼ばれます) を有効にするためにSitecoreの実装を設定する方法について説明します。

Sitecore xDBの実装は、コンタクトのインタラクション履歴をデータベースに保存します。Sitecore xDBの実装をカスタマイズして、データベースから個人のデータを検索して削除できます。

この権限を有効にするには、removeContactPiiSensitiveDataæパイプラインを使用します。このパイプラインをどこで、いつ、どのように呼び出すかは、開発者の皆さんに任されています。パイプラインは、バックグラウンド ワーカー プロセスとして使用することも、他の多くの方法で使用することもできます。

連絡先にアクティブなセッションがある場合、システムからすべての個人データを削除することはできないため、ユーザーが構成すると、パイプラインはデータを削除する前に連絡先をロックして、連絡先のアクティブなセッションがないことを確認します。

パイプラインのしくみ

ユーザーが構成すると、パイプラインは実行時に次の手順を実行します。

  1. 前提条件を確認します。xDBが無効になっている場合、パイプラインは中止されます。

  2. 接点をロックして、接点を編集できないようにします。

  3. これにより、設定された連絡先の個人ファセットと機密性の高いファセットがすべて削除されます。Sitecoreの実装は、コンタクトがロードされるときに削除されるすべてのファセットをロードするように設定する必要があることに注意してください。

  4. 連絡先識別子を削除します。

  5. デバイスの最後の既知の連絡先IDを削除して、連絡先とデバイス間の接続を切断します。なお、デバイスIDを記憶するブラウザCookieは、ユーザーのウェブブラウザに残りますが、連絡先を特定するために使用することはできません。

  6. Contact.GdprStatus.ExecutedRightToBeForgottenフラグをtrueに設定します。

  7. 連絡先をxDBに保存します。

  8. これにより、連絡先の履歴インタラクションから個人データと機密データが削除されます。

  9. xDBの連絡先のロックを解除します。

ユーザーが構成すると、Engagement Automationコンポーネントはこのパイプラインを拡張して、すべてのオートメーション状態を削除します。

連絡先は、パイプラインの実行後に読み取り専用になります。ExecutedRightToBeForgottenがtrueに設定されているコンタクトを保存しようとすると、Sitecoreの実装は例外をスローします。

ユーザーが設定すると、Contact Segmentation Indexコンポーネントは、ライブ処理の問い合わせとインタラクションのインデックス作成パイプラインを拡張して、機密データとして識別したデータを検索インデックスから削除します。

パイプラインは、パイプラインの引数でこれを有効にすると、過去のインタラクションを反復処理して個人データと機密データを削除することもできます。Sitecore.Analytics.Pipelines.RemoveContactPiiSensitiveData.RemoveHistoricalInteractionsPiiSensitiveDataProcessorクラスは、過去のインタラクションを反復処理し、各インタラクションに対してremoveHistoricalInteractionPiiSensitiveDataパイプライン (デフォルトでは空) を呼び出し、インタラクションをxDB実装に格納してインデックス作成のスケジュールを設定します。

このパイプラインを拡張して、個人データや機密データを削除できます。次の例は、CustomValuesコレクションに格納されている個人データを削除するためにパイプラインに追加できるプロセッサを示しています。

public class DemoHistoricalInteractionPiiSensitiveDataProcessor : RemoveHistoricalInteractionPiiSensitiveDataProcessorBase
{
  public override void Process(RemoveHistoricalInteractionPiiSensitiveDataPipelineArgs args)
  {
    if(args.Interaction.CustomValues.ContainsKey("PersonalData"))
    {
      args.Interaction.CustomValues["PersonalData"] = null;
    }
  }
}
手記

機密データを削除する前に、ExecutedRightToBeForgottenフラグをxDBに設定して連絡先を保存してください。機密データを削除すると未処理の例外が発生する場合は、連絡先を保存してパイプライン全体を再度実行できなくなります。その後、パイプラインを再度実行する前に、xDBでExecutedRightToBeForgottenフラグを手動で設定解除する必要があります。

手記

デフォルトでは、removeContactPiiSensitiveDataパイプラインはCollection (MongoDB) データベースから連絡先とインタラクションのデータを削除します。レポート データベースからデータは削除されません。Sitecoreは、このデータベースを完全に再構築すると、このデータをレポート データベースから削除します。

コード例

次の例は、パイプラインの使用方法を示しています。

var args = new Sitecore.Analytics.Pipelines.RemoveContactPiiSensitiveData.RemoveContactPiiSensitiveDataArgs(contactId)
{
  RemoveInteractionPiiSensitiveData = //true if there is personal/sensitive data on interaction to remove
};
Sitecore.Pipelines.CorePipeline.Run("removeContactPiiSensitiveData", args); 

または、代わりに:

corePipelineManager.RunRemoveContactPiiSensitiveDataPipeline(args); //where corePipelineManager is an instance of Sitecore.Abstractions.BaseCorePipelineManager class.

通知を受ける権利

このセクションでは、GDPRの第12条と第13条、および第4条第11号に記載されているように、収集する内容とその使用方法について透明性を確保するための要件を満たすのに役立つ可能性のある、通知を受ける権利を有効にするためにSitecoreの実装を設定する方法について説明します。

開発者は、プライバシー ポリシーを通じて収集したデータについてエンドユーザーに通知する取り組みを追跡するようにSitecoreの実装を設定できます。

xDBは、Privacy Policy Acknowledgementと呼ばれるコレクション ファセットを含むように構成できます。このコレクションには、連絡先がお客様のプライバシーポリシーを確認したかどうか、またいつ確認したかの監査証跡があります。コレクションには次のものが含まれています。

  • Agreement Date - 連絡先が最新のプライバシーポリシーに同意した日付を指定します。

  • Policy Identifier - ポリシーの一意の識別子を指定します。これには、バージョン番号を含めることができます。

詳細は次のとおりです。

名前空間: Sitecore.Analytics.Model.Entities

アセンブリ: Sitecore.Analytics.Model (Sitecore.Analytics.Model.dll)

構文:

/// <summary>
  ///   Allows a class to implement a facet that indicates information about this contact and GDPR.
  /// </summary>
  public interface IGdprStatus : IFacet
  {
    /// <summary>
    ///   Gets or sets a value indicating whether right to be forgotten was executed.
    /// </summary>
    /// <value>
    ///   <c>true</c> if right to be forgotten was executed; otherwise, <c>false</c>.
    /// </value>
    bool ExecutedRightToBeForgotten { get; set; }
    /// <summary>
    ///   Gets a <see cref="IPrivacyPolicyAcknowledgement" /> that indicates an audit trail of when this contact has
    ///   acknowledged the brand's privacy policy.
    /// </summary>
    /// <value>
    ///   The privacy policy acknowledgement.
    /// </value>
    [NotNull]
    IPrivacyPolicyAcknowledgement PrivacyPolicyAcknowledgement { get; }
  }

コード例

次の例は、ファセットの使用方法を示しています。

Sitecore.Analytics.Model.Entities.IContact contact = // Get Contact
Sitecore.Analytics.Model.Entities.IGdprStatus gdprStatus = contact.GetFacet< Sitecore.Analytics.Model.Entities.IGdprStatus>("GdprStatus");
gdprStatus.ExecutedRightToBeForgotten = true;
Sitecore.Analytics.Model.Entities.IPrivacyPolicyAcknowledgementElement privacyPolicyAcknowledgementElement = gdprStatus.PrivacyPolicyAcknowledgement.Values.Create();
privacyPolicyAcknowledgementElement.AgreementDate = System.DateTime.UtcNow;
privacyPolicyAcknowledgementElement.PolicyIdentifier = "1.0.0";

アクセス権とデータポータビリティの権利

このセクションでは、GDPR要件の第15条に記載されているように、アクセス権を有効にする、または処理および保存している個人データを個人が確認できるようにするためにSitecoreの実装を設定する方法、およびデータポータビリティの権利、データ主体に個人データのコピーを提供する方法について説明します。 GDPRの第20条に記載されているとおりです。

開発者は、連絡先リポジトリAPIを使用して、特定の連絡先の完全なインタラクション履歴を取得することを選択できます。

名前空間: Sitecore.Analytics.Data

アセンブリ: Sitecore.Analytics (Sitecore.Analytics.dll)

構文:

public virtual Sitecore.Analytics.DataAccess.HistoricalInteractionsCursorBase GetInteractionCursor(
     System.Guid contactId,
     int visitsToLoadPerBatch,
     System.DateTime maximumSaveDate)

パラメーター:

  • contactId (連絡先ID)

    型: System.Guid

    連絡先ID

  • visitsToLoadPerBatch

    タイプ: Int32

    バッチにロードする訪問。値が AnalyticsSettings.ContactHistory.MaxInteractions 設定の値を超える場合は、代わりにこの設定の値が使用されます。

  • maximumSaveDate (最大値保存日付)

    型: System.DateTime

    訪問がデータベースに保存された最大日付 (UTCで表される) で、訪問が返される DateTime 値。指定した日付より後にデータベースに保存された訪問は、結果に含まれません。DateTime.KindはDateTimeKind.Utcにする必要があります。

    戻り値: Sitecore.Analytics.DataAccess.HistoricalInteractionsCursorBase のインスタンス。

コード例

次の例は、APIの使用方法を示しています。

var cursor = _repository.GetInteractionCursor(contactId, visitsToLoadPerBatch, maximumSaveDate);
var interactions = new System.Collections.Generic .List<Sitecore.Analytics.Model.VisitData>();
while (cursor.HasNextBatch)
{
  interactions.AddRange(cursor.GetNextBatch());
}

EXMの

このセクションでは、GDPRに関してEmail Experience Manager (EXM) で注意する必要がある事項について説明します。

手記

この情報は、EXM 3.5 Update 2でのみ有効です。

パイプライン

removeContactPiiSensitiveDataパイプラインには、RemovePiiSensitiveExmDataパイプライン プロセッサがあります。このプロセッサは、次の処理を行います。

  • 問い合わせに関連する行をEXMのEmailOpenEventsテーブルから削除します。WEBデータベース

  • 問い合わせに関連するすべての行をEXMのLinkClickEventsテーブルから削除します。WEBデータベース

  • 問い合わせに関連するすべての行をEXMのDispatchQueueテーブルから削除します。MASTERデータベース

  • EXMのSuppressionsテーブルから、連絡先に関連するすべての行を削除します。MASTERデータベース

removeHistoricalInteractionPiiSensitiveDataパイプラインの RemoveHistoricalInteractionsPiiSensitiveExmData パイプライン プロセッサは、インタラクションのためにEXMによって作成された個人データをすべて削除します。カスタム値のメールアドレスをPII data removedに変更し、ページイベントのカスタムデータ(名、姓、メールアドレス)をPII data removedに変更します。

レポートデータ

ClickイベントとUnsubscribeイベントは、EXMが忘れられる権利をトリガーした連絡先に対して追跡する唯一のイベントです。これは、メール キャンペーンのレポート データが整列していないように見えることを意味します。

たとえば、コンタクトがメール メッセージで忘れられる権利をトリガーし、後で同じメール メッセージ内のリンクをクリックした場合、EXMはClickイベントを記録し、メール キャンペーンのレポート データに追加します。ただし、コンタクトによって忘れられる権利がトリガーされたため、EXMはOpenイベントを追跡しません。したがって、Eメールキャンペーンを開いたコンタクトの数が、レポートデータ内の同じEメールキャンペーンでクリックされたリンクの数よりも少ない可能性があります。

スケーリングされた環境

スケーリングされた環境でコンテンツ配信 (CD) ロールのremoveContactPiiSensitiveDataパイプラインを呼び出すようにEXM実装を構成すると、EXM.MASTERデータベースはクリーンアップされません。EXM:WEBデータベースについても、スケーリングされた環境でコンテンツ管理 (CM) ロールでremoveContactPiiSensitiveDataパイプラインが呼び出される場合も同様です。

したがって、removeContactPiiSensitiveDataパイプラインがCDインスタンスまたはCMインスタンスで呼び出された後、他のロールでRemoveSensitiveDataパイプラインを実行する必要があります。例えば:

Guid contactId; //Id of the contact
string emailAddress; //Email address of the contact. Only necessary if run on the CM and you want to remove data from the Suppressions table
 
var args = new RemoveSensitiveDataPipelineArgs(contactId, emailAddress);
CorePipeline.Run("RemoveSensitiveData", args, "exm.gdpr");

サイトコアコマース

手記

この情報は、Sitecore Commerce 8.2.1 Update 3で有効です。

Sitecore Commerce 8.2.1 Update3で提供されるGDPRのサポートは、上記のGDPRの技術ガイダンスに従います。

Sitecore Commerceのインタラクションでは、個人データは2つのコンテキストで収集および保存されます。

  • ユーザーがSitecore Commerceを利用したサイトを操作するときに収集されるユーザーの連絡先とページイベント情報は、Sitecore xDBに保存されます。GDPRの「消去権」の原則が行使されると、removeContactPiiSensitiveDataパイプライン(上記のとおり)を通じて、指定された連絡先から個人データが削除されます。対応するCommerce Connectパイプライン プロセッサは、Experience ProfileページのCommerceタブに通常表示されるように、登録済みユーザーと匿名ユーザーの両方のコマース関連の閲覧データと注文データをすべて削除するために呼び出されます (たとえば、閲覧した製品などのインタラクションや、注文などの結果)。新しいパイプライン プロセッサとすべてのコマース関連のページeventIdは、Website\App_Config\Include\Sitecore.Commerce.configファイルで定義されます。個人データを含む独自のカスタムページイベントがある場合は、GDPRの「消去権」操作が実行されるときに削除するようにフラグが立てられたこれらのページeventIdsをこの設定ファイルに追加できます。

  • トランザクション関連データ (つまり、ユーザー登録や注文などのアクティビティ中に取得された情報) は、Commerceデータベースに格納されます。GDPRの「消去権」の原則をサポートするために、Sitecore User ManagerアプリケーションとCommerce Server Customer and Orders Managerを使用して、関連付けられたユーザー アカウントを削除できます。

手記

注文に関連する個人データ(氏名、請求先住所など)は保持されます。このようなデータは、潜在的な監査目的および保証要件(返品や製品のリコールなど)に必要です。貴社のGDPRコンプライアンスにより、すべての個人データをCommerce Orderデータから削除することが義務付けられている場合は、手動で削除する必要があります。

この記事を改善するための提案がある場合は、 お知らせください!