
Salesforce Policy Deviation Checker
NCC Group Plc によってオープンソースとして公開 - https://www.nccgroup.com/
開発者: Jerome Smith (@exploresecurity) Stephen Tomkinson (@neonbunny9) に感謝します
https://www.github.com/nccgroup/SFPolDevChk
AGPL の下で公開 - 詳細は LICENSE を参照してください。
Salesforce では、最上位の組織 (Organization) レベルで設定されたパスワードポリシーとセッション設定は、プロファイル (Profile) レベルで設定されたものによって上書きされる場合があります。これは設計上の仕様ですが、プロファイル内でこれらの領域に変更を加えると、後で組織の設定に合わせて元に戻したとしても、そのプロファイルは組織との同期が失われます。言い換えると、組織レベルでパスワードポリシーとセッション設定を後から変更しても、これらのプロファイルには伝播されなくなります。時間の経過とともにプロファイルが追加・コピーされるにつれて、特定のユーザーグループに対して意図しない誤設定が発生する可能性があります。SFPolDevChk は、このようにして非同期化されたプロファイルを明らかにし、各プロファイルのパスワードポリシーとセッション設定をレビューして、組織レベルで設定されたものからの逸脱を強調表示します。
必要条件:
requests モジュール (requirements.txt に含まれます)認証情報がコンソール履歴に残らないように、JSON 設定ファイルを作成します:
{
"hostname": "somewhere.my.salesforce.com",
"username": "",
"password": "",
"token": "<optional token>"
"debug": <optional debug level (0, 1 or 2)>
}
次に実行します:
git clone https://github.com/nccgroup/SFPolDevChk
pip install -r requirements.txt
python3 sfpoldevchk.py <config_file>

上記の例では、プロファイル 'Read Only' の行はそれ以外は空です。これは、このプロファイルのパスワードポリシーが、その時点では組織に設定されたポリシーと同じだったためです。ただし、組織の設定が変更された場合、このプロファイルに割り当てられたユーザーは、改訂されたパスワードポリシーを自動的に取得しません (ツールを再度実行すると、その差異が強調表示されます)。
このツールは読み取り専用の操作を実行します。そのため、ツールの実行に使用するアカウントの要件として 'Modify Metadata Through Metadata API Functions' が含まれているのは意外に思われるかもしれません。ただし、本稿執筆時点では、Metadata API への読み取り専用権限を持つアカウントを構成することはできないようです。https://developer.salesforce.com/docs/atlas.en-us.226.0.api_meta.meta/api_meta/meta_quickstart_prereqs.htm より:
API Enabled 権限と、Modify Metadata Through Metadata API Functions 権限または Modify All Data 権限を持つユーザーを特定します。これらの権限は、Metadata API 呼び出しにアクセスするために必要です。 ユーザーがデータではなくメタデータへのアクセスのみを必要とする場合は、Modify Metadata Through Metadata API Functions 権限を有効にします。それ以外の場合は、Modify All Data 権限を有効にします。
したがって、最低限の要件として 'Modify All Data' よりも 'Modify Metadata Through Metadata API Functions' を使用する方が望ましいと考えられました。(参考までに、'View All Data' を使用したテストケースも実行しましたが、失敗しました。)