Share via


承認要求規則を使用するタイミング

入力方向要求の種類を取得する必要があるときに、Active Directory フェデレーション サービス (AD FS) でこの規則を使用して、その後、アクションを適用できます。このアクションによって、規則で指定する値に基づいてユーザーのアクセスが許可されるか拒否されるかが決まります。 この規則を使用する場合、次の規則ロジックと一致する要求を、規則で構成するオプションに基づいてパススルーまたは変換します。

規則のオプション 規則のロジック
すべてのユーザーを許可 入力方向の要求の種類が [すべての要求の種類] に等しく、値が [すべての値] に等しい場合、値が [許可] に等しい要求が発行されます。
この入力方向の要求を行ったユーザーのアクセスを許可 入力方向の要求の種類が [指定された要求の種類] に等しく、値が [指定された要求の値] に等しい場合は、値が [許可] に等しい要求が発行されます。
この入力方向の要求を行ったユーザーのアクセスを拒否 入力方向の要求の種類が [指定された要求の種類] に等しく、値が [指定された要求の値] に等しい場合は、値が [拒否] に等しい要求が発行されます。

次のセクションでは、要求規則の概要と、その規則を使用するタイミングについて詳しく説明します。

要求規則について

要求規則は、入力方向の要求を受け取り、条件 (x の場合に y を実行) を適用して、条件のパラメーターに基づいて出力方向の要求を生成するビジネス ロジックのインスタンスを表します。 次の一覧に、このトピックを読む前に理解しておく必要のある、要求規則に関する重要なヒントを示します。

  • AD FS 管理スナップインで要求規則を作成するには、要求規則テンプレートを使用する必要があります。

  • 要求規則は、要求プロバイダー (Active Directory、別のフェデレーション サービスなど) から直接、または要求プロバイダー信頼の受付変換規則の出力から、入力方向の要求を処理します。

  • 要求規則は、要求発行エンジンによって、特定の規則セット内で時系列に従って処理されます。 規則に優先順位を設定すると、特定の規則セット内の先行する規則で生成された要求をさらに調整またはフィルター処理できます。

  • 要求規則テンプレートでは、常に入力方向の要求の種類を指定する必要があります。 ただし、1 つの規則を使用して、要求の種類が同じ複数の要求の値を処理できます。

要求規則および要求規則セットの詳細については、「要求規則の役割」をご覧ください。 規則を処理する方法の詳細については、「要求エンジンの役割」をご覧ください。 要求規則セットを処理する方法の詳細については、「要求パイプラインの役割」をご覧ください。

すべてのユーザーを許可

"すべてのユーザーを許可" 規則テンプレートを使用すると、すべてのユーザーが、証明書利用者にアクセスできます。 ただし、追加の承認規則を使用すると、アクセスを制限できます。 証明書利用者へのユーザーのアクセスを許可する規則と、拒否する規則が存在する場合は、拒否の結果が許可の結果をオーバーライドし、ユーザーのアクセスは拒否されます。

ユーザーは、フェデレーション サービスから証明書利用者へのアクセスが許可されても、証明書利用者によってサービスが拒否される場合があります。

この入力方向の要求を行ったユーザーのアクセスを許可

"入力方向の要求に基づくユーザーの許可または拒否" 規則テンプレートを使用して規則を作成し、許可の条件を設定すると、入力方向の要求の種類と値に基づいて、証明書利用者への特定のユーザーのアクセスを許可できます。 たとえば、この規則テンプレートを使用して、Domain Admins という値が含まれるグループ要求を持つユーザーのみを許可する規則を作成できます。 証明書利用者へのユーザーのアクセスを許可する規則と、拒否する規則が存在する場合は、拒否の結果が許可の結果をオーバーライドし、ユーザーのアクセスは拒否されます。

ユーザーは、フェデレーション サービスから証明書利用者へのアクセスが許可されても、証明書利用者によってサービスが拒否される場合があります。 証明書利用者へのすべてのユーザーのアクセスを許可する場合は、"すべてのユーザーを許可" 規則テンプレートを使用します。

