XACML ( eXtensible Access Control Markup Language - limbaj extensibil de marcare pentru controlul accesului ) este un standard dezvoltat de OASIS care definește un model și un limbaj pentru descrierea politicilor de control al accesului bazate pe XML și modul în care acestea sunt procesate.
Unul dintre obiectivele XACML este de a promova terminologia comună și interoperabilitatea între implementările de control al accesului ale mai multor dezvoltatori. XACML este un standard de control al accesului bazat pe atribute (ABAC) în care atributele asociate cu un utilizator, o acțiune sau o resursă sunt introduse pentru a decide dacă un anumit utilizator poate accesa o anumită resursă într-un anumit mod. Controlul accesului bazat pe roluri (RBAC) poate fi implementat și în XACML ca o specializare a ABAC.
Versiunea 1.0 a fost aprobată de organizația de standardizare OASIS în 2003.
Versiunea 2.0 a fost aprobată de organizația de standardizare OASIS la 1 februarie 2005.
Prima specificație XACML 3.0 a fost lansată pe 10 august 2010 [1] . Cea mai recentă versiune, XACML 3.0, a fost standardizată în ianuarie 2013 [2] .
Componentele principale ale unui model de limbă sunt o regulă, o politică și un set de politici.
O regulă este cea mai simplă unitate a unui model. Regula trebuie inclusă în poliță, nu este o unitate independentă.
Componentele principale ale regulii:
Ţintă
Ținta definește interogările cărora li se aplică regula, sub formă de expresii booleene pe atributele de interogare. Solicitarea conține atribute ale subiectului care solicită acces, atribute ale resursei la care este solicitat acces și atribute ale acțiunii pe care utilizatorul dorește să o efectueze. Solicitarea poate conține și alte atribute, cum ar fi atributele de mediu. Dacă nu există nicio țintă în regulă, aceasta este moștenită de la elementul părinte (politică).
Condiție
Condițiile sunt o formă extinsă de ținte care pot folosi o gamă mai largă de funcții și, mai important, pot fi folosite pentru a compara două sau mai multe atribute împreună, cum ar fi subiect-id == doctor-id (id-ul obiectului este egal cu id-ul doctor).
Efect
Efectul poate lua două valori: „activare” sau „interzice”. Efectul regulii este declanșat dacă regula evaluează pozitiv (dacă atât ținta, cât și condiția sunt evaluate la adevărat).
Angajament
Un angajament descrie ceea ce trebuie făcut înainte sau după confirmarea accesului. Dacă acțiunile descrise nu pot fi efectuate, accesul aprobat nu poate și nu trebuie implementat.
Exemplu:
Permiteți accesul la resursa MedicalJournal cu atributul patientID=x dacă Subiectul se potrivește cu DesignatedDoctorOfPatient și se citește acțiunea cu obligatie pe permis: doLog_Inform(ID pacient, Subiect, oră) on Deny: doLog_UnauthorizedLogin(ID pacient, Subiect, oră)Recomandare
Îndeplinește aceleași funcții ca și obligația, dar, spre deosebire de aceasta, poate fi ignorată.
Folosit pentru a combina reguli.
Componentele principale ale politicii:
Algoritmul de combinare a regulilor
Folosit pentru rezolvarea conflictelor. De exemplu, dacă una dintre reguli este „adevărată” și cealaltă „falsă”, algoritmul de combinare a regulilor determină ce valoare va lua politica în sine.
Este necesar un set de politici pentru a combina un grup de politici pentru a le filtra mai rapid pe baza scopului general specificat în scopul grupului de politici.
Componentele principale:
Nume | Traducere | Descriere |
---|---|---|
PAP (Punctul de administrare a politicilor) | Punct de management al politicii | Obiect de sistem care gestionează politicile de autorizare |
PDP (punct de decizie politică) | Solicitare punct de decizie | Un obiect de sistem care compară cererile de acces cu politicile de autorizare înainte de a lua o decizie de acces |
PEP (Punctul de aplicare a politicilor) | Punct de aplicare a politicii | Un obiect de sistem care interceptează cererea unui utilizator de acces la o resursă, face o cerere de decizie către PDP pentru a obține o decizie de acces (adică accesul la resurse este aprobat sau refuzat) și acționează în baza deciziei. |
PIP (Punctul de informații privind politicile) | Punct de informare privind politicile | Un obiect de sistem care acționează ca sursă a valorilor atributelor |
PRP (punct de recuperare a politicilor) | Punct de stocare a politicii | Un obiect de sistem care stochează politicile de autorizare a accesului XACML. Aceasta este de obicei o bază de date sau un sistem de fișiere |
handler de context | Handler de context | Un obiect de sistem care traduce cererile de autorizare în format XACML, se coordonează cu PIP pentru a adăuga valori de atribut la cerere și traduce decizia de autorizare XACML în propriul format de răspuns |
Componentele modelului interacționează între ele prin cereri și răspunsuri în format XACML. Solicitarea conține atribute. Răspunsul conține rezultatul calculului politicii (are 4 valori: „permite”, „refuză”, „nu se aplică”, „nedefinit”). În plus, răspunsul poate conține obligații care trebuie îndeplinite dacă accesul este permis sau refuzat.
Această regulă interzice accesul utilizatorilor care nu s-au autentificat timp de 30 de zile.
În pseudocod: Deny if time_now > last_access_time + 30 de zile.
<xacml3:Rule RuleId= "f6637b3f-3690-4cce-989c-2ce9c053d6fa" Effect= "Deny" > <xacml3:Description> Folosiți-o sau pierdeți-o: această politică interzice accesul dacă lastLogin este la mai mult de 30 de zile de la data de astăzi < /xacml3:Descriere> <xacml3:Target/> <xacml3:Condition > <xacml3:Apply FunctionId= "urn:oasis:names:tc:xacml:1.0:function:any-of" > <xacml3:Function FunctionId= "urn :oasis:names:tc:xacml:1.0:function:dateTime-greater-than" /> <xacml3:Apply FunctionId= "urn:oasis:names:tc:xacml:3.0:function:dateTime-add-dayTimeDuration" > < xacml3:Apply FunctionId= "urn:oasis:names:tc:xacml:1.0:function:dateTime-one-and-only" > <xacml3:AttributeDesignator Category= "urn:oasis:names:tc:xacml:1.0:subject- categorie:access-subject" AttributeId= "com.acme.user.lastLogin" DataType= "http://www.w3.org/2001/XMLSchema#dateTime" MustBePresent= "false" /> </xacml3:Apply> < xacml3:AttributeValue DataType= "http://www.w3.org/2001/XMLSchema#dayTimeDuration" > P30D </xacml3:AttributeValue> </xacml3:Apply> <xacml3:Attribute Categoria de desemnare = "urn:oasis:names:tc:xacml:3.0:attribute-category:environment" AttributeId= "urn:oasis:names:tc:xacml:1.0:environment:current-dateTime" DataType= "http:// www.w3.org/2001/XMLSchema#dateTime" MustBePresent= "false" /> </xacml3:Apply> </xacml3:Condition> </xacml3:Rule>Această regulă acordă subiectului acces la resursă dacă ora curentă este între 9:00 AM și 5:00 PM.
<xacml3:Rule RuleId= "c01d7519-be21-4985-88d8-10941f44590a" Effect= "Permis" > <xacml3:Description> Permiteți timp între 9 și 5 </xacml3:Description> <xacml3:Target> <xacml3:Ocml3:Any > <xacml3:AllOf> <xacml3:Match MatchId= "urn:oasis:names:tc:xacml:1.0:function:time-greater-than" > <xacml3:AttributeValue DataType= "http://www.w3.org /2001/XMLSchema#time" > 09:00:00 </xacml3:AttributeValue> <xacml3:AttributeDesignator Category= "urn:oasis:names:tc:xacml:3.0:attribute-category:environment" AttributeId= "urn:oasis :names:tc:xacml:1.0:environment:current-time" MustBePresent= "false" DataType= "http://www.w3.org/2001/XMLSchema#time" /> </xacml3:Match> </xacml3 :AllOf> </xacml3:AnyOf> <xacml3:AnyOf> <xacml3:AllOf> <xacml3:Match MatchId= „urn:oasis:names:tc:xacml:1.0:function:time-less-than” > <xacml3: AttributeValue DataType= "http://www.w3.org/2001/XMLSchema#time" > 17:00:00 </xacml3:AttributeValue> <xacml3:AttributeDesignator Category= "urn:oasis:names:tc:xacml:3.0 :attribute-category:mediu " AttributeId= "urn:oasis:names:tc:xacml:1.0:environment:current-time" MustBePresent= "false" DataType= "http://www.w3.org/2001/XMLSchema#time" /> </ xacml3:Match> </xacml3:AllOf> </xacml3:AnyOf> </xacml3:Target> </xacml3:Rule>
Solicitare: Alice vrea să vadă documentul #123.
<xacml-ctx:Request ReturnPolicyIdList= "true" CombinedDecision= "false" xmlns:xacml-ctx= "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" > <xacml-ctx:Attributes Category= "urn:oasis:names:tc:xacml:3.0:attribute-category:action" > <xacml-ctx:Attribute AttributeId= "actionId" IncludeInResult= "true" > <xacml-ctx:AttributeValue DataType= "http: //www.w3.org/2001/XMLSchema#string" > vizualizați </xacml-ctx:AttributeValue> </xacml-ctx:Attribute> </xacml-ctx:Attributes> <xacml-ctx:Attributes Category= "urn :oasis:names:tc:xacml:3.0:attribute-category:resource" > <xacml-ctx:Attribute AttributeId= "resource-id" IncludeInResult= "true" > <xacml-ctx:AttributeValue DataType= "http:// www.w3.org/2001/XMLSchema#string" > doc#123 </xacml-ctx:AttributeValue> </xacml-ctx:Attribute> </xacml-ctx:Attributes> <xacml-ctx:Attributes Category= "urn :oasis:names:tc:xacml:1.0:subject-category:access-subject" > <xacml-ctx:Attribute AttributeId= "user.identifier" IncludeInResult= "true" > <xacml-ctx:AttributeValue DataTyp e= "http://www.w3.org/2001/XMLSchema#string" > Alice </xacml-ctx:AttributeValue> </xacml-ctx:Attribute> </xacml-ctx:Attributes> </xacml-ctx :Solicitare>Primul element <Attributes>conține atributele acțiunii (citește), al doilea element <Attributes>conține atributele resursei căreia subiectul dorește să aplice acțiunea specificată (documentul #123), al treilea element <Attributes>conține numele subiectului (Alice) .
Răspuns: Nu se aplică
<xacml-ctx:Response xmlns:xacml-ctx= "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" > <xacml-ctx:Result> <xacml-ctx:Decision> Nu se aplică < /xacml-ctx:Decizie> <xacml-ctx:Status> <xacml-ctx:StatusCode Value= "urn:oasis:names:tc:xacml:1.0:status:ok" /> </xacml-ctx:Status> < /xacml-ctx:Result> </xacml-ctx:Response>Elementul <Decision>conține rezultatul evaluării politicii (nu este cazul).
Un exemplu de răspuns XACML cu un angajamentRăspuns: Permite, commit cu indexul „logAccess” (acces în jurnal)
<xacml-ctx:Response xmlns:xacml-ctx= "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" > <xacml-ctx:Result> <xacml-ctx:Decision> Permis < /xacml-ctx:Decizie> <xacml-ctx:Status> <xacml-ctx:StatusCode Value= "urn:oasis:names:tc:xacml:1.0:status:ok" /> </xacml-ctx:Status> < xacml-ctx:Obligations> <xacml-ctx:Obligation ObligationId= "logAccess" > </xacml-ctx:Obligation> </xacml-ctx:Obligations> <xacml-ctx:PolicyIdentifierList> <xacml-ctx:PolicyIdReference Version= " 1.0" > http://www.axiomatics.com/automatic-unique-id/18a9eae9-c92b-4087-b2ac-c5a33d7ff477 </xacml-ctx:PolicyIdReference> </xacml-ctx:PolicyIdentifierList-x:</xacml-ctx:PolicyIdReference> </xacml-ctx:PolicyIdentifierList-x: Rezultat> </xacml-ctx:Response>Elementul <Decision>conține rezultatul evaluării politicii (activare). Elementul <Obligations>conține obligațiile de aplicat. În acest caz, <Obligations>conține un element <Obligation>cu identificatorul „logAccess” (acces în jurnal).
Nume | Versiune
XACML |
Tehnologie | Licență |
---|---|---|---|
AuthzForce (OW2) [4] / ( GitHub ) | XACML 3.0 | Java | GPL |
Balana [5] | XACML 3.0, 2.0, 1.1 și 1.0 | Java | Apache 2.0 |
ndg-xacml [6] | XACML 2.0 | Piton | BSD |
AT&T XACML [7] | XACML 3.0 | Java | MIT |
Oracle Entitlements Server [8] | XACML 3.0 | Java , .NET | Proprietate |
Instrument pentru politici de securitate [9] | XACML 3.0, 2.0 | Java | Proprietate |
Consorțiul World Wide Web (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Produse și standarde |
| ||||||||||||||
Organizații |
| ||||||||||||||
PE |
| ||||||||||||||
Conferințe |
|
OASIS | standardele|
---|---|