XACML

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 9 decembrie 2014; verificările necesită 10 modificări .

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.

Istorie

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] .

Model de limbă

Componentele principale ale unui model de limbă sunt o regulă, o politică și un set de politici.

Regula

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ă.

Politică

Folosit pentru a combina reguli.

Componentele principale ale politicii:

  • Ţintă
  • Algoritmul de combinare a regulilor
  • Set de reguli
  • Angajament
  • Recomandare

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.

Set de politici

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:

  • Ţintă
  • Algoritmul de îmbinare a politicilor
  • Set de politici
  • Angajament
  • Recomandare

Model de autorizare

Componentele principale ale modelului

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.

Procesul de autorizare [3]

  1. PAP transmite politici și seturi de politici către PDP .
  2. Utilizatorul trimite o cerere de autorizare către PEP .
  3. PEP trimite cererea către handler de context.
  4. Managerul de context creează o solicitare în format XACML.
  5. PDP solicită atribute suplimentare de la handlerul de context .
  6. Managerul de context solicită atribute de la PIP .
  7. PIP primește atributele necesare.
  8. PIP returnează atributele solicitate managerului de context .
  9. Managerul de context trimite atributele PDP solicitate . PDP calculează politicile.
  10. PDP returnează răspunsul la handler-ul de context .
  11. Managerul de context traduce răspunsul din formatul XACML în formatul nativ de răspuns PEP .
  12. (Neprezentat) Pe baza rezultatului evaluării politicii primite din răspuns, PEP ia o decizie de acces și își îndeplinește obligațiile. Dacă accesul este permis, PEP -ul permite accesul la resursă, în caz contrar îl refuză.

Exemple de politici

Autorizare XACML datetime

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>

Autorizare bazată pe timp în XACML

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>


Exemple de solicitări și răspunsuri XACML

Solicitare XACML

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 XACML

Exemplu de răspuns XACML

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 angajament

Ră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).

Implementări XACML

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

Literatură

  • Gertz, M. și Jajodia, S. 4.2 HACML // Manual de securitate a bazelor de date: aplicații și tendințe. - Springer, 2007. - 591 p. — ISBN 9780387485331 .
  • Bertino, E. și Martino, L. și Paci, F. și Squicciarini, A. Securitate pentru servicii web și arhitecturi orientate pe servicii. - Springer, 2009. - P. 67-75, 170. - 230 p. — ISBN 9783540877424 .


Link -uri

  1. OASIS eXtensible Access Control Markup Language (XACML) TC | OAZĂ . www.oasis-open.org. Preluat la 4 decembrie 2019. Arhivat din original la 29 decembrie 2019.
  2. eXtensible Access Control Markup Language (XACML) V3.0 aprobat ca OA . lists.oasis-open.org. Data accesării: 4 decembrie 2019. Arhivat din original pe 4 decembrie 2019.
  3. eXtensible Access Control Markup Language (XACML) Versiunea 3.0 . docs.oasis-open.org. Preluat la 11 decembrie 2019. Arhivat din original la 11 septembrie 2019.
  4. OW2 - Main - AuthZForce (Community Edition) . authzforce.ow2.org. Preluat la 14 decembrie 2019. Arhivat din original la 12 decembrie 2019.
  5. Contribuiți la dezvoltarea wso2/balana creând un cont pe GitHub . — 2019-12-12. Arhivat din original pe 8 decembrie 2020.
  6. Philip Kershaw. ndg-xacml: implementarea XACML 2.0 pentru NERC DataGrid .
  7. Implementarea AT&T a specificației OASIS XACML 3.0 . — 2021-09-04. Arhivat din original pe 4 septembrie 2021.
  8. Oracle Entitlements Server . www.oracle.com. Preluat la 14 decembrie 2019. Arhivat din original la 12 decembrie 2019.
  9. Instrumentul pentru politici de securitate - Un instrument pentru editarea, modelarea, testarea și verificarea politicilor de securitate pentru a preveni scurgerile de control al accesului . securitypolicytool.com. Preluat la 14 decembrie 2019. Arhivat din original la 12 decembrie 2019.

Link- uri externe