IBM Cloud Security and Compliance Center(SCC): ガバナンスルールへの準拠状況を確認する

(2021/03/18に最新情報に更新しました）

# はじめに

IBM Cloud Security and Compliance Center(SCC)の利用例として、

- [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)

を紹介しました。これは、現行環境が定められたセキュリティー・コンプライアンスに従っているかどうかをチェックするというものでした。
これとは別に、SCCにはあるルールを定め、そのルールに反しているリソースを検出し、またそのルールに反するリソースを作成しようとするとブロックしたりActivity Trackerにログを残すというガバナンスを効かせる機能があります。

https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-overview#config-governance
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/b71debd5-7f8f-e5bf-a043-6319b6e7f467.png)

ここで、[ルール](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-what-is-rule&locale=en)についてもう少し詳細に説明します。

- JSONで記述する。
- 以下の3要素から構成する
    - target: 対象のサービス・リソースを指定する。`service_name`はCRNのネーミングに厳密に従う必要があるため、例えば`ibmcloud catalog service-marketplace -rc|awk '{print $2}'`の名称と一致している必要がある。
    - required_config: 条件を指定する。
        - 一般的には、`property（リソース構成変数）`/`operator（演算子）`/`value（値）`からなる要素の真偽を判定する。
        - 利用可能なpropertyは対象サービスによって異なる。詳細は[こちら](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-what-is-rule&locale=en#rule-supported)。
        - 利用可能なoperator一覧は[こちら](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-what-is-rule&locale=en#rule-operators)
        - 複数の条件をANDやORで書いたりネストして書いたりすることも可能。詳細は[こちら](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-what-is-rule&locale=en#rule-properties)
    - enforcement_actions: 定義した条件を満たさなかった場合のアクションを指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/37b1f3a0-9c5b-72f9-e259-a537470e0bee.png)

以下では、[IBM Cloud docsに記載の通りのconfig](https://cloud.ibm.com/docs/security-compliance?topic=security-compliance-rules)を実際に試してみたいと思います。


#1. Ruleの作成

- Configure rules -> Create <br> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/f2de50f5-a627-c8b8-849c-d10b4d808bb1.png)

- Name, Description, Labelに適当なものを代入。<br> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/4ae005a8-1270-e47e-9a9a-9be97c3c8821.png)


- Serviceとして`Cloud Object Storage`を選択すると、テンプレートが用意されるのでこれを修正して利用する。<br>
-![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/1b81ffac-fe6e-84bb-3efa-62f2ac11fbbc.png)


```json:snippet
{
  target: {
   service_name: 'cloud-object-storage',
   resource_kind: 'bucket',
   additional_target_attributes: []
 },
 required_config: {
   description: 'Check whether my bucket is accessible by using only private endpoints.',
   and: [
     {
       property: 'firewall.allowed_ip',
       operator: 'ips_in_range',
       value: ['10.0.0.0/8','172.16.0.0/12','118.7.75.0/24'] 
     }
   ]
 }
}
```

- `Enforcement Action`（リソース作成・更新時のアクション）を設定。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/8c3fa84f-ae16-7090-1634-9c02c1953027.png)

- まとめ<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/ff894970-98c6-4e77-5d5d-3be3054bb168.png)





以上にてルールが作成された。

#2. スコープの設定

このルールを適用するスコープを指定する。

- Attachを押下<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/22c70fa1-0a8f-5fa6-f310-c374f59239a2.png)

- Scopeを指定して、Attachを押下<br> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/0ad2af9f-1fc6-3c3c-2a37-66c74c7724d7.png)



#3. ガバナンス準拠状況の結果

- 表示されない（24時間待つ・・・！？）<br> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/08e96703-40a4-a6dd-2e6a-3fbe81aa7d65.png)
- 半日以上待った結果。このアカウントでの`Public access group`は`enabled`なので、確かに設定したポリシーに反している。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/5fe18592-7005-bf30-e0ae-fceebf352dd1.png)
- 結果の詳細<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/693f5e89-2354-8178-2b8d-ed5f4987ecb6.png)
- リソース詳細(1)<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/76386ef7-c34f-2635-8626-3f310fb1c126.png)
- リソース詳細(2)<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/8bda5ff0-b2b7-b126-fc8a-fb24c2d401a8.png)
- history情報<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/f2c5ed13-97c4-0f50-c2fe-c43b92d546a7.png)

#4. Enforcement actionsの確認

以下のように、Authorized IPを追加してみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/ab255b26-f370-3d3f-3bf3-61953126b470.png)

10.212.0.0/24の追加 -> 成功
118.7.75.128/30の追加 -> 成功
192.168.0.0/24の追加 -> 失敗
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/4659f737-e472-c5a3-4de1-325ac88df190.png)






残念ながら、2020/10/5時点ではSCC上の本機能は非常に限られており、

- IBM Cloud上のリソースしか制御できない。
- 1日に1回しかScanが発生しない（Scanタイミングも制御できない）
- IAM Access Groupsでの検出できる構成は現状`private_network_only`のみ。またアカウント全体にしか適用できない（そもそも本設定にはリソースグループという概念がないので。影響範囲が大きいため、おいそれとはテストしづらい）。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/30842d28-3bbe-de59-b4af-0928e254470d.png)
- Certification Managerではリソースグループごとに適用でき、`private_network_only`のルールに遵守しているかどうかは検出できるが、許可・ブロックのアクションを強制させることができない。

という様々な制約があります。今後の拡充を期待したいところですが、何はともあれIAM Access Groupでの`private_network_only`の検出について試してみたいと思います。





#Config Template

```
[root@syasudacentos7 ~]# ibmcloud resource service-instance "Cloud Object Storage-SYASUDA"
Retrieving service instance Cloud Object Storage-SYASUDA in all resource groups under account IBM as shiyasu@jp.ibm.com...
OK

Name:                  Cloud Object Storage-SYASUDA
ID:                    crn:v1:bluemix:public:cloud-object-storage:global:a/039dbe6794084c7cb514a276dd2345da:2c66d594-86d5-4a50-ba34-cedb18fe3126::
GUID:                  2c66d594-86d5-4a50-ba34-cedb18fe3126
Location:              global
Service Name:          cloud-object-storage
Service Plan Name:     standard
Resource Group Name:   yasuda
State:                 active
Type:                  service_instance
Sub Type:
Created at:            2019-03-27T13:40:04Z
Created by:            shiyasu@jp.ibm.com
Updated at:            2019-03-27T13:40:04Z


[root@syasudacentos7 ~]# ibmcloud cos buckets --ibm-service-instance-id crn:v1:bluemix:public:cloud-object-storage:global:a/039dbe6794084c7cb514a276dd2345da:2c66d594-86d5-4a50-ba34-cedb18fe3126::
OK
7 buckets found in your account:

Name                       Date Created
mybucket-ussouth-test002   Mar 19, 2021 at 02:07:15
mybucket102                Mar 27, 2019 at 13:42:38
mybucket103                Mar 28, 2019 at 04:15:53
mybucket104                Apr 11, 2019 at 04:14:02
mybucket105                Jun 27, 2019 at 00:00:19
mybucket106                Oct 02, 2019 at 02:39:06
mybucket107                Jun 20, 2020 at 06:49:17


```