MCAS (Microsoft Cloud App Security) と Cloudflare Zero Trust を連携する

# 目的
以下の内容を理解するために、やってみます。

- [Integrate Microsoft MCAS with Cloudflare Zero Trust · Cloudflare Zero Trust docs](https://developers.cloudflare.com/cloudflare-one/tutorials/integrate-microsoft-mcas-teams/)

# API Token 準備
以下の手順を実施し、MCAS 側で API Token を準備します。

- [Access with application context - Microsoft Defender for Cloud Apps | Microsoft Learn](https://learn.microsoft.com/en-us/defender-cloud-apps/api-authentication-application)

パーミッションは、`discovery.read` を指定します。

OAuth トークンは以下のコマンドで取得できます。

```shell:
export APPLICATION_ID='YOUR_APPLICATION_ID'
export CLIENT_SECRET='YOUR_CLIENT_SECRET'
export TENANT_ID='YOUR_TENANT_ID'

TOKEN=$(curl -X POST -H "Content-Type:application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=$APPLICATION_ID" \
-d "scope=05a65629-4c1b-48c1-a78b-804c4abdd4af/.default" \
-d "client_secret=$CLIENT_SECRET" \
"https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token" -sk \
| jq -r .access_token)
echo $TOKEN
```

# API URL 準備
MCAS の API URL は以下の画面で確認できます。

- [https://security.microsoft.com/cloudapps/settings](https://security.microsoft.com/cloudapps/settings)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/5f7fcb82-de43-4cd9-ee4a-e5e798405aae.png)

```shell:
export MCAS_API_URL='xxx.us2.portal.cloudappsecurity.com'
```

# クラウド アプリ カタログ
以下のように「承認されていない」クラウドアプリを定義がある場合を想定します。

- [https://security.microsoft.com/cloudapps/app-catalog](https://security.microsoft.com/cloudapps/app-catalog)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/4309158c-f010-28cd-c46e-be0cc537c982.png)



# ブロックスクリプトの生成
以下のコマンドで「承認されていない」クラウドアプリのホスト名一覧が取得できます。

- [Generate block script - Cloud Discovery API - Microsoft Defender for Cloud Apps | Microsoft Learn](https://learn.microsoft.com/en-us/defender-cloud-apps/api-discovery-script)

```shell:
curl -v "https://$MCAS_API_URL/api/discovery_block_scripts/?format=120&type=banned" \
-H "Authorization: Bearer $TOKEN"
```

```text:result.txt
.app.chime.aws
.chime.aws.amazon.com
.biba.com
.meet.google.com
.zoom.us
.api.solvvy.com
```

# CSV ファイル作成
以下の要領で CSV 形式でファイル作成します。

- [macOS High Sierraでsedで上書き更新しようとして-iオプションを付けて実行したらsed: 1: "ファイルパス": invalid command code mとなったときの対応方法 - Qiita](https://qiita.com/ponsuke0531/items/be8b4a3c5e19676f9691)

```shell:
curl -v "https://$MCAS_API_URL/api/discovery_block_scripts/?format=120&type=banned" \
-H "Authorization: Bearer $TOKEN" > mcas.txt

sed -i '' 's/^.//' mcas.txt

mv mcas.txt mcas.csv
```

# CSV アップロード
ホスト名リストとして、CSV をインポートしてリストを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/bdce1935-63a0-e938-2b98-f6fa7330b224.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/47d49b7e-8bc3-98ed-26fb-5c30970637ff.png)

# ポリシー設定
MCAS リストにあるホスト名をブロックする HTTP ポリシーを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f9406ba1-043a-2587-44b3-43de9ce50afa.png)

# 動作確認
以下のように期待通りブロックする動作が確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/8530e093-97f5-9cc7-5e3c-340a60aa53ba.png)

# まとめ

すでに MCAS (Microsoft Cloud App Security) で定義済みの社内ポリシーがあれば、そちらに準拠する形で Cloudflare Zero Trust と連携して動作させることができます。

参考になればと思います。