Oktaとデバイスポスチャプロバイダーを統合する

早期アクセスリリース。「セルフサービス機能を有効にする」を参照してください。

Oktaをデバイスポスチャデータ用の外部サービスと統合することで、これらの外部IDプロバイダー(IdP)からのデバイス信号を使用できます。これらの信号は、デバイスの保証ポリシーと認証ポリシーで堅牢なデバイスポスチャの要件を構成し、セキュリティポスチャを強化するために重要です。

Device Posture Provider(デバイスポスチャプロバイダー)機能は、シームレスな通信のためにSAMLベースの統合を使用します。プロセスの最初に、指定した外部デバイスポスチャIdPにOktaがSAMLリクエストを送信します。これに応じて、 IdPはSAMLアサーションを返します。これは、デバイスポスチャ属性を含むセキュアなXMLドキュメントです。これらの属性を利用して、詳細な認証ポリシーを定義して適用できます。指定したセキュリティ標準を満たすデバイスのみが、Oktaによって保護されたリソースを評価できます。この統合により、リアルタイムのセキュリティステータスまたはエンドユーザーデバイスに基づいた、動的な適応型アクセス制御を作成できます。

前提条件

  • Admin Consoleからこれらの機能を有効にします:[Device Posture Claims Mapping((デバイスポスチャクレームマッピング)][Device Posture Provider(デバイスポスチャプロバイダー)]
  • Oktaにデバイスポスチャ情報を提供するためには、SAML IdPとして構成された外部コンプライアンスサービスが必要です。想定されるSAMLアサーション形式の詳細については、「SAMLアサーションデータ契約」を参照してください。デバイスポスチャIdPが正しい形式でアサーションを送信したら、Oktaの構成を進めることができます。

OktaでデバイスポスチャIdPを構成する

  1. Admin Consoleで、[Security(セキュリティ)][Identity Providers(IDプロバイダー)]に移動します。

  2. [Add Identity Provider(IDプロバイダーを追加)]をクリックします。
  3. [SAML 2.0]を選択します。
  4. IdPを構成します。「SAML IDプロバイダーを追加する」を参照してください。
    • [IdP Usage(IdPの使用)][Device posture provider(デバイスポスチャプロバイダー)]を選択します。
    • [IdP Issuer URI(IdP発行者URI)]:IdPからの発行者URIを入力します。
    • [IdP Single Sign-On URL(IdPシングルサインオンURL)]:IdPからのサインオンURLを入力します。[Sign SAML Authentication Requests(SAML認証リクエストに署名)]オプションを選択しているが宛先を指定していない場合、Oktaは自動的に認可リクエストをIdPシングルサインオンURLに送信します。
    • [IdP Signature Certificate(IdP署名証明書)]:アサーションの署名に使用されるIdPからの証明書をアップロードします。[Browse files(ファイルを参照)]をクリックし、証明書ファイルを選択して[Open(開く)]をクリックします。

デバイス保証のプロバイダーとしてデバイスポスチャIdPを有効にする

  1. Admin Console[Security(セキュリティ)][Device integrations(デバイス統合)]に移動します。

  2. [Endpoint security(エンドポイントセキュリティ)]タブで[Add endpoint integration(エンドポイント統合を追加)]をクリックします。
  3. [Device posture provider(デバイスポスチャプロバイダー)]を選択します。
  4. プラットフォームを選択します。
  5. 構成を保存します。

デバイスポスチャIdPシグナルを使用するようにデバイス保証ポリシーを構成する

[Device Posture Provider(デバイスポスチャプロバイダー)]との統合により、IdPからの追加シグナルを組み込むようにデバイス保証ポリシーを作成または変更できます。「デバイス保証ポリシーを追加する」を参照してください。

この統合により、ポリシールールでより詳細な保証条件を使用できるようになります。

  • [Compliant(準拠)]:デバイスは、外部セキュリティシステムが設定したセキュリティ標準とルールに準拠しています。
  • [Managed(管理対象)]:インストールされた管理エージェントまたはソフトウェアが示すように、デバイスは組織のITチームまたはセキュリティチームの制御および監視下にあります。

デバイス保証ポリシーを構成したら、それを任意の認証ポリシーに統合できます。「認証ポリシーにデバイス保証を追加する」を参照してください。

グローバルセッションポリシー構成にパスワードが必要な場合、Sign-In WidgetはデバイスポスチャIdPにリダイレクトする前に、ユーザー名とパスワードの両方の入力をユーザーに求めます。

デバイスポスチャクレームを最高の優先順位にすることを要求する認証ポリシールールを構成します。[Group(グループ)][Platform(プラットフォーム)]、または[Network Zone(ネットワークゾーン)]のような条件を適用するターゲット固有のユーザー。

SAMLアサーションデータ契約

Oktaには、デバイスポスチャIdPからの特定のデータコントラクトが必要です。

  • Oktaは新しいネームスペースを使用します:urn:okta:saml:2.0:DevicePosture
  • このスキーマは、AuthnStatement/AuthnContext/AuthnContextDecl/AuthenticationContextDeclaration/Extensionの下にあるDevice要素を送信します。
  • SAMLレスポンスの例を示します。
    コピー
    <?xml version="1.0" encoding="utf-16"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:okta:saml:2.0:DevicePosture" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Device">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="Posture">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="Fact" maxOccurs="unbounded" minOccurs="0">
    <xs:complexType>
    <xs:simpleContent>
    <xs:extension base="xs:string">
    <xs:attribute type="xs:string" name="Name" use="required" />
    <xs:attribute type="xs:string" name="Value" use="required" />
    </xs:extension>
    </xs:simpleContent>
    </xs:complexType>
    </xs:element>
    <xs:element name="Attestation" maxOccurs="unbounded" minOccurs="0">
    <xs:complexType>
    <xs:simpleContent>
    <xs:extension base="xs:string">
    <xs:attribute type="xs:string" name="Type" use="required" />
    </xs:extension>
    </xs:simpleContent>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    <xs:attribute type="xs:string" name="ID" />
    <xs:attribute type="xs:string" name="Vendor" />
    <xs:attribute type="xs:string" name="Model" />
    <xs:attribute type="xs:string" name="OS" />
    <xs:attribute type="xs:string" name="OSVersion" />
    </xs:complexType>
    </xs:element>
    </xs:schema>
  • OktaはSAMLリクエストをIdPに送信します。これには、最小のrequestedAuthnContextとしてurn:okta:saml:2.0:DevicePostureが含まれます。

    OktaによってデバイスポスチャIdPに送信されるSAMLリクエストの例を示します。

    コピー
    <?xml version="1.0" encoding="UTF-8"?>
    <saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceURL="https://www.okta.com/sso/saml2/0oa6nxbvzJ7pgD2sk2o4" Destination="https://www.example.com/sso" ID="id259293517205908671989782748" IssueInstant="2018-08-14T22:15:29.753Z" Version="2.0">
    <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://www.okta.com/saml2/service-provider/spqunojxmhwsxjdesder</saml2:Issuer>
    <saml2p:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" />
    <saml2:Subject xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
    <saml2:NameID>
    user@example.com
    </saml2:NameID>
    </saml2:Subject>
    <saml2p:RequestedAuthnContext Comparison="minimum">
    <saml2:AuthnContextClassRef xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">urn:okta:saml:2.0:DevicePosture</saml2:AuthnContextClassRef>
    </saml2p:RequestedAuthnContext>
    </saml2p:AuthnRequest>
  • デバイスポスチャIdPはSAMLレスポンスをOktaに送信します。応答は、スキーマに従って構造化され、Extensionタグ内のデバイスチェックが含まれます。必須のクレームは、<Fact Name="IsManaged" Value="true" />です。その他のクレームは任意です。コンテキストを増やすために含めることができます。

    デバイスポスチャIdPによってOktaに送信されるSAMLレスポンスの例を示します。

    コピー
    <?xml version="1.0" encoding="UTF-8"?>
    <samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://www.okta.com/sso/saml2/0oa26ezzJ73dyVy9y2o4" ID="_b77266a5f22f521f3b7d9df984e357e0" InResponseTo="id241879184953548991293661746" IssueInstant="2018-07-25T18:31:46.480Z" Version="2.0">
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://www.example.com/metadata/idp.xml</saml:Issuer>
    <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
    </samlp:Status>
    <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_2bc8c149c66f6d00cb9ba3200a3d5bd8" IssueInstant="2018-07-25T18:31:46.480Z" Version="2.0">
    <saml:Issuer>https://www.example.com/metadata/idp.xml</saml:Issuer>
    <saml:Subject>
    <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" NameQualifier="https://www.example.com/metadata/idp.xml">user@example.com</saml:NameID>
    <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <saml:SubjectConfirmationData InResponseTo="id241879184953548991293661746" NotOnOrAfter="2018-07-25T18:35:06.480Z" Recipient="https://www.okta.com/sso/saml2/0oa26ezzJ73dyVy9y2o4" />
    </saml:SubjectConfirmation>
    </saml:Subject>
    <saml:Conditions NotBefore="2018-07-25T18:31:31.480Z" NotOnOrAfter="2018-07-25T18:35:06.480Z">
    <saml:AudienceRestriction>
    <saml:Audience>https://www.okta.com/saml2/service-provider/spcondtdepbkuyqvmrzi</saml:Audience>
    </saml:AudienceRestriction>
    </saml:Conditions>
    <saml:AuthnStatement AuthnInstant="2018-07-25T18:31:46.480Z" SessionIndex="_00c85fbbdec2247daa24a20dfa9c2e70">
    <saml:AuthnContext>
    <saml:AuthnContextClassRef>urn:okta:saml:2.0:DevicePosture</saml:AuthnContextClassRef>
    <saml:AuthnContextDecl>
    <AuthenticationContextDeclaration xmlns="urn:okta:saml:2.0:DevicePosture">
    <AuthnMethod>
    </AuthnMethod>
    <Extension>
    <Device ID="98bcb804e611de8fb0824b8dbaccfe3cc63171b4" Vendor="Apple" Model="iPhoneX" OS="iOS" OSVersion="10.2" xmlns="urn:okta:saml:2.0:DevicePosture">
    <Posture>
    <Fact Name="IsManaged" Value="true" />
    <Fact Name="IsCompliant" Value="false" />
    <Attestation Type="iOS">eyJhbGciOiJIUzI1NiJ9.eyJp…</Attestation>
    </Posture>
    </Device>
    </Extension>
    </AuthenticationContextDeclaration>
    </saml:AuthnContextDecl>
    </saml:AuthnContext>
    </saml:AuthnStatement>
    </saml:Assertion>
    </samlp:Response>
  • そのデバイスが管理されているか信頼されているかをデバイスポスチャIdPが確認できない場合、Oktaはエラーurn:oasis:names:tc:SAML:2.0:status:AuthnFailedを返します。

    コピー
    <Status>
    <StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Responder">
    <StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:AuthnFailed" />
    </StatusCode>
    <StatusMessage>DEVICE_NOT_MANAGED</StatusMessage>
    <StatusDetail>Kerberos NEGOTIATE failed or was canceled by the user.</StatusDetail>
    </Status>

関連項目

デバイス保証ポリシーを追加する