[備忘録]Salesforce管理パッケージの年次セキュリティレビュー手順

# 概要

Salesforceパッケージのセキュリティレビュー手順(2018.4.23時点)を残したいと思います（引継ぎも兼ねてｗ）
[公式サイト](https://developer.salesforce.com/docs/atlas.ja-jp.packagingGuide.meta/packagingGuide/security_review_about.htm)である程度の情報が掲載されていますが、初めてやる方はどこから始めていいのかがわからないので、私が管理しているパッケージのセキュリティレビュー手順を残したいと思います
また、パートナー向けのセキュリティレビュー資料が古かったりと・・・初心者にはハードルが高い

パッケージの構成としてはSalesforce Classic向けアプリケーションで外部コールアウトのないSalesforce上で処理が完結しているアプリケーション

外部アプリと連携するアプリケーションも基本的な流れは下記同様なので、参考になれば幸いです
違いとしてコードスキャンに「CHIMERA」や「OWASP」を用いて、外部アプリの脆弱性の確認やレビュー作成時に外部システムの情報を記載するぐらいかと思います

# 手順

## 1. セキュリティレビューのケース

毎年[Salesforce Partner Community](https://partners.salesforce.com/)のケースから案内が来ます

※前回のセキュリティレビュー担当者宛にケースが発行される（担当者が退職した場合は、どうなるのだろう・・・）

## 2. SourceScannerによるセキュリティ自動診断

[Partner Security Portal](https://security.secure.force.com/sourcescanner/)（パッケージのリリース組織にログインできるアカウント）にログインし、「Create New Source Code Scan」で対象の組織とそのログインユーザを選択し、新規スキャンを作成します
**スキャン対象の組織のログインユーザのメールアドレスがフリーメールのドメイン（gmail、yahooなど）だと拒否されますので、予め変更すること！**社用がgmailだったらどうするのだろう・・・あわせて[要求事項](https://security.secure.force.com/security/tools/forcecom/scannerhelp)も確認しましょう

※スキャン開始されるまでに最大1営業日？かかりますので、事前の作業調整をしっかりしたほうがいいです

![new-source-scan.png](https://qiita-image-store.s3.amazonaws.com/0/30522/50909525-8d9a-ad7e-24d4-4b2deb73ab61.png)
![new-source-scan2.png](https://qiita-image-store.s3.amazonaws.com/0/30522/04107bce-211b-fec4-f3fb-63d880f168e7.png)


**※SSOログイン先の組織は最新パッケージの開発環境になります**
**※ログインユーザはApexの開発権限があるユーザになります**

### SSOログインエラーの対応

Partner Security PortalにSSOログイン中に以下のようなエラーが発生した場合は、

```
REGISTRATION_HANDLER_ERROR: Error: Org ID not attached to your Appexchange Publishing Console
```

該当の組織を事前にAppExchangeの公開コンソールに組織を追加する必要があります(昔こんな手順なかったのにな・・・)
**※反映されるまでに5分ほどかかります**

![add-org.png](https://qiita-image-store.s3.amazonaws.com/0/30522/c4f1a7c6-977f-d531-641c-712e74800adf.png)

## 3. SourceScannerの結果の確認

手順2でログインしたユーザ宛にスキャン終了メールが送信されます。
Partner Security Portalでレポートを確認します

※レポート結果で修正済みの脆弱性が検出されることがあります。その際は公開コンソールのレビュー提出時にレポートを添付してください

## 結果に問題アリの場合

### 3-1. パッチ組織を作成

開発組織からパッチ組織を作成してください
**組織を作成した場合は、上記の公開コンソールにパッチ組織との関連付けを行ってください**
すでに最新バージョンのパッケージがパッチ組織にある場合は、作成不要です

### 3-2. コード修正

スキャン結果で検出された脆弱性を修正

### 3-3. 再度コードスキャン

再度SourceScannerによるコードスキャン
スキャン結果で脆弱性が残っている場合は、脆弱性が解決されるまで手順「3-1-2」と「3-1-3」を繰り返してください

### 3-4. リリースパッケージの作成

脆弱性が解消されたら、リリースパッケージを作成する

※パッケージのバージョンが上がりますが、仕様上仕方ない

## 結果に問題ナシの場合

手順4に進んでください

## 4. セキュリティレビュー用の組織の作成

環境ハブからセキュリティレビュー用のテスト/デモ組織を作成します
エディションは「Partner Enterprise」一択でよい？

![org-hub.png](https://qiita-image-store.s3.amazonaws.com/0/30522/78dea504-12ac-1af1-6c30-8b96ad27e361.png)


## 5. 最新版のパッケージをインストール

その時点の最新版のパッケージを上記で作成したレビュー組織にインストールします

※コードをデプロイするのではなく、パッケージインストールになります
※開発中のパッケージではなく、AppExchangeに公開されているパッケージが対象になります

## 6. テスト用ユーザの作成

パッケージを操作するために必要なユーザを作成し、適切な権限（プロファイル、権限セット、パッケージのライセンス）を付与します
簡単な動作確認も行ってください

## 7. テスター向けにIPアクセス制限の開放

新規ブラウザの確認メールでテスターが組織にアクセスできないので、
テストユーザのプロファイルの「ログイン IP アドレスの制限」を以下のように変更してください
また、SMSなどの2段階認証を設定している場合は、解除してください

```
開始IPアドレス「0.0.0.0」
終了IPアドレス「255.255.255.255」
```

## 8. パッケージのレビューの作成

AppExchangeの公開コンソールでレビューに必要な情報（パッケージの説明、テストユーザのアカウント、コードスキャン結果）を入力または更新する必要があります

### パッケージをリリース（アップロード）した場合

前述でパッケージのコード修正が発生し、新たにリリースパッケージを作成した場合は、該当パッケージを公開コンソールに登録する必要があります

#### 8-1. 新規レビューの作成

「AppExchange」-「公開コンソール」-「パッケージ」-「リストの編集」
![edit-list.png](https://qiita-image-store.s3.amazonaws.com/0/30522/de206250-6164-8645-9634-83b8f83c3e90.png)

「リスト」-「アプリ」-「パッケージを選択」-「レビュー開始」
入力内容は[こちら](https://developer.salesforce.com/docs/atlas.ja-jp.packagingGuide.meta/packagingGuide/security_review_questionnaire.htm)を参照ください

**※「レビュー開始」で即座にレビューが開始されるわけではないので、安心して押してください（後述のケースでの返信にてレビューが開始されます）**
**※パッケージのリリース（アップロード）後しばらく時間が経たないと該当のバージョンのパッケージが一覧に表示されない**

![select-package.png](https://qiita-image-store.s3.amazonaws.com/0/30522/325fc7a4-b78d-93ba-ea57-e866584d4361.png)


### 新規パッケージをリリースしていない場合（脆弱性修正がなかった場合）

#### 8-1. レビューの更新

「AppExchange」-「公開コンソール」-「パッケージ」-「合格」を選択し、各種情報を更新してください
テスト組織のテストユーザの情報、コードスキャン結果の記載を忘れずに！

![update-review.png](https://qiita-image-store.s3.amazonaws.com/0/30522/31499427-4381-daa5-f57e-05e146519e92.png)


## 9. レビューの申請

手順1で発行されたケースにセキュリティレビューの準備が完了した旨で返信します

**※「開発組織ID」、「レビュー組織ID」と「レビュー対象のパッケージのインストールURL」を記載すること**

## 10. 注文書の作成

ケースにて、Salesforce担当者から注文書の作成依頼返信が来ますので、注文書を作成し、ケースに添付して返信

## 11. レビュー開始

レビュー開始の旨のケース（ケースのClose）

## 12. レビュー結果

レビュー申請者宛にレビュー結果のメールが送付されます

### レビューで問題なく**合格**した場合

以上、終了になります

**パッケージリリースした場合は、AppExchangeへの公開を忘れないように！**

### レビューで残念ながら**不合格**だった場合

指摘事項を確認し、手順3-1以降を繰り返してください
なお、修正済みと判断した箇所で、レビュアーが未修正と判断することもありますので、その際はケースにてディスカッションしてください
セキュリティレビューの再申請は、新規ケースを作成して再申請してください

**※2回目のセキュリティレビューの結果が不合格の場合は、AppExchangeでの公開が停止されるので、要注意**