IBM Cloud: SCC (Security and Compliance Center)を試してみる

# SCC とは
SCC (Security and Compliance Center)とは、不適切なリソース構成の防止や監査エビデンスの収集を支援するサービスです。
>IBM Cloud® Security and Compliance Center を使用すれば、リソースの構成から監査エビデンスの収集に至るまで、組織内のコンプライアンス文化を促進することができます。 致命的なミスを防ぐための自動化の機能が備わっているため、完全な制御を保持しながらワークロードを構築および拡張できます。そのため、チームは責任と自信を持ってコーディングすることができます。 しかも、業務時間とコストの削減にもなります。

参考：[Security and Compliance Center入門](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-getting-started&locale=ja)

Security and Compliance Center の状況管理コンポーネントを使用すれば、お客様環境に存在するリソースをスケジュールに従ってスキャンできます。また、スキャン結果の詳細なエビデンス・レポートはpdfまたはxlsx形式でダウンロード可能なため、内部の利害関係者や外部の監査員に提出することができます。

本記事では、SCCの複数の機能の中でも「Posture Management機能」を試してみます。そのためには、スキャンを実行する「コレクター」を作成する必要があります。

:::note warn
2023年7月より、お客様管理のコレクターは廃止されています。
IBM Cloud管理コレクターの利用に限定されるため、インスタンス作成後に即スキャンを実行することが可能です。
https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-getting-started
:::

## コレクターとは
コンプライアンスのモニターを開始するには、スキャンを実行可能なコレクターを準備する必要があります。コレクターには`IBM管理コレクター`、あるいは`お客様管理コレクター`を選択できます。

本記事では、それぞれのコレクターを用いたスキャン方法を説明します。



# IBM管理コレクターを利用したスキャン手順
IBMコレクターでは、IBMアカウントのスキャンを行いたいと思います。
IBM管理のコレクターでのスキャンは、以下の手順で行います。
- コレクターの作成
    - IBM管理のコレクターを作成します。
- Credentialsの作成
    - コレクターにアカウントへのアクセス権限を付与します。
- Scopeの作成
    - スキャンのターゲットとスケジュールを決定します。
- (On demand Scanの実行)
    - スケジュールされたスキャンとは別で、On demand Scanを実行します。(必要な場合のみ)

参考：[IBM 管理のコレクターを使用したリソースのモニター](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-monitor-ibm-collector)
### コレクターの作成
SCCのコレクター作成は、IBM Cloudポータル左上のハンバーガーメニューから
`Security and Compliance`->`Configure`->`Collectors`にアクセスします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/8e0fc74c-46e7-5834-f265-3fe02e2e4772.png width=70%>

`create`を選択して名前を入力 -> `Managed by` で`IBM`を選択します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/a586c052-1a92-59b6-f576-fc9785b958f7.png width=50%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/bb412b57-bc65-febe-68a5-3ce4eefe79ad.png width=50%>

### Credentialsの追加
`Security and Compliance`->`Configure`->`Credentials`にアクセスします。
次に、`create`を選択して名前入力 -> `Purpose`で`Both`としました。`Next`をクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/55473c9f-a78f-73bf-9479-634eb4c628ae.png width=50%>

次に、`Credential type`には`IBM Cloud`を選択、自身のAPIキーを入力します。
APIキー作成については、以下がとても分かりやすかったです。参照くださいm(__)m
[IBM Cloud APIKEYの作成(取得)方法](https://qiita.com/nishikyon/items/fa8b951267efbe911fe7)
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/e04aae3f-f50c-03fe-bdc3-fa4b5ae04c17.png width=50%>


### Scopeの作成
`Security and Compliance`->`Configure`->`Scopes`にアクセスします。
次に、`create`を選択して名前入力し`Next`をクリックします。

`Environment`に`IBM Cloud`、`Credential`に先ほど作成したcredentialを選択します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/3d4b232d-7983-93a5-cc23-2c52731af852.png width=80%>

先ほど作成したコレクターにチェックを入れます。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/ff860d4d-7aa2-4581-e13a-fde2e7f32788.png width=80%>

以下を入力/選択します。
- Scan name
- Scan type
- Profile
- Schedule

プロファイルには、今回`IBM Cloud Best Practices Controls 1.0`を使用しています。またスケジュールでは、自動的にスキャンを実行してくれる頻度と期間を指定します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/0c065d55-8643-a45a-c44c-3ba1ddebefbf.png width=80%>

設定を確認し、`create`をクリックします。

### On demand Scanの実行
On demand Scanは、スケジュールされたスキャンとは異なり、単発で実行するスキャンです。

`Security and Compliance`->`Configure`->`Scopes`にアクセスし、先ほど作成したスコープをクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/a6b8efa5-f3a3-e509-ca4a-62e742ac2c8a.png width=100%>

スコープ詳細画面の右上にある`Actions`をクリックし、`On-demand scan`をクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/baf71fb4-0701-3294-8b66-2720eecb2b46.png width=90%>

`scan type`と`Profile`を選択し、`Create`をクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/aa3a205f-fdfe-8292-9286-a492560f4d5f.png width=50%>

### 実行結果
`Security and Compliance`->`Assess`->`Scan results`にアクセスすると結果が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/4ff48a83-820b-ea78-139b-c5d7aec80b06.png)


