SaaS

Duo Securityの条件付きアクセスを試してみた

Hello,World! gonowayです。
Duo Security(以降Duo)のポリシーを使った条件付きアクセスを試してみたのでブログにしてみましたよ!

検証の動機

Ciscoのご担当の方にDuoの製品をご紹介いただいた際に、ユーザ、デバイス、ネットワーク、認証の4つのポリシーをもとにアクセスを許可/ブロックできる機能があることを知りました。
類似したソリューションとしてIntuneの条件付きアクセスがあり、よくお客様にもご提案するのですが、Duoで更にご提案の幅が広がるのではないかと思い機能の比較と検証をやってみました!

ポリシー比較表

さっそくですが、Duoを軸にして、DuoとIntuneの条件付きアクセスポリシーの比較表を作成しました。

PolicyDuoIntune
MFAの登録
MFA認証の強制
場所によるアクセス許可
信頼できるエンドポイントか
デバイスが侵害されているか (注1)
Firewallが稼働しているか
ディスク暗号化がされているか
パスワードがセットされているか
エンドポイントセキュリティが稼働しているか
強制再認証までの日数定義
OSバージョンの確認
ブラウザバージョンの確認×
プラグインの有無(Java、Flash)×
IPアドレスによるアクセス許可
匿名ネットワークからのアクセス許可×
MFAの認証方法の定義
MFAモバイルアプリのバージョン確認(iOS,Android)×
Jailbreakされたデバイスからのアクセス許可(iOS,Android)
スクリーンロックの有無(iOS,Android)
MFAアプリケーションの生体認証有無
不審なデバイスドライバやシステムファイルの有無(Windows)×
パスワードポリシーの確認×
Trusted Platform Moduleの有無(Windows)×
Intuneで管理している組織の電子メールアドレスを使っているか(iOS)×
DHCP、IPSec等、受信する主要なネットワーク以外からのアクセスがあるか(Mac)×
ステルスモードが有効か(Mac)×

注1:DuoはCisco Secure Endpoint (AMP for Endpoints)、IntuneはMicrosoft Defender for Endpointだけが対象です。

比較した結果とDuoの使い所

Duoを軸に比較表を作成しておりIntuneでできることを下に列挙しているので、Duoが下に×が連続していまい見栄えは悪くなってますが、双方の製品でポリシーとして定義できる項目は概ね一緒です。

IdPにAzure ADを利用している場合、きっとMicrosoft EMSライセンスを購入しておりIntuneも使えるはずなのでAzure ADとIntuneの組み合わせで十分だと思います。
一方、IdPにOktaを利用している場合、2021/4/30時点でOkta Devicesが利用できずIntuneを使った条件付きアクセスが利用できないため、Duoと組み合わせて実現できる点が使い所であると思います。

またDuoはMDMではないため、Macデバイスの管理にIntune以外のMDMを使っており、かつIntune連携できない製品や連携が面倒な場合にも使い所があると思います。

Duoでの条件付きアクセスのフロー

以下はIdPをAzure ADとした場合の図です。

Azure ADとDuoのそれぞれの役割は以下の通りです。

  • Azure AD:認証情報の利用
  • Duo:MFA、ポリシーによるアクセス許可/拒否、SaaSとの連携

SaaSへアクセスするまでのフローは以下の通りです。

  1. ユーザーは、ログインしたいSAMLサービスプロバイダーにアクセスします。
  2. SAMLサービスプロバイダーは、ユーザーのブラウザーを経由してSAMLリクエストメッセージをDuoにリダイレクトします。
  3. Duoは、ユーザーのブラウザーを経由してSAMLリクエストメッセージをAzure ADにリダイレクトします。
  4. ユーザーはAzure ADの資格情報でログインします。
  5. Azure ADは、ユーザーのブラウザーを経由してSAMLレスポンスメッセージをDuoにリダイレクトします。
  6. Duoは条件付きアクセスのポリシーを評価します。準拠していない場合アクセスをブロックします。
  7. Duoで、ユーザーは2要素認証を完了する必要があります。ユーザーがDuoの2要素認証を完了します。
  8. Duoは、ユーザーのブラウザーを経由してSAMLレスポンスメッセージをSAMLサービスプロバイダーにリダイレクトします。
  9. SAMLサービスプロバイダーへのアクセスが完了します。

使用した製品とライセンス

  • Duo Beyond(30日間トライアル)
  • Azure AD(MS365 E5)
  • AWS(接続先のアプリケーション)

設定手順

Duoテナントを開設したての初期設定は省略します。英語表記ですが、以下のドキュメントの通り進めれば問題ありません。

今回はMacのFileVaultが無効の場合に、AWSへのアクセスを禁止とするポリシーを作成します。

ポリシーの作成

  • Duoのダッシュボード開きます。
  • 左の[Policies]を選択し、下部にある[New Policy]をクリックします。
  • ポリシーの編集画面が出てきます。
  • 左上のポリシー名を記載します。
  • [Device Health application]を選択します。
  • [Require users to have the app]を選択し、[Block access if FileVault is off]をチェックします。
  • [Create Policy]をクリックし、ポリシーを作成します。

