Salesforce/Force.comのデータセキュリティ(オブジェクトアクセス)

はじめに

今岡です。TerraSky Techブログ -Force.comのすべて+(プラス)- の初回エントリです。 このブログでは、書籍「Force.comのすべて」の誌面上の都合で十分お伝えできなかったことや、バージョンアップ時の新機能、開発時に役立つTipsなどをテラスカイのエンジニアからお届けします。

データアクセスコントロールの検討は不可欠

Force.comの活用が進むにつれ、そのプラットフォームには企業のコンプライアンスやプライバシーに関わる情報や財務情報など機密性の高い重要なデータを保有することになり、セキュリティはForce.comでアプリケーションを構築する上での重要テーマとなります。

最優先で検討するポイント

適切なユーザのみが適切なデータにアクセスできる状態とする

これはユーザに応じたデータ表示のコントロールが不可欠であり、Force.com組織として、社内や社外ユーザが適切な範囲のデータにアクセスできるようにする必要があるということです。

データアクセスをコントロールする機能

データアクセスのコントロールは基本的に以下の機能で構成されます。

アクセスコントロールの機能

- プロファイル

- 項目レベルセキュリティ

- 組織の共有設定

- 共有ルール

オブジェクトに対するデータアクセスのベース

データアクセスのベースはプロファイルが管理します。プロファイルのオブジェクトに対する基本アクセス「CRUD(作成、参照、更新、削除)」がデータアクセスのベースとなります。オブジェクトに対する「すべてのデータ参照」「すべてのデータ変更」といった特別な権限もありますが、この設定を行うのは十分な検討及び慎重な適用が必要でしょう。

データアクセスにおける落とし穴

ユーザライセンスによってはデータアクセスが制限されるライセンスがあります。そのため、データアクセスを検討する上でユーザに割り当てるライセンスの種類は必ず念頭に置きましょう。

※どのライセンスを使用してシステムを構築するかの検討はシステム導入前に行うべきものです。

ライセンスによる違い

- Force.comプラットフォーム:取引先/取引先責任者(参照のみ)、カスタムオブジェクトのみ

- カスタマーポータル:商談オブジェクトは使えない

- Chatter Free:使えるオブジェクトはない

データアクセスにおけるよくある間違い

タブを非表示にする

タブを非表示にすることにより、ユーザからのデータアクセスを制限できているという誤解はよくあります。Force.comでは全てのレコードは一意のIDで管理されており、一意のIDがわかればそのレコードにアクセスすることは可能です。(※レコードに対するアクセス権がある場合ですが。)

また、オブジェクトのプレフィックスが分かればビューを表示させることも可能です。 例えば、取引先責任者の場合プレフィックスは"003"なので、 https://SFDCのインスタンス(ap0.salesforce.comなど)/003 とすればビューが表示されます。

タブ非表示の誤解を詳細に説明するために、以下の要件があるとします。
- 注文トランと商品マスタがあります
- 注文トランは商品マスタに対する参照項目を持っています。
- 営業ユーザは、注文トラン入力時に商品マスタをルックアップで検索して設定します。
- システム管理者は商品マスタのメンテナンスを行い、営業ユーザは行いません。

この要件の時、システム管理者は商品マスタのメンテナンスを行うため、商品マスタタブを表示させ、営業ユーザに対してはタブを非表示としただけではセキュリティは確保されません。なぜなら営業ユーザが商品のIDが分かった場合、直接商品の詳細/編集ページを表示させることができるからです。そのため、営業ユーザが持つプロファイルに、商品マスタのCRUDは「参照」のみの設定しておく必要があるわけです。

セキュリティの観点でページレイアウトを使用する

ユーザの種類に応じて、セキュリティの観点から特定の項目を「表示させない」といった要件はよくあります。この要件に対して、ページレイアウトを複数作成し、あるページレイアウトからは項目を非表示とする対処を考えた場合、その対応では不十分です。 ページレイアウトによる対応では、詳細ページ/編集ページからは確かに項目を非表示とすることは出来ますが、レポートやビュー、あるいはAPIを使ったデータアクセスなどから見れる可能性があり、セキュリティは保証できません。そのため、この要件に対応する場合「項目レベルセキュリティ」を使用します。 項目レベルセキュリティを使用した場合、詳細ページ/編集ページから非表示される以外にも適用されるため、セキュリティを保証することができます。

摘要先

- 関連リスト

- レポート

- ビュー

- APIアクセス

項目レベルセキュリティを具体的に説明するために、以下の要件があるとします。
- 注文トランと商品マスタがあります。
- 注文トランは商品マスタに対する参照項目を持っています。
- 注文トランの入力は、社内の営業ユーザ、および社外の販売店ユーザも行います。
- 商品マスタには原価情報を持っており、原価情報は販売店ユーザに見せることはできません。

この要件の時、原価情報に対して項目レベルセキュリティを設定するのは想像がつくと思います。ここで特に注意して頂きたいのは、全てのユーザが参照可能なオブジェクトであっても、社外ユーザが参照する場合には、社内ユーザと同じ情報の全てを見せるケースは少ないということに注意を払う必要があることです。

データアクセスを検討する上で便利な機能

権限セット

権限セットは、プロファイルで規定されたシステムに対してできることを拡張します。 権限セットは、プロファイルのようにオブジェクトレベルのCRUDや項目レベルセキュリティなどをユーザ単位に拡張することが可能です。 Force.com上にアプリケーションを構築した後に、新たなアプリケーションを追加開発した場合、ユーザの利用方法の組み合わせ全てに対してプロファイルを再構成するのは非常に手間がかかります。このような時、権限セットを利用すると便利です。

権限セット

プロファイルを検討する上でのポイント

プロファイルを検討する上でよくある間違いとして、プロファイルを会社組織の組織階層にマッピングさせて作ることが挙げられます。 ある程度の企業規模の場合、組織階層は細分化され複雑であり、また組織変更も行われることでしょう。そのため、以下の検討ポイントを参考にプロファイルを検討すると良いでしょう。

検討ポイント-

利用ユーザの種類

- 利用ユーザがForce.comで何ができれば良いか?

- 利用ユーザは、オブジェクトに対して参照のみで良いのか、更新する必要もあるのか?

- 利用ユーザに適用されるライセンスは何なのか?

おわりに

初回ブログでは、データセキュリティの観点でプロファイルを取り上げました。 本ブログを読まれた方の中には、Salesforce.com Certified Technical Architect(TA:認定テクニカルアーキテクト) を目指す方もいらっしゃることでしょう。 ここで触れた内容はTAの評価範囲に含まれますが、レビューボードでこのセキュリティのセクションを落とす人は70-80%もいるそうです。それだけ重要なテーマであり、正しい理解のもと最適なセキュリティ設計が求められているということでしょう。 次回はレコードアクセスについてエントリしたいと思います。