# お客様管理コレクターを利用したスキャン手順
お客様管理コレクターを用いて、特定のリソースのみのスキャンを実行する例を記載します。
[お客様管理のコレクターを使用した IBM Cloud リソースのモニター](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-ibm-customer-collector)

### Credentialsを登録
お客様管理コレクターを使用する場合は、コレクターにリソースへのread権限を与える必要があります。
今回はPEMファイルを用いて、一般ユーザーでのリソースの権限をコレクターに付与します。
ID/Password方式だけでなく、SSH秘密鍵を使ったアクセスもサポートされています。
今回はLinuxにアクセスする際の秘密鍵をPEMファイルに変換して登録しています。
まず`Name`と`Purpose`を入力・選択します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/8be82a14-d49f-4678-e0e1-cd11e59cbccd.png width=90%>

`Credential type`を`Username-PEM`を選択、ユーザー名を入力し、`Add PEMFile`からPEMファイルを選択します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/10caade3-e182-0ba5-1308-e5b6213e364b.png width=90%>


### Scopeを作成
Scope名を入力します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/024d4f3b-0f7c-fd63-4247-e29fdff95f15.png width=90%>

`Environment`を`On-premises`とし、
`Discovery method`にて`Import resouces from File`を選択します。
`Resource list`では後述のjsonファイルを選択します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/524a051e-e857-4b33-4c80-376f45a2ca27.png width=90%>

特定のリソースを指定する場合、jsonファイル内でIPアドレスを用いてリソース指定します。

```:dls-ubuntu.json
{
  "data": [
    {
      "resource": "subnet",
      "resource_type": "switch",
      "facts": "",
      "fact_status": {
        "message": "",
        "status": ""
      },
      "resource_category": "network_resource",
      "children": [
        {
          "resource": "linux",
          "resource_type": "os",
          "facts": "",
          "fact_status": {
            "message": "",
            "status": ""
          },
          "resource_category": "host",
          "scope_id": "",
          "discovery_status": {
            "message": "",
            "status": "PASS"
          },
          "resource_attributes": {},
          "properties": {
            "public_ip": "",
            "OS": [
              "Linux"
            ],
            "category": [
              "Host"
            ],
            "env_type": "ONPREM",
            "private_ip": "10.1.0.8",                # 今回はこの行のみ変更
            "ports": {}
          },
          "object": "vm"
        }
      ],
      "scope_id": "10.0.0.0/24",
      "discovery_status": {
        "message": "",
        "status": "PASS"
      },
      "resource_attributes": {},
      "properties": "",
      "object": "subnet"
    }
  ]
}
```

### ScopeにCredentialsを登録
scopeの詳細画面から、`add`より先ほど作成したcredentialsを追加します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/e9323253-3a1d-99e6-467f-40aa43fca3ec.png width=90%>

Credentialsを選択し、対象リソースを指定します。
リソースの指定方法は以下の方法があります。
IP=ipaddr (i.e. `IP=10.1.0.8`)
IP=ipaddr1,ipaddr2,...,ipaddrN (i.e. `IP=10.1.0.8,10.1.0.9`)
IP=ipaddr1-endingAddress (i.e. `IP=10.1.0.8-10`)
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/ea28c0ef-41c4-a742-2b08-893e3b7e7fbe.png width=90%>


### 仮想サーバーの設定
パスワードなしのsudoコマンドを実行できるようにします。
`/etc/sudoers`ファイルを編集します。

```:/etc/sudoers
# User privilege specification
ユーザー名 ALL=(ALL) NOPASSWD: ALL
```

### スキャンを実行
scope詳細画面の`Actions`より、`On-demand scan`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/fb32de96-7140-37d2-ce41-43e40d93d420.png)

`scan type`と`Profile`を選択し、`Create`します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/7f4c980a-4dab-52c9-474f-1df57718f429.png)


# スキャン結果が表示されない・「Looks like a scan hasn't been run yet」が表示される場合
スキャンを実施したにもかかわらず、`Assess`->`scan result`に結果が表示されない、あるいはscope詳細画面の`event history`に「Looks like a scan hasn't been run yet」というメッセージが表示された場合の対処を記載します。

まずscope詳細画面の`event history`より、対象のscan履歴を開きます。
次に、赤枠`Validation`をクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/ea9ce4bd-804c-9057-8a41-c576f63425fe.png width=90%>

失敗したプロファイルを再び指定し`Create`をクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/1c490d54-2504-10dd-6976-08e29633b34d.png width=90%>

リロードすると、結果が表示されました。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/559ec804-8f75-b079-b8e0-48d3200dc383.png width=90%>


# 参考サイト
こちらを参考にさせていただきました。ありがとうございます。
[IBM Cloud Security and Compliance Center(SCC)を触ってみた](https://qiita.com/testnin2/items/668223c2f4c77466fb4c)
[IBM Cloud Security and Compliance Center(SCC): Linuxのコンプライアンス準拠状況を確認する](https://qiita.com/testnin2/items/f28a3c9b3c091c431b20)