Azure ADとDuoの繋ぎ込み

Azure AD

  • Duoのダッシュボード開きます。
  • 左の[Single Sign-on]を選択します。
  • Single Sign-onを初回に開くと利用の同意が求められるので、チェックボックスをオンにして[Activate and Start Setup]をクリックします。
  • SSOサブドメインは今回トライアル環境のため設定できないため次へ進みます。
  • 今回Azure ADを選択するのでSAML Identity Providerの[Add SAML Identity Provider]をクリックします。
  • Azureのポータルサイトを開きます。
  • [Azure Active Directory] – [エンタープライズアプリケーション]を開きます。
  • [新しいアプリケーション]をクリックします。
  • [独自のアプリケーションの作成]をクリックします。
  • アプリケーションの名前を入力します。
  • [ギャラリーに見つからないそのほかのアプリケーションを統合します(ギャラリー以外)]を選択し、保存します。
  • アプリケーションが作成されたら、画面左の[シングルサインオン]を開き、[SAML]をクリックします。
  • 基本的なSAML構成の[編集]をクリックします。
  • DuoのEntity IDをコピーし、Azure ADの識別子(エンティティID)に貼りつけます。
  • DuoのAssertion Consumer Service URLをコピーし、Azure ADの応答URLに貼りつけます。
  • 他の項目は設定せず保存します。
  • ユーザ属性とクレームの[編集]をクリックします。
  • 追加のクレームの[・・・] – [削除]をクリックして、追加の要求にある4つのデフォルトのクレームを削除します。
  • ページの上部にある[+新しいクレームを追加]をクリックして、以下の5つクレームを追加します。
    • 以下はEmailの設定です。
名前名前空間ソースソース属性
Email空欄属性user.mail
Username空欄属性user.userprincipalname
FirstName空欄属性user.givenname
LastName空欄属性user.surname
DisplayName空欄属性user.displayname
  • 5つのクレームを全て追加したら、右上の×を押し画面を閉じます。
  • テストのSSOを実行するボタンが開きますが、[後でテストをする]をクリックします。
  • 次のDuoの手順で証明書をアップロードするため、証明書(Base64)から証明書をダウンロードします。
  • ユーザとグループより、テストするユーザをアサインする。

Duo

  • [SAML Identity Provider Configuration] – [3. Configure Duo Single Sign-On]に移動します。
  • Azure ADの[ログインURL]の箇所をコピーし、Duoの[Entity ID]に貼り付けます。
  • Azure ADの[Azure AD識別子]の箇所をコピーし、Duoの[Single Sign-On URL]に貼り付けます。
  • [Single Logout URL]と[Logout Redirect URL]は空欄にします。
  • 先程Azure ADからダウンロードした証明書を[Certificate]の箇所からアップロードします。
  • [Username normalization]はユーザ情報の取扱いについてを定義しますが、デフォルトのSimpleのままとします。
  • [Save]をクリックします。

DuoとAWSの繋ぎ込み

AWS

  • Duoのダッシュボード開きます。
  • 左の[Applocations]を選択し、下部にある[Protect an Applocations]をクリックします。
  • Amazon Web Serviceを探し、Protection Typeが2FA with hosted by Duoの方の[Protect]をクリックします。
  • 先程作成したAmazon Web Service – Single Sign-Onのページを開きます。
  • AWSマネジメントコンソールを開き、IAMのページを開きます。
  • [IDプロバイダ]を開き、[プロバイダを追加]をクリックします。
  • プロバイダのタイプはSAMLを選択し、プロバイダ名を入力します。
  • Duoの[Downloads]にある[Download XML]からメタデータをダウンロードし、AWSのメタデータドキュメントの[ファイルを選択]にアップロードします。
  • 右下の[プロバイダを追加]をクリックします。
  • IDプロバイダが追加されたことを確認します。
  • IAMページの[ロール]を開き、[ロールの作成]をクリックします。
  • 信頼されたエンティティの種類を選択は[SAML2.0フェデレーション]をクリックします。
  • SAMLプロバイダーは先程作成したIDプロバイダーを選択します。
  • [プログラムによるアクセスとAWSマネジメントコンソールによるアクセスを許可する]を選択します。
  • 右下の[次のステップ:アクセス権限]をクリックします。
  • IAMロールにアタッチするポリシーにチェックを入れ、[次のステップ:タグ]をクリックします。
  • タグの追加は環境に応じて任意で設定します。
  • [次のステップ:確認]へ移動します。
  • ロール名を入力し、[ロールの作成]をクリックします。
  • ロールが増えたことを確認します。