この入力方向の要求を行ったユーザーのアクセスを拒否

"入力方向の要求に基づくユーザーの許可または拒否" 規則テンプレートを使用して規則を作成し、拒否の条件を設定すると、入力方向の要求の種類と値に基づいて、証明書利用者へのユーザーのアクセスを拒否できます。 たとえば、この規則テンプレートを使用して、Domain Users という値が含まれるグループ要求を持つすべてのユーザーを拒否する規則を作成できます。

拒否の条件を使用しながら、特定のユーザーが証明書利用者にアクセスできるようにする場合は、許可の条件が指定された承認規則を後で明示的に追加して、そのユーザーが証明書利用者にアクセスできるようにする必要があります。

要求発行エンジンが規則セットを処理するときに、ユーザーがアクセスを拒否されると、以降の規則の処理がシャットダウンし、AD FS によって "アクセス拒否" エラーがユーザーの要求に返されます。

ユーザーの承認

AD FS では、承認規則を使用して、許可要求または拒否要求が発行されます。この要求によって、ユーザーまたはユーザー グループ (使用される要求の種類によって異なります) が、指定された証明書利用者の Web ベースのリソースにアクセスできるかどうかが決まります。 承認規則は証明書利用者信頼を基づいてのみ設定できます。

承認規則セット

構成する必要がある許可操作または拒否操作に応じて、さまざまな承認規則セットがあります。 たとえば、次のような規則セットがあります。

  • 発行承認規則: この規則により、ユーザーが証明書利用者の要求を受信できるかどうか、つまり、その証明書利用者にアクセスできるかどうかが決まります。

  • 委任承認規則: この規則により、ユーザーが証明書利用者に対して別のユーザーとして動作できるかどうかが決まります。 ユーザーが別のユーザーとして動作しているとき、要求元のユーザーに関する要求はまだトークンにあります。

  • 偽装承認規則: この規則により、ユーザーが証明書利用者に対して別のユーザーを完全に偽装できるかどうかが決まります。 ユーザーが偽装されていることは証明書利用者に認識されないため、他のユーザーを偽装するこの機能は非常に強力です。

承認規則プロセスが要求発行パイプラインにどのように適合するかの詳細については、要求発行エンジンの役割に関するトピックを参照してください。

サポートされている要求の種類

AD FS では 2 つの要求の種類が定義されます。この要求の種類を使用して、ユーザーが許可されるか拒否されるかが決まります。 この要求の種類の Uniform Resource Identifier (URI) を次に示します。

  1. 許可: http://schemas.microsoft.com/authorization/claims/permit

  2. 拒否: http://schemas.microsoft.com/authorization/claims/deny

この規則の作成方法

要求規則言語を使用するか、AD FS 管理スナップインの "すべてのユーザーを許可" 規則テンプレートまたは "入力方向の要求に基づくユーザーの許可または拒否" 規則テンプレートを使用して、両方の承認規則を作成できます。 "すべてのユーザーを許可" 規則テンプレートには、構成オプションは用意されていませんが、 "入力方向の要求に基づくユーザーの許可または拒否" 規則テンプレートには、次の構成オプションがあります。

  • 要求規則名を指定する

  • 入力方向の要求の種類を指定

  • 入力方向の要求値を入力

  • この入力方向の要求を行ったユーザーのアクセスを許可

  • この入力方向の要求を行ったユーザーのアクセスを拒否

このテンプレートを作成する方法の詳細については、「AD FS の展開ガイド」の「すべてのユーザーを許可する規則を作成する」または「入力方向の要求に基づいてユーザーを許可または拒否する規則を作成する」を参照してください。

要求規則言語の使用

要求値がカスタム パターンに一致する場合にのみ要求を送信する場合は、カスタム規則を使用する必要があります。 詳細については、「 When to Use a Custom Claim Rule」を参照してください。

複数の要求に基づいて承認規則を作成する方法の例

要求規則言語の構文を使用して要求を承認する場合は、ユーザーの元の要求に複数の要求が存在するかどうかに基づいて要求を発行することもできます。 次の規則は、ユーザーが Editor グループのメンバーで、認証に Windows 認証を使用している場合にのみ承認要求を発行します。

[type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod",
value == "urn:federation:authentication:windows" ]
&& [type == "http://schemas.xmlsoap.org/claims/Group ", value == "editors"]
=> issue(type = "http://schemas.xmlsoap.org/claims/authZ", value = "Granted");

フェデレーション サーバー プロキシ信頼の作成または削除を委任する承認規則を作成する例

フェデレーション サービスでフェデレーション サーバー プロキシを使用してクライアント要求をリダイレクトする前に、まず、フェデレーション サービスとフェデレーション サーバー プロキシ コンピューターの間で信頼関係を確立する必要があります。 既定では、AD FS フェデレーション サーバー プロキシ構成ウィザードで次のいずれかの資格情報が適切に指定されたときに、プロキシの信頼が確立されます。

  • フェデレーション サービスによって使用され、プロキシによって保護されるサービス アカウント

  • フェデレーション サーバー ファーム内のフェデレーション サーバーすべてのローカル Administrators グループのメンバーである Active Directory ドメイン アカウント

指定されたフェデレーション サービスに対するプロキシ信頼を作成できるユーザーを指定するには、次の委任方法のいずれかを使用します。 この一覧は、AD FS 製品チームが推奨する最も安全で問題の少ない委任方法から順に並んでいます。 組織のニーズに応じて、必ずいずれか 1 つの方法のみを使用してください。

  1. Active Directory にドメイン セキュリティ グループ (FSProxyTrustCreators など) を作成し、このグループを、ファーム内の各フェデレーション サーバーのローカル Administrators グループに追加して、この権限の委任先ユーザー アカウントのみを新しいグループに追加します。 可能であればこの方法の使用をお勧めします。

  2. ユーザーのドメイン アカウントを、ファーム内の各フェデレーション サーバーの Administrator グループに追加します。

  3. 何らかの理由で、どちらの方法も使用できない場合は、この目的で承認規則を作成することもできます。 正しく規則を記述しないと複雑になる可能性があるため、推奨できませんが、カスタム承認規則を使用して、Active Directory ドメイン ユーザー アカウントに、指定されたフェデレーション サービスに関連付けられているすべてのフェデレーション サーバー プロキシ間の信頼関係の作成または削除を委任することができます。

    3 番目の方法を選択する場合は、次の規則構文を使用して承認要求を発行できます。この要求は、指定したユーザー (この場合は contoso\frankm) に対して、フェデレーション サービスに対する 1 つ以上のフェデレーション サーバー プロキシの信頼の作成を許可します。 この規則は、Windows PowerShell コマンド Set-ADFSProperties AddProxyAuthorizationRules を使用して適用する必要があります。

    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", issuer=~"^AD AUTHORITY$" value == "contoso\frankm" ] => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "true")
    
    exists([Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value == "S-1-5-32-544", Issuer =~ "^AD AUTHORITY$"])
    => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "true");
    
    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid", Issuer =~ "^AD AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustManagerSid({0})", param= c.Value );
    
    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/proxytrustid", Issuer =~ "^SELF AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustProvisioned({0})", param=c.Value );
    

    後で、ユーザーがプロキシ信頼を作成できないようにユーザーを削除する必要がある場合は、既定のプロキシ信頼の承認規則に戻してユーザーの権限を削除し、フェデレーション サービスのプロキシ信頼を作成できます。 この規則も、Windows PowerShell コマンド Set-ADFSProperties AddProxyAuthorizationRules を使用して適用する必要があります。

    exists([Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value == "S-1-5-32-544", Issuer =~ "^AD AUTHORITY$"])
    => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "true");
    
    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid", Issuer =~ "^AD AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustManagerSid({0})", param= c.Value );
    
    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/proxytrustid", Issuer =~ "^SELF AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustProvisioned({0})", param=c.Value );
    

要求規則言語を使用する方法の詳細については、「要求規則言語の役割」をご覧ください。