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

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

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

開始する前に

Oktaにデバイスポスチャ情報を提供するためには、外部のSAMLまたはOpenID Connect(OIDC)IdPをコンプライアンスサービスとして構成してください。想定されるアサーション形式またはトークン形式の詳細については、SAMLアサーションデータ契約またはOIDCデータ契約を参照してください。デバイスポスチャIdPが正しい形式でデータを送信したら、Oktaの構成を進めることができます。

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

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

  2. IDプロバイダーを追加(Add Identity Provider)(Add identity provider)をクリックします。

  3. SAML 2.0またはOpenID ConnectIdPのいずれかを選択し、次へ(Next)をクリックします。

  4. IdPを構成します。「SAML 2.0に対するOktaでのIDプロバイダーの作成」、または「OpenID Connect」を参照してください。

    IdPの使用(IdP Usage)の場合:デバイスポスチャプロバイダー(Device posture provider)を選択します。

デバイス保証プロバイダーとしてデバイスポスチャ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にリダイレクトする前に、ユーザー名とパスワードの両方の入力をユーザーに求めます。

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

Oktaには、デバイスポスチャIdPからの特定のデータ契約が必要です。

  • Oktaは新しい名前空間を使用します:urn:okta:saml:2.0:DevicePosture
  • このスキーマはDeviceの下にあるAuthnStatement/AuthnContext/AuthnContextDecl/AuthenticationContextDeclaration/Extension要素を送信します
  • 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>
    

OIDCデータ契約

OIDC IdPの場合、クレームの標準的なソースはIdPからのID tokenおよびUserInfo応答です。IdPは、次のクレームをIDトークンに追加します。

device_context: {
    managed: true,
    compliant: true,
    externalId: "123"
  }

関連項目

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