Duo

  • DuoのService Providerの項目に移動します。
  • Account numberにAWSアカウントIDを入力します。
  • Provider nameにAWSのIAMで設定したIDプロバイダ名を入力します。
  • Account TypeはAWS Regionsを選択します。
    • この選択肢以外はAWS China RegionsとAWS GovCloud Regionsがあります。
  • Role attributeはAWSロールにDuoグループをマッピングします。
    • Duoグループを作成していない場合、[Group] – [Add Group]から作成します。
  • Custom attributesはデフォルトのチェックを入れない状態とします。
  • Policyの項目に移動します。
  • Applcation policyの[Apply a policy to all users]にをクリックします。
  • 作成したポリシーを選択します。
  • 一番下にある[Save]をクリックします。

動作検証

  • FileVaultがオフになっているMacを用意します。
  • Amazon Web Service – Single Sign-OnのページのMetadata項目にあるLogin URLをコピーします。
  • ブラウザを開き、コピーしたURLへアクセスします。
  • Azure ADのログイン画面が表示されるため、認証を行います。
  • 認証が完了すると、DuoのMFAが要求されます。
  • MFAの承認後、Duo Device Health Applicationが起動します。
  • デバイスにDuo Device Health Applicationが未導入の場合、インストールを求められるためダウンロードします。
  • Install-DuoDeviceHealth.pkgを開きます。
  • インストーラの指示にしたがって、インストールを完了します。
  • インストール後、アクションの要求が求められAWSにアクセスができません。
  • 詳細を確認すると、FileVaultが有効でないと内容が記載されています。

Oktaの場合

前述の手順の「AzureとDuoの繋ぎ込み」の箇所を以下のように設定します。そのほかの設定は変更ありません。

OktaとDuoの繋ぎ込み

Okta

  • Oktaの管理コンソールへアクセスします。
  • [Applications] – [Applications] – [Add Application]とクリックします。
  • [Create New App]をクリックします。
  • PlatformはWeb、Sign on methodはSAML2.0を選択し、[Create] をクリックします。
  • App nameにアプリ名を入力します。
  • App visibilityの2つのチェックボックスにチェックを入れます。
    • DuoとAWS間で連携をしているため、Oktaのダッシュボードからこのアプリケーションへアクセスしてもエラーになります。
    • ユーザーに混乱を招くため非表示とすることをおすすめします。
  • [Next]をクリックします。
  • Duoの[SAML Identity Provider Configuration] – [1. Configure the SAML Identity Provider]に移動します。
  • DuoのEntity IDをコピーし、OktaのSingle Sign on URLに貼りつけます。
  • DuoのAssertion Consumer Service URLをコピーし、OktaのAudience URI (SP Entity ID) に貼りつけます。
  • Attribute Statementsはそれぞれ以下の通り設定します。
  • [Next]をクリックします。
  • I’m an Okta customer adding an internal appを選択し、[Finish]をクリックします。
  • [Assignments]タブからユーザをアサインします。

Duo

  • Duoの[SAML Identity Provider Configuration] – [3. Configure Duo Single Sign-On]に移動します。
  • Oktaの[Sign On]タブの[View Setup Instuctions]をクリックします。
  • OktaのIdentity Provider Single Sign-On URLの値をコピーし、DuoのEntity IDに貼り付けます。
  • OktaのIdentity Provider Issuerの値をコピーし、DuoのSingle Sign-On URLに貼り付けます。
  • Single Logout URLとLogout Redirect URLは空欄にします。
  • OktaのX.509 Certificateの[Download certificate]をクリックし、証明書をダウンロードします。
  • Duoの[Certificate]の箇所に証明書をアップロードします。
  • [Username normalization]はユーザ情報の取扱いについてを定義しますが、デフォルトのSimpleのままとします。
  • [Save]をクリックします。

動作検証

  • FileVaultがオフになっているMacを用意します。
  • Amazon Web Service – Single Sign-OnのページのMetadata項目にあるLogin URLをコピーします。
  • ブラウザを開き、コピーしたURLへアクセスします。
  • Oktaのログイン画面が表示されるため、認証を行います。
  • 認証が完了すると、DuoのMFAが要求されます。
  • MFAの承認後、Duo Device Health Applicationが起動します。
  • アクションの要求が求められAWSにアクセスができません。
  • 詳細を確認すると、FileVaultが有効でないと内容が記載されています。
  • FileVaultをONにして再度アクセスをすると、作成したAWSのIAMRoleでログインできます。

参照したドキュメント

ポリシー比較

設定手順

終わりに

IdPでOktaを利用している場合に、Duoとの組み合わせで条件付きアクセスを実現するケースに使えそうだと思いました。
Okta Devicesの機能を検証できるようになったら、改めて比較と検証をしたいと思います。

gonoway

青森県八戸市出身。そう、八を五に変えることでgonowayの完成。
グンマーの大学を卒業後、中堅SI会社でセキュリティを5年間担当。
2019年4月からクラウドネイティブにジョインし、デバイスを中心に担当。
スムージーで体を整え、ビールで心を整える。そんな日々。