<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://k5wiki.kerberos.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ShawnEmery</id>
		<title>K5Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://k5wiki.kerberos.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ShawnEmery"/>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki/Special:Contributions/ShawnEmery"/>
		<updated>2026-04-22T08:54:09Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5401</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5401"/>
				<updated>2014-09-10T21:38:01Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( &amp;lt;OID to be under KIT&amp;gt;&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseExactIA5Match&lt;br /&gt;
         SUBSTR caseExactSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( &amp;lt;OID to be under KIT&amp;gt;&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( &amp;lt;OID to be under KIT&amp;gt;&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( &amp;lt;OID to be under KIT&amp;gt;&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( &amp;lt;OID to be under KIT&amp;gt;&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
Note that in the schema, lack of AllowToImpersonate means ALL clients can be impersonated. This may not be adhere to conservative security practices, but is in line with the general behavior for constrained delegation access, has better usability, and performance.  We haven't implemented it yet, but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails.&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;br /&gt;
&lt;br /&gt;
'''Use Cases'''&lt;br /&gt;
&lt;br /&gt;
The main use case is to restrict which user principals are allowed to be impersonated by the proxy principal for the target service principal.  Administrators that want to limit access to certain users for target services can use the ACL design without needing to update target service applications/systems to use interpret authorization data.  This assumes a non-cross realm environment.&lt;br /&gt;
&lt;br /&gt;
This use case can be expanded to allow for a set of multiple users to be impersonated by a set of proxy principals for a set of target principals.  This is accomplished with out having to maintain separate ACL lists for various target services by using groupings similar to network groups.&lt;br /&gt;
&lt;br /&gt;
'''Potential Conflicts with Existing Implementations'''&lt;br /&gt;
&lt;br /&gt;
The closest functionality to Kerberos Delegation ACLs can be found in Windows 2012.  This configuration can be accomplished in Windows by setting the PrincipalsAllowedToDelegateToAccount attribute to the proxy services for the target services.  The following procedures gives an example on how this is accomplished:&lt;br /&gt;
&lt;br /&gt;
---begin procedures---&lt;br /&gt;
&lt;br /&gt;
In regards to Windows Server 2012: The &amp;quot;Delegation&amp;quot; tab is still present through the AD Users and Computers interface, but has the traditional behavior of the front-end selecting which resource services it can delegate to, instead of selecting which front-end services can delegate to the resource service.  The security tab is not present in the AD Users and Computers interface, but rather through the AD Administrative Center.  So to emulate the functionality of the Delegation ACL (using the same actors as described in the KerberosDelegationACL project page), in the AD environment:&lt;br /&gt;
&lt;br /&gt;
 1. Create a group &amp;quot;allowed-users&amp;quot; with &amp;quot;shawn@KERBEROS.ORG&amp;quot; and &amp;quot;simo@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
 2. Select &amp;quot;ldap-server-1&amp;quot;s and &amp;quot;ldap-server-2&amp;quot;s security tab and add &amp;quot;allowed-users&amp;quot;.&lt;br /&gt;
 3. Create another group &amp;quot;http-ldap-delegation&amp;quot; with &amp;quot;HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&amp;quot;, &amp;quot;HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&amp;quot;, and &amp;quot;HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
 4. Then restrict the delegation group to the resource with the following invocation:&lt;br /&gt;
    set-adcomputer ldap-server-1 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
    set-adcomputer ldap-server-2 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
&lt;br /&gt;
So above, the KDC will restrict the resource ticket issuance for S4U2Proxy requests to http-ldap-delegation.  The user access to the resource will be controlled by the allowed-users group, which differs from the Kerberos Delegation ACL project by the fact that the authorization is performed by the application rather than enforced by the KDC.  Note that the above should also be supported through x-realms.&lt;br /&gt;
&lt;br /&gt;
---end procedures---&lt;br /&gt;
&lt;br /&gt;
There a couple of benefits that the proposed project entails that justifies why having different implementations for somewhat similar functionality:&lt;br /&gt;
&lt;br /&gt;
1. Policy decisions can be made by the KDC w/o having to rely on updating application servers to perform the policy enforcement against the user.&lt;br /&gt;
2. Bindings are/can be user-to-service controlled providing finer granular authorization to said services.&lt;br /&gt;
&lt;br /&gt;
'''Documentation'''&lt;br /&gt;
&lt;br /&gt;
Kerberos Delegation ACLs allow for fine-grained access controls for Services For Users to Proxy (S4U2Proxy) (i.e. Constrained Delegation) requests.  This allows a set of users to have access to a specified set of services through set of proxy services.  This binding is referenced during S4U2Proxy requests to determine if the KDC will accept or reject the client request.  Currently this configuration is only supported when using LDAP as a backend to the KDC.  The following documents how to configure an example ACL for S4U2Proxy requests:&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=allowed-users,dc=kerberos,dc=org&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: cn=allowed-users&lt;br /&gt;
 memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
 dn: cn=LDAP-Servers,dc=kerberos,dc=org&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: LDAP-Servers&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=http-ldap-delegation,dc=kerberos,dc=org&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 objectclass: Krb5DelegationACL&lt;br /&gt;
 cn: http-ldap-delegation&lt;br /&gt;
 AllowToImpersonate: cn=allowed-users,dc=kerberos,dc=org&lt;br /&gt;
 AllowedTarget: cn=LDAP-Servers,kdc=kerberos,dc=org&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
'''Testing'''&lt;br /&gt;
&lt;br /&gt;
Currently the GSS-API test suite provides S4U test modules which could be expanded to include Kerberos Delegation ACL tests that tests both success and failure conditions:&lt;br /&gt;
&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL1&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy1 requests a service ticket to service2 on behalf of user1.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request succeeds&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL2&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy1 requests a service ticket to service2 on behalf of user3.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request fails&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL3&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy3 requests a service ticket to service2 on behalf of user1.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request fails&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL4&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy1 requests a service ticket to service3 on behalf of user1.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request fails&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL5&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy2 requests a service ticket to service1 on behalf of user2.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request succeeds&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5393</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5393"/>
				<updated>2014-09-03T05:21:22Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.20&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseIgnoreMatch&lt;br /&gt;
         SUBSTR caseIgnoreSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.6&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.21&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.22&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.7&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
Note that in the schema, lack of AllowToImpersonate means ALL clients can be impersonated. This may not be adhere to conservative security practices, but is in line with the general behavior for constrained delegation access, has better usability, and performance.  We haven't implemented it yet, but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails.&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;br /&gt;
&lt;br /&gt;
'''Use Cases'''&lt;br /&gt;
&lt;br /&gt;
The main use case is to restrict which user principals are allowed to be impersonated by the proxy principal for the target service principal.  Administrators that want to limit access to certain users for target services can use the ACL design without needing to update target service applications/systems to use interpret authorization data.  This assumes a non-cross realm environment.&lt;br /&gt;
&lt;br /&gt;
This use case can be expanded to allow for a set of multiple users to be impersonated by a set of proxy principals for a set of target principals.  This is accomplished with out having to maintain separate ACL lists for various target services by using groupings similar to network groups.&lt;br /&gt;
&lt;br /&gt;
'''Potential Conflicts with Existing Implementations'''&lt;br /&gt;
&lt;br /&gt;
The closest functionality to Kerberos Delegation ACLs can be found in Windows 2012.  This configuration can be accomplished in Windows by setting the PrincipalsAllowedToDelegateToAccount attribute to the proxy services for the target services.  The following procedures gives an example on how this is accomplished:&lt;br /&gt;
&lt;br /&gt;
---begin procedures---&lt;br /&gt;
&lt;br /&gt;
In regards to Windows Server 2012: The &amp;quot;Delegation&amp;quot; tab is still present through the AD Users and Computers interface, but has the traditional behavior of the front-end selecting which resource services it can delegate to, instead of selecting which front-end services can delegate to the resource service.  The security tab is not present in the AD Users and Computers interface, but rather through the AD Administrative Center.  So to emulate the functionality of the Delegation ACL (using the same actors as described in the KerberosDelegationACL project page), in the AD environment:&lt;br /&gt;
&lt;br /&gt;
 1. Create a group &amp;quot;allowed-users&amp;quot; with &amp;quot;shawn@KERBEROS.ORG&amp;quot; and &amp;quot;simo@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
 2. Select &amp;quot;ldap-server-1&amp;quot;s and &amp;quot;ldap-server-2&amp;quot;s security tab and add &amp;quot;allowed-users&amp;quot;.&lt;br /&gt;
 3. Create another group &amp;quot;http-ldap-delegation&amp;quot; with &amp;quot;HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&amp;quot;, &amp;quot;HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&amp;quot;, and &amp;quot;HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
 4. Then restrict the delegation group to the resource with the following invocation:&lt;br /&gt;
    set-adcomputer ldap-server-1 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
    set-adcomputer ldap-server-2 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
&lt;br /&gt;
So above, the KDC will restrict the resource ticket issuance for S4U2Proxy requests to http-ldap-delegation.  The user access to the resource will be controlled by the allowed-users group, which differs from the Kerberos Delegation ACL project by the fact that the authorization is performed by the application rather than enforced by the KDC.  Note that the above should also be supported through x-realms.&lt;br /&gt;
&lt;br /&gt;
---end procedures---&lt;br /&gt;
&lt;br /&gt;
There a couple of benefits that the proposed project entails that justifies why having different implementations for somewhat similar functionality:&lt;br /&gt;
&lt;br /&gt;
1. Policy decisions can be made by the KDC w/o having to rely on updating application servers to perform the policy enforcement against the user.&lt;br /&gt;
2. Bindings are/can be user-to-service controlled providing finer granular authorization to said services.&lt;br /&gt;
&lt;br /&gt;
'''Documentation'''&lt;br /&gt;
&lt;br /&gt;
Kerberos Delegation ACLs allow for fine-grained access controls for Services For Users to Proxy (S4U2Proxy) (i.e. Constrained Delegation) requests.  This allows a set of users to have access to a specified set of services through set of proxy services.  This binding is referenced during S4U2Proxy requests to determine if the KDC will accept or reject the client request.  Currently this configuration is only supported when using LDAP as a backend to the KDC.  The following documents how to configure an example ACL for S4U2Proxy requests:&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=allowed-users,dc=kerberos,dc=org&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: cn=allowed-users&lt;br /&gt;
 memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
 dn: cn=LDAP-Servers,dc=kerberos,dc=org&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: LDAP-Servers&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=http-ldap-delegation,dc=kerberos,dc=org&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 objectclass: Krb5DelegationACL&lt;br /&gt;
 cn: http-ldap-delegation&lt;br /&gt;
 AllowToImpersonate: cn=allowed-users,dc=kerberos,dc=org&lt;br /&gt;
 AllowedTarget: cn=LDAP-Servers,kdc=kerberos,dc=org&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
'''Testing'''&lt;br /&gt;
&lt;br /&gt;
Currently the GSS-API test suite provides S4U test modules which could be expanded to include Kerberos Delegation ACL tests that tests both success and failure conditions:&lt;br /&gt;
&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL1&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy1 requests a service ticket to service2 on behalf of user1.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request succeeds&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL2&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy1 requests a service ticket to service2 on behalf of user3.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request fails&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL3&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy3 requests a service ticket to service2 on behalf of user1.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request fails&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL4&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy1 requests a service ticket to service3 on behalf of user1.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request fails&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL5&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy2 requests a service ticket to service1 on behalf of user2.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request succeeds&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5391</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5391"/>
				<updated>2014-09-01T04:00:37Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.20&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseIgnoreMatch&lt;br /&gt;
         SUBSTR caseIgnoreSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.6&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.21&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.22&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.7&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
Note that in the schema, lack of AllowToImpersonate means ALL clients can be impersonated. This may not be adhere to conservative security practices, but is in line with the general behavior for constrained delegation access, has better usability, and performance.  We haven't implemented it yet, but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails.&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;br /&gt;
&lt;br /&gt;
'''Use Cases'''&lt;br /&gt;
&lt;br /&gt;
The main use case is to restrict which user principals are allowed to be impersonated by the proxy principal for the target service principal.  Administrators that want to limit access to certain users for target services can use the ACL design without needing to update target service applications/systems to use interpret authorization data.  This assumes a non-cross realm environment.&lt;br /&gt;
&lt;br /&gt;
This use case can be expanded to allow for a set of multiple users to be impersonated by a set of proxy principals for a set of target principals.  This is accomplished with out having to maintain separate ACL lists for various target services by using groupings similar to network groups.&lt;br /&gt;
&lt;br /&gt;
'''Potential Conflicts with Existing Implementations'''&lt;br /&gt;
&lt;br /&gt;
After investigating w2k12, there could be a way to deploy something with similar functionality.&lt;br /&gt;
&lt;br /&gt;
---begin procedures---&lt;br /&gt;
&lt;br /&gt;
In regards to Windows Server 2012: The &amp;quot;Delegation&amp;quot; tab is still present through the AD Users and Computers interface, but has the traditional behavior of the front-end selecting which resource services it can delegate to, instead of selecting which front-end services can delegate to the resource service.  The security tab is not present in the AD Users and Computers interface, but rather through the AD Administrative Center.  So to emulate the functionality of the Delegation ACL (using the same actors as described in the KerberosDelegationACL project page), in the AD environment:&lt;br /&gt;
&lt;br /&gt;
 1. Create a group &amp;quot;allowed-users&amp;quot; with &amp;quot;shawn@KERBEROS.ORG&amp;quot; and &amp;quot;simo@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
 2. Select &amp;quot;ldap-server-1&amp;quot;s and &amp;quot;ldap-server-2&amp;quot;s security tab and add &amp;quot;allowed-users&amp;quot;.&lt;br /&gt;
 3. Create another group &amp;quot;http-ldap-delegation&amp;quot; with &amp;quot;HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&amp;quot;, &amp;quot;HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&amp;quot;, and &amp;quot;HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
 4. Then restrict the delegation group to the resource with the following invocation:&lt;br /&gt;
    set-adcomputer ldap-server-1 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
    set-adcomputer ldap-server-2 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
&lt;br /&gt;
So above, the KDC will restrict the resource ticket issuance for S4U2Proxy requests to http-ldap-delegation.  The user access to the resource will be controlled by the allowed-users group, which differs from the Delegation ACL project by the fact that the authorization is performed by the application rather than enforced by the KDC.  Note that the above should also be supported through x-realms.&lt;br /&gt;
&lt;br /&gt;
---end procedures---&lt;br /&gt;
&lt;br /&gt;
The benefits of the proposed project justifies having differences between the vendor implementations:&lt;br /&gt;
&lt;br /&gt;
1. Policy decisions can be made by the KDC w/o having to rely on updating application servers to perform the policy enforcement against the user.&lt;br /&gt;
2. Bindings are/can be user-to-service controlled providing finer granular authorization to said services.&lt;br /&gt;
&lt;br /&gt;
'''Documentation'''&lt;br /&gt;
&lt;br /&gt;
Kerberos Delegation ACLs allow for fine-grained access controls for Services For Users to Proxy (S4U2Proxy) (i.e. Constrained Delegation) requests.  This allows a set of users to have access to a specified set of services through set of proxy services.  This binding is referenced during S4U2Proxy requests to determine if the KDC will accept or reject the client request.  Currently this configuration is only supported when using LDAP as a backend to the KDC.  The following documents how to configure an example ACL for S4U2Proxy requests:&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=allowed-users,dc=kerberos,dc=org&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: cn=allowed-users&lt;br /&gt;
 memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
 dn: cn=LDAP-Servers,dc=kerberos,dc=org&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: LDAP-Servers&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=http-ldap-delegation,dc=kerberos,dc=org&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 objectclass: Krb5DelegationACL&lt;br /&gt;
 cn: http-ldap-delegation&lt;br /&gt;
 AllowToImpersonate: cn=allowed-users,dc=kerberos,dc=org&lt;br /&gt;
 AllowedTarget: cn=LDAP-Servers,kdc=kerberos,dc=org&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
'''Testing'''&lt;br /&gt;
&lt;br /&gt;
Currently the GSS-API test suite provides S4U test modules which could be expanded to include Kerberos Delegation ACL tests that tests both success and failure conditions:&lt;br /&gt;
&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL1&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy1 requests a service ticket to service2 on behalf of user1.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request succeeds&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL2&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy1 requests a service ticket to service2 on behalf of user3.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request fails&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL3&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy3 requests a service ticket to service2 on behalf of user1.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request fails&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL4&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy1 requests a service ticket to service3 on behalf of user1.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request fails&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Assertion: KDACL5&lt;br /&gt;
&lt;br /&gt;
allowed users: user1, user2&lt;br /&gt;
specified proxy service: proxy1, proxy2&lt;br /&gt;
allowed target: service1, service2&lt;br /&gt;
&lt;br /&gt;
where proxy2 requests a service ticket to service1 on behalf of user2.&lt;br /&gt;
&lt;br /&gt;
Expectation: S4U2Proxy request succeeds&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5335</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5335"/>
				<updated>2014-06-25T16:28:33Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.20&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseIgnoreMatch&lt;br /&gt;
         SUBSTR caseIgnoreSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.6&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.21&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.22&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.7&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
Note that in the schema, lack of AllowToImpersonate means ALL clients can be impersonated. This may not be adhere to conservative security practices, but is in line with the general behavior for constrained delegation access, has better usability, and performance.  We haven't implemented it yet, but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails.&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;br /&gt;
&lt;br /&gt;
'''Use Cases'''&lt;br /&gt;
&lt;br /&gt;
The main use case is to restrict which user principals are allowed to be impersonated by the proxy principal for the target service principal.  Administrators that want to limit access to certain users for target services can use the ACL design without needing to update target service applications/systems to use interpret authorization data.  This assumes a non-cross realm environment.&lt;br /&gt;
&lt;br /&gt;
This use case can be expanded to allow for a set of multiple users to be impersonated by a set of proxy principals for a set of target principals.  This is accomplished with out having to maintain separate ACL lists for various target services by using groupings similar to network groups.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=allowed-users,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: cn=allowed-users&lt;br /&gt;
 memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
 dn: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: LDAP-Servers&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=http-ldap-delegation,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 objectclass: Krb5DelegationACL&lt;br /&gt;
 cn: http-ldap-delegation&lt;br /&gt;
 AllowToImpersonate: cn=allowed-users,SUFFIX&lt;br /&gt;
 AllowedTarget: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
'''Potential Conflicts'''&lt;br /&gt;
&lt;br /&gt;
After investigating w2k12, there could be a way to deploy something with similar functionality.&lt;br /&gt;
&lt;br /&gt;
---begin procedures---&lt;br /&gt;
&lt;br /&gt;
In regards to Windows Server 2012: The &amp;quot;Delegation&amp;quot; tab is still present through the AD Users and Computers interface, but has the traditional behavior of the front-end selecting which resource services it can delegate to, instead of selecting which front-end services can delegate to the resource service.  The security tab is not present in the AD Users and Computers interface, but rather through the AD Administrative Center.  So to emulate the functionality of the Delegation ACL (using the same actors as described in the KerberosDelegationACL project page), in the AD environment:&lt;br /&gt;
&lt;br /&gt;
 1. Create a group &amp;quot;allowed-users&amp;quot; with &amp;quot;shawn@KERBEROS.ORG&amp;quot; and &amp;quot;simo@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
 2. Select &amp;quot;ldap-server-1&amp;quot;s and &amp;quot;ldap-server-2&amp;quot;s security tab and add &amp;quot;allowed-users&amp;quot;.&lt;br /&gt;
 3. Create another group &amp;quot;http-ldap-delegation&amp;quot; with &amp;quot;HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&amp;quot;, &amp;quot;HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&amp;quot;, and &amp;quot;HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
 4. Then restrict the delegation group to the resource with the following invocation:&lt;br /&gt;
    set-adcomputer ldap-server-1 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
    set-adcomputer ldap-server-2 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
&lt;br /&gt;
So above, the KDC will restrict the resource ticket issuance for S4U2Proxy requests to http-ldap-delegation.  The user access to the resource will be controlled by the allowed-users group, which differs from the Delegation ACL project by the fact that the authorization is performed by the application rather than enforced by the KDC.  Note that the above should also be supported through x-realms.&lt;br /&gt;
&lt;br /&gt;
---end procedures---&lt;br /&gt;
&lt;br /&gt;
The benefits of the proposed project justifies having differences between the vendor implementations:&lt;br /&gt;
&lt;br /&gt;
1. Policy decisions can be made by the KDC w/o having to rely on updating application servers to perform the policy enforcement against the user.&lt;br /&gt;
2. Bindings are/can be user-to-service controlled providing finer granular authorization to said services.&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5334</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5334"/>
				<updated>2014-06-25T16:27:48Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.20&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseIgnoreMatch&lt;br /&gt;
         SUBSTR caseIgnoreSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.6&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.21&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.22&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.7&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
Note that in the schema, lack of AllowToImpersonate means ALL clients can be impersonated. This may not be adhere to conservative security practices, but is in line with the general behavior for constrained delegation access, has better usability, and performance.  We haven't implemented it yet, but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails.&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;br /&gt;
&lt;br /&gt;
'''Use Cases'''&lt;br /&gt;
&lt;br /&gt;
The main use case is to restrict which user principals are allowed to be impersonated by the proxy principal for the target service principal.  Administrators that want to limit access to certain users for target services can use the ACL design without needing to update target service applications/systems to use interpret authorization data.  This assumes a non-cross realm environment.&lt;br /&gt;
&lt;br /&gt;
This use case can be expanded to allow for a set of multiple users to be impersonated by a set of proxy principals for a set of target principals.  This is accomplished with out having to maintain separate ACL lists for various target services by using groupings similar to network groups.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=allowed-users,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: cn=allowed-users&lt;br /&gt;
 memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
 dn: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: LDAP-Servers&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=http-ldap-delegation,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 objectclass: Krb5DelegationACL&lt;br /&gt;
 cn: http-ldap-delegation&lt;br /&gt;
 AllowToImpersonate: cn=allowed-users,SUFFIX&lt;br /&gt;
 AllowedTarget: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
'''Potential Conflicts'''&lt;br /&gt;
&lt;br /&gt;
After investigating w2k12, there could be a way to deploy something with similar functionality.&lt;br /&gt;
&lt;br /&gt;
---begin procedures---&lt;br /&gt;
&lt;br /&gt;
In regards to Windows Server 2012: The &amp;quot;Delegation&amp;quot; tab is still present through the AD Users and Computers interface, but has the traditional behavior of the front-end selecting which resource services it can delegate to, instead of selecting which front-end services can delegate to the resource service.  The security tab is not present in the AD Users and Computers interface, but rather through the AD Administrative Center.  So to emulate the functionality of the Delegation ACL (using the same actors as described in the KerberosDelegationACL project page), in the AD environment:&lt;br /&gt;
&lt;br /&gt;
1. Create a group &amp;quot;allowed-users&amp;quot; with &amp;quot;shawn@KERBEROS.ORG&amp;quot; and &amp;quot;simo@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
2. Select &amp;quot;ldap-server-1&amp;quot;s and &amp;quot;ldap-server-2&amp;quot;s security tab and add &amp;quot;allowed-users&amp;quot;.&lt;br /&gt;
3. Create another group &amp;quot;http-ldap-delegation&amp;quot; with &amp;quot;HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&amp;quot;, &amp;quot;HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&amp;quot;, and &amp;quot;HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&amp;quot; as members.&lt;br /&gt;
4. Then restrict the delegation group to the resource with the following invocation:&lt;br /&gt;
set-adcomputer ldap-server-1 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
set-adcomputer ldap-server-2 -PrincipalsAllowedToDelegateToAccount http-ldap-delegation&lt;br /&gt;
&lt;br /&gt;
So above, the KDC will restrict the resource ticket issuance for S4U2Proxy requests to http-ldap-delegation.  The user access to the resource will be controlled by the allowed-users group, which differs from the Delegation ACL project by the fact that the authorization is performed by the application rather than enforced by the KDC.  Note that the above should also be supported through x-realms.&lt;br /&gt;
&lt;br /&gt;
---end procedures---&lt;br /&gt;
&lt;br /&gt;
The benefits of the proposed project justifies having differences between the vendor implementations:&lt;br /&gt;
&lt;br /&gt;
1. Policy decisions can be made by the KDC w/o having to rely on updating application servers to perform the policy enforcement against the user.&lt;br /&gt;
2. Bindings are/can be user-to-service controlled providing finer granular authorization to said services.&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5283</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5283"/>
				<updated>2014-04-13T06:08:04Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.20&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseIgnoreMatch&lt;br /&gt;
         SUBSTR caseIgnoreSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.6&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.21&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.22&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.7&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
Note that in the schema, lack of AllowToImpersonate means ALL clients can be impersonated. This may not be adhere to conservative security practices, but is in line with the general behavior for constrained delegation access, has better usability, and performance.  We haven't implemented it yet, but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails.&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;br /&gt;
&lt;br /&gt;
'''Use Cases'''&lt;br /&gt;
&lt;br /&gt;
The main use case is to restrict which user principals are allowed to be impersonated by the proxy principal for the target service principal.  Administrators that want to limit access to certain users for target services can use the ACL design without needing to update target service applications/systems to use interpret authorization data.  This assumes a non-cross realm environment.&lt;br /&gt;
&lt;br /&gt;
This use case can be expanded to allow for a set of multiple users to be impersonated by a set of proxy principals for a set of target principals.  This is accomplished with out having to maintain separate ACL lists for various target services by using groupings similar to network groups.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=allowed-users,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: cn=allowed-users&lt;br /&gt;
 memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
 dn: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: LDAP-Servers&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=http-ldap-delegation,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 objectclass: Krb5DelegationACL&lt;br /&gt;
 cn: http-ldap-delegation&lt;br /&gt;
 AllowToImpersonate: cn=allowed-users,SUFFIX&lt;br /&gt;
 AllowedTarget: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5242</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5242"/>
				<updated>2013-10-25T01:45:46Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.20&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseIgnoreMatch&lt;br /&gt;
         SUBSTR caseIgnoreSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.6&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.21&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.22&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.7&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=allowed-users,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: cn=allowed-users&lt;br /&gt;
 memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
 dn: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: LDAP-Servers&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=http-ldap-delegation,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 objectclass: Krb5DelegationACL&lt;br /&gt;
 cn: http-ldap-delegation&lt;br /&gt;
 AllowToImpersonate: cn=allowed-users,SUFFIX&lt;br /&gt;
 AllowedTarget: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Note that in the schema, lack of AllowToImpersonate means ALL clients can be impersonated. We haven't implemented it yet but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails.&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5241</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5241"/>
				<updated>2013-10-25T01:39:27Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.20&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseIgnoreMatch&lt;br /&gt;
         SUBSTR caseIgnoreSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.6&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.21&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.22&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.7&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=allowed-users,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: cn=allowed-users&lt;br /&gt;
 memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
 dn: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 cn: LDAP-Servers&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
 dn: cn=http-ldap-delegation,SUFFIX&lt;br /&gt;
 objectclass: groupOfPrincipals&lt;br /&gt;
 objectclass: Krb5DelegationACL&lt;br /&gt;
 cn: http-ldap-delegation&lt;br /&gt;
 AllowToImpersonate: cn=allowed-users,SUFFIX&lt;br /&gt;
 AllowedTarget: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
 memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Note that in our schema lack of AllowToImpersonate means ALL clients can be impersonated. We haven't implemented it yet but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5240</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5240"/>
				<updated>2013-10-25T01:38:30Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.20&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseIgnoreMatch&lt;br /&gt;
         SUBSTR caseIgnoreSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.6&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.21&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 attributeTypes: ( 2.16.840.1.113730.3.8.11.22&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
 objectClasses: ( 2.16.840.1.113730.3.8.12.7&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
dn: cn=allowed-users,SUFFIX&lt;br /&gt;
objectclass: groupOfPrincipals&lt;br /&gt;
cn: cn=allowed-users&lt;br /&gt;
memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
dn: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
objectclass: groupOfPrincipals&lt;br /&gt;
cn: LDAP-Servers&lt;br /&gt;
memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
dn: cn=http-ldap-delegation,SUFFIX&lt;br /&gt;
objectclass: groupOfPrincipals&lt;br /&gt;
objectclass: Krb5DelegationACL&lt;br /&gt;
cn: http-ldap-delegation&lt;br /&gt;
AllowToImpersonate: cn=allowed-users,SUFFIX&lt;br /&gt;
AllowedTarget: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Note that in our schema lack of AllowToImpersonate means ALL clients can be impersonated. We haven't implemented it yet but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5239</id>
		<title>Projects/KerberosDelegationACL</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/KerberosDelegationACL&amp;diff=5239"/>
				<updated>2013-10-25T00:23:47Z</updated>
		
		<summary type="html">&lt;p&gt;ShawnEmery: Kerberos delegation access control list for finer granularity in determining success in S4U2Proxy requests.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
'''Background'''&lt;br /&gt;
&lt;br /&gt;
Customers would like greater access controls for constrained delegation.  The current implementation provides ACLs for S4U2Proxy requests to restrict which target services the KDC can issue for proxy principals, but does not have provisions for which user principals that the proxy principal can request service tickets on behalf of.&lt;br /&gt;
&lt;br /&gt;
'''Design'''&lt;br /&gt;
&lt;br /&gt;
The proposed solution is implemented in the LDAP back-end only.  The proposed attributes and classes are:&lt;br /&gt;
&lt;br /&gt;
attributeTypes: ( 2.16.840.1.113730.3.8.11.20&lt;br /&gt;
         NAME 'memberPrincipal'&lt;br /&gt;
         DESC 'Principal names member of a groupOfPrincipals group'&lt;br /&gt;
         EQUALITY caseIgnoreMatch&lt;br /&gt;
         SUBSTR caseIgnoreSubstringsMatch&lt;br /&gt;
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)&lt;br /&gt;
&lt;br /&gt;
objectClasses: ( 2.16.840.1.113730.3.8.12.6&lt;br /&gt;
         NAME 'groupOfPrincipals'&lt;br /&gt;
         SUP top AUXILIARY&lt;br /&gt;
         MUST ( cn )&lt;br /&gt;
         MAY ( memberPrincipal ))&lt;br /&gt;
&lt;br /&gt;
attributeTypes: ( 2.16.840.1.113730.3.8.11.21&lt;br /&gt;
          NAME 'AllowToImpersonate'&lt;br /&gt;
          DESC 'Principals that can be impersonated'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
attributeTypes: ( 2.16.840.1.113730.3.8.11.22&lt;br /&gt;
          NAME 'AllowedTarget'&lt;br /&gt;
          DESC 'Target principals alowed to get a ticket for'&lt;br /&gt;
          SUP distinguishedName)&lt;br /&gt;
&lt;br /&gt;
objectClasses: ( 2.16.840.1.113730.3.8.12.7&lt;br /&gt;
         NAME 'Krb5DelegationACL'&lt;br /&gt;
         SUP groupOfPrincipals STRUCTURAL&lt;br /&gt;
         MAY ( AllowToImpersonate $ AllowedTarget ))&lt;br /&gt;
&lt;br /&gt;
Groupings are proposed given that one instance could be used across multiple entries instead of having to define these multiple times for each entry.&lt;br /&gt;
&lt;br /&gt;
groupOfPrincipals is first created (which may contain a single principal) for clients and targets, and then joining all together into an 'ACL object'.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
We want to allow our HTTP server cluster to impersonate 2 users (shawn and simo) against the LDAP server cluster:&lt;br /&gt;
&lt;br /&gt;
First we create a group of users:&lt;br /&gt;
&lt;br /&gt;
dn: cn=allowed-users,SUFFIX&lt;br /&gt;
objectclass: groupOfPrincipals&lt;br /&gt;
cn: cn=allowed-users&lt;br /&gt;
memberPrincipal: shawn@KERBEROS.ORG&lt;br /&gt;
memberPrincipal: simo@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Then a group of target servers (we assume there may be multiple copies all equally accessible):&lt;br /&gt;
&lt;br /&gt;
dn: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
objectclass: groupOfPrincipals&lt;br /&gt;
cn: LDAP-Servers&lt;br /&gt;
memberPrincipal: ldap/ldap-server-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
memberPrincipal: ldap/ldap-server-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Finally we create the allow rule which binds clients, targets, and the proxy service:&lt;br /&gt;
&lt;br /&gt;
dn: cn=http-ldap-delegation,SUFFIX&lt;br /&gt;
objectclass: groupOfPrincipals&lt;br /&gt;
objectclass: Krb5DelegationACL&lt;br /&gt;
cn: http-ldap-delegation&lt;br /&gt;
AllowToImpersonate: cn=allowed-users,SUFFIX&lt;br /&gt;
AllowedTarget: cn=LDAP-Servers,SUFFIX&lt;br /&gt;
memberPrincipal: HTTP/http-proxy-1.kerberos.org@KERBEROS.ORG&lt;br /&gt;
memberPrincipal: HTTP/http-proxy-2.kerberos.org@KERBEROS.ORG&lt;br /&gt;
memberPrincipal: HTTP/http-proxy-3.kerberos.org@KERBEROS.ORG&lt;br /&gt;
&lt;br /&gt;
Note that in our schema lack of AllowToImpersonate means ALL clients can be impersonated. We haven't implemented it yet but also you could have regexes in memberPrincipal for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
This schema allows us to resolve the ACL using a single LDAP query (if your LDAP server supports the dereference control).  The implementation could try the dereference control query first and then fall-back to a join control query after the first query fails&lt;br /&gt;
&lt;br /&gt;
We find this schema was the optimal compromise between the flexibility we needed and the complexity we wanted to allow, and simpler ones would prevent us from doing what's needed in a useful manner.&lt;br /&gt;
&lt;br /&gt;
The only drawback is that you cannot fit this into kadmin as it is, because it requires to be able to represent grouping mechanism and ACL objects, it would be nice if kadmin could be extended so that it is flexible enough to allow this kind of representation.&lt;/div&gt;</summary>
		<author><name>ShawnEmery</name></author>	</entry>

	</feed>