Azure AD を IdP, Prisma Cloud を SP にして SAMLで認証連携

Palo Alto Networks のクラウドセキュリティ製品 **Prisma Cloud** と Azure AD を SAML連携 させてみたので、やったことをメモ :grinning::grinning:
**Prisma Cloud** のドキュメント自体は [こちら](https://docs.paloaltonetworks.com/prisma/prisma-cloud/prisma-cloud-admin/manage-prisma-cloud-administrators/setup-sso-integration-on-prisma-cloud)

<img width="600" alt="AzureAD-PrismaCloud.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/b4b24b17-f045-a6d0-84c6-2eac761bcb1d.png">

# Azure AD 側の設定
https://portal.azure.com/ から対象のAzure ADにログイン。

## アプリケーションの追加
「エンタープライズアプリケーション」＞「＋新しいアプリケーション」
<img width="600" alt="スクリーンショット-01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/da6485a2-cd9d-d5d4-d2d1-7e3fe6d6947c.png">

「ギャラリー以外のアプリケーション」
（後で気づいたけど「ギャラリー」 > 「Prisma Cloud」でOK）
<img width="600" alt="スクリーンショット-02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/7f2257cc-4ad9-4d5c-1f56-fbb609aac96f.png">

「名前」を入力し（何でもOK）、「追加」をクリック
<img width="600" alt="スクリーンショット-03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/24799020-a69e-3e89-01a2-aa765dcb99f9.png">

## シングルサインオン設定

「シングルサインオン」＞「SAML」を選択
<img width="600" alt="スクリーンショット-04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/e3e91792-a493-d773-dc62-8ca5e769591f.png">

### 基本的なSAML構成
<img width="600" alt="スクリーンショット-05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/e9511b25-ee44-c3b2-1031-2f28380b6dd3.png">

+ **識別子（エンティティID）** :point_right_tone2: 後述の Prisma Cloud側 設定項目 > SSO > [Configure](https://qiita.com/samiii/items/27d55a80c58d794732ea#configure) > **Audience URI(SP Entity ID)** の値をここに設定する
+ **応答URL(Assertion Consumer Service URL）** :point_right_tone2: https://api.anz.prismacloud.io/saml ※

※応答URLは、Prisma Cloud のドメイン部分の "app" を "api" に置き換えたものに、"/saml" を付したもの。（例 ドメイン：app2.prismacloud.io → https://api2.prismacloud.io/saml など）

### ユーザ属性とクレーム
編集の鉛筆アイコンをクリック
<img width="600" alt="スクリーンショット-06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/9cdafd9b-2eb0-ed22-fd4d-3ad11871ac9b.png">
「必要な要求」 > 「クレーム名」 の部分をクリック
<img width="600" alt="スクリーンショット-07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/b6f067f0-18f6-368a-4cf9-24dc0ff916d3.png">
「要求の管理」
<img width="600" alt="スクリーンショット-08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/d3e4c1d2-88c6-86eb-e587-d0becd1e69a9.png">

+ **名前識別子の形式の選択** :point_right_tone2: 電子メールアドレス
+ **ソース属性** 　　　　　　:point_right_tone2: user.mail

※Provisioningを行う場合は追加の設定が必要。[こちら](https://qiita.com/samiii/items/27d55a80c58d794732ea#provisioning-%E3%82%92-on-%E3%81%AB%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E8%A8%AD%E5%AE%9A)を参照。

### SAML署名証明書
<img width="790" alt="スクリーンショット-09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/52a15661-1073-f127-8541-b8479cf4ecae.png">
Prisma Cloudの設定にて証明書（Base64）が必要になるのでDownLoadしておく。

### Prisma Cloud のセットアップ
<img width="793" alt="スクリーンショット-10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/30251d4e-5420-10a1-2198-42c851740fc2.png">
Prisma Cloudの設定にて必要になるので、下記をコピーしておく。

+ **ログインURL**
+ **Azure AD 識別子**

# Prisma Cloud側の設定
Prisma Cloudにログインする。https://app.anz.prismacloud.io/settings/sso
## SSO
「Settings」 > 「SSO」 で 「Enable SSO」 を on にする。
<img width="600" alt="スクリーンショット-11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/6db4197f-d946-1a85-9767-62afabae9ad0.png">
### Configure
<img width="600" alt="スクリーンショット-11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/6db4197f-d946-1a85-9767-62afabae9ad0.png">

+ **Audience URI(SP Entity ID)** :point_right_tone2: ここの値を Azure AD側 設定項目 > [基本的なSAML構成](https://qiita.com/samiii/items/27d55a80c58d794732ea#%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AAsaml%E6%A7%8B%E6%88%90) > **識別子（エンティティID）** に設定する
+ **Identity Provider Issuer** :point_right_tone2: Azure AD側 設定項目 > [Prisma Cloud のセットアップ](https://qiita.com/samiii/items/27d55a80c58d794732ea#prisma-cloud-%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97) > **Azure AD 識別子** の値をここに設定する
+ **Certificate** :point_right_tone2: Azure AD側 設定項目 > [SAML署名証明書](https://qiita.com/samiii/items/27d55a80c58d794732ea#saml%E7%BD%B2%E5%90%8D%E8%A8%BC%E6%98%8E%E6%9B%B8) でDLしたファイルをテキストエディタ等で開き、「-----BEGIN CERTIFICATE-----」から「-----END CERTIFICATE-----」まで全てをコピペ

<img width="600" alt="スクリーンショット-12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/aab77535-8789-1b09-b609-389bc84fdc61.png">

+ **Prisma Cloud Access SAML URL** :point_right_tone2: Azure AD側 設定項目 > [Prisma Cloud のセットアップ](https://qiita.com/samiii/items/27d55a80c58d794732ea#prisma-cloud-%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97) > **ログインURL** の値をここに設定する

### Just in Time (JIT) Provisioning
この設定、デフォルトで invisible になっているので注意。Just in Time (JIT) Privisioning の左の > をクリックすると現れる。Provisioningをしない場合は off に。（on にする場合は[後述の設定](https://qiita.com/samiii/items/27d55a80c58d794732ea#provisioning-%E3%82%92-on-%E3%81%AB%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E8%A8%AD%E5%AE%9A)が必要）
<img width="600" alt="スクリーンショット-13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/02dad23c-d58d-2c29-983f-2da223ecef24.png">

### Settings
設定したIdPからのSSO出なく、直接ログインを可能とするかどうか、可能とする場合どのユーザを可能とするか、を設定。
何かのトラブルでIdPが止まった時にログインできなくなることを防ぐためには設定が必要。
<img width="500" alt="スクリーンショット-14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/3535df6e-7201-6516-ae83-b190eb73e0aa.png">

### Save
全ての設定が終わったら「Save」する。
<img width="320" alt="スクリーンショット-15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/b05d51e0-4275-eea7-e376-524c6bd8fa51.png">

# SSOを試す
myapps（https://myapps.microsoft.com/）へアクセスし、Prisma Cloud のアイコンをクリックすると SSOが走る。
<img width="600" alt="スクリーンショット-16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/a71fbed7-4b8c-8905-a2d3-7925b39cd00e.png">

## 正常時
正常にSSO設定が完了していると、Prisma Cloudの画面に遷移する。
<img width="600" alt="スクリーンショット-17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/1c0ab277-5913-ea14-c1b1-235ef9cef8be.png">

## エラー時
エラー発生時は、下記のようなエラーメッセージが表示される。
<img width="400" alt="スクリーンショット-18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/23cfdddf-97b3-41b4-dccf-277f0e33fb95.png">
上記は、Provisioningが不要であるにも関わらず、Just in Time (JIT) Provisioning の設定を on にしている場合のエラー。
表示されるエラーメッセージを頼りにどこの設定を間違ったか見極める。

# Provisioning を on にする場合の設定
Prisma Clouse の Just in Time (JIT) Provisioning を利用する場合。

## Prisma Cloud 側の設定
### Roleの設定
どのPermissionでSSOさせるかを指定するため、Roleの名前を設定する。
「Settings」 > 「Role」 > 「＋ Add New」
<img width="600" alt="スクリーンショット-19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/1f31ad6f-4950-2211-8e81-7ea649e7a2f3.png">

Permission Group を選び、それに対する名前をつける。
例えば、Read OnlyのPermissionを "user" とする。
<img width="300" alt="スクリーンショット-20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/fa35da10-52b9-3134-a603-0fd1ca8bc76d.png">

例えば、System　AdminのPermissionを "admin" とする。
<img width="300" alt="スクリーンショット-21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/07a0830b-7890-4476-43c5-d3a7c07410c8.png">

### Just in Time (JIT) Provisioning
<img width="600" alt="スクリーンショット-22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/05a9db23-b808-a7c2-e6b4-7d3963dd9aef.png">

+ **Enable JIT Provisioning** :point_right_tone2: on にする
+ **その他** :point_right_tone2: 何の値を指定したかメモっておく

## Azure AD 側の設定
### ユーザ属性とクレーム
編集の鉛筆アイコンをクリック
<img width="600" alt="スクリーンショット-06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/9cdafd9b-2eb0-ed22-fd4d-3ad11871ac9b.png">
「新しいクレームの追加」をクリック 
<img width="600" alt="スクリーンショット-23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/1b77f986-693c-9926-2a00-0e033a447652.png">

Prisma Cloud 側の設定 > Just in Time (JIT) Provisioning で、**Email, Role, First Name, Last Name, Timezone** のそれぞれに指定した文字列と同じ文字列を **名前** に入力し、その名前で送付する実際の値を **ソース属性** で選択する。

メールは "user.mail" 等を実際の値として送付。
<img width="500" alt="スクリーンショット-24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/fe7c9551-eb17-a56d-594a-c4621b6bf297.png">

名は "user.givenname"。
<img width="500" alt="スクリーンショット-25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/7e30b59b-d6b3-327a-70e9-e2600e14a279.png">

姓は "user.surname"。
<img width="500" alt="スクリーンショット-26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/ff980bd9-96b8-5527-67f5-c4991e6e5503.png">

Roleは、Prisma Cloud 側の設定 > Roleの設定 で設定したRoleの名前を指定する。
上記の例であれば、Read OnlyのPermissionでログインさせたいユーザには "user"を指定、System AdminのPermissionでログインさせたいユーザには "admin" を指定する。
<img width="500" alt="スクリーンショット-27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246440/161ff6e0-e6b6-f2e3-b143-ec78bcd22fff.png">

タイムゾーンは任意項目のため、設定してもしなくてもいずれでも良い。

# 以上
エラーの読み解きがなかなか苦戦・・・。
Good Luck:thumbsup_tone2: