ALFA (XACML) - ALFA (XACML)

ALFA
ParadigmaDeklarativní programování
NavrhlPablo Giambiagi
VývojářAxiomatika
Poprvé se objevil16. července 2012; před 8 lety (2012-07-16)[1]
Přípony názvu souboru.alfa
webová stránkaodkaz
Hlavní, důležitý implementace
Axiomatika
Ovlivněno
XML, XACML

ALFA, zkrácený jazyk pro autorizaci, je a pseudo kód jazyk používaný při formulaci zásad řízení přístupu.[2][3]

Dějiny

Původ

XACML, eXtensible Access Control Markup Language, používá XML jako svůj hlavní kódovací jazyk. Vývojáři se vždy snažili psát XML, a proto byla nutná nová, lehčí notace. Výzkumník společnosti Axiomatics, Pablo Giambiagi, proto navrhl ALFA, jazyk pro autorizaci Axiomatics.

ALFA mapuje přímo do XACML. ALFA obsahuje to samé konstrukční prvky jako XACML, tj. PolicySet, Policy a Rule.

Axiomatics daroval ALFA OASIS

V březnu 2014 společnost Axiomatics oznámila, že darovala ALFA společnosti OÁZA Technická komise XACML[4] za účelem prosazení jeho standardizace.

ALFA byla následně přejmenována na Zkrácený jazyk pro autorizaci a podána žádost o standardizaci. Jeho aktuální verze je přístupná tady.

Ukázkové případy použití

  • Lékařské použití: lékaři si mohou prohlédnout lékařské záznamy pacientů, s nimiž mají vztah.
  • Případ finančního použití: zaměstnanci v Singapuru si mohou prohlédnout zákaznické účty zaměstnanců se sídlem v Singapuru.
  • Případ použití pojištění: pojišťovací agent může schválit nárok uživatele, pokud je nárok ve stejné oblasti jako agent a pokud je částka nároku menší než částka schválení agenta.

Slova lékař, pohled, lékařský záznam, Singapur ... jsou všechny příklady hodnot atributů. Atributy tvoří stavební kameny zásad v ABAC a následně v ALFA.

Struktura

Stejně jako XACML má ALFA tři strukturální prvky:

  • Sada zásad
  • Politika
  • Pravidlo

Stejně jako v XACML může PolicySet obsahovat prvky PolicySet a Policy. Zásady mohou obsahovat prvky pravidla. Pravidlo obsahuje rozhodnutí (buď Povolit, nebo Odepřít). Kromě toho je v ALFA možné přidat prvky Rule do PolicySet a Policy elements. Elementy PolicySet, Policy a Rule lze vnořit nebo na ně odkazovat.

Aby bylo možné vyřešit konflikty mezi sourozenci, používá ALFA (stejně jako XACML) kombinující algoritmy. Existuje několik kombinačních algoritmů, které lze použít. Jejich chování je definováno v tomto pravdivostní tabulka

Typy dat

ALFA podporuje všechny typy dat které jsou definovány v OASIS XACML Specifikace jádra. Některé datové typy, např. numerická (celé číslo, dvojitá) a booleovská mapa přímo z ALFA do XACML. Ostatní je třeba převést, například atributy data nebo času. Chcete-li převést atribut na příslušný datový typ, použijte zápis „hodnota“: datový typ. Níže jsou uvedeny příklady

Nativní hodnoty atributů mapované přímo z ALFA do XACML

Řetězec, celé číslo, dvojitá a booleovská celá mapa přímo z ALFA do XACML. Nepotřebují konverzi

Zásady ALFA využívající booleovské atributy

namespace exampleBoolean {policy article {target clause userRole == "editor" and actionId == "edit" and itemType == "article" apply firstApplicable rule publishedArticles {target clause published == true permit}}}

Hodnoty atributů, které vyžadují explicitní převod

Následující datové typy atributů vyžadují explicitní převod:

Příklad: Zásady ALFA pomocí anyURI

V této zásadě převádíme hodnotu řetězce na anyURI.

	atribut userBlacklistedResources{		kategorie = předmět Kočka		id = „userBlacklistedResources“		typ = tětiva	}
	pravidlo allowProfileAccess{cílová klauzule url == "http: // :  / profil /": anyURIpovolení	}

Ukázkové zásady

Jednoduché zásady a pravidlo s podmínkou

Následující příklad ALFA představuje zásadu XACML, která obsahuje jediné pravidlo. Tato politika i pravidlo mají cíl. Pravidlo má také podmínku, která se používá k porovnání 2 atributů společně k provedení kontroly vztahu (ID uživatele se musí rovnat vlastníkovi). Kdykoli potřebujete zkontrolovat 2 atributy společně, musíte použít podmínku.

příklad oboru názvů {článek článku {cílová klauzule itemType == "článek" použít nejprveApplicable pravidlo editArticle {cílová klauzule actionId == "upravit" a userRole == "editor" podmínka povolení userId == vlastník}}}

Použití času v zásadě XACML napsané v ALFA

namespace exampleTime {policy checkTimeAccess {apply firstApplicable rule checkNightAccess {target clause role == "supervizor" a document == "medicalrecord" podmínka timeInRange (timeOneAndOnly (currentTime), "22:00:00": time, "06:00:00 ": time) permit}}}

Odkazy na zásady v ALFA

ALFA může používat odkazy na zásady (sady). Ve skutečnosti se implicitně používají při provádění následujících kroků.

namespace com.axiomatics {example namespace {/ ** * Zásady týkající se toho, co mohou manažeři dělat. Je propojen se sadou zásad * dokumentů. * / manažeři zásad {cílová klauzule role == "manažer" platí nejprveApplicable rule allowSameDepartment {podmínka user.department == document.department permit}}} / ** * Hlavní zásady. Odkazuje na zásady pro správce * / policyset documents {target clause resourceType == "document" apply firstApplicable // Následuje příklad odkazu na zásadu.managers}}

Povinnosti a rady v ALFA

Povinnosti a rady jsou prohlášení v XACML, která lze vedle rozhodnutí vrátit z PDP do PEP (Povolit, Odepřít ...). Povinnosti a rady jsou spouštěny buď u povolení, nebo odepření.

příklad oboru názvů {import atributů. * advice notify = "example.notify" policy readDocuments {target clause actionId == "read" and objectType == "document" apply firstApplicable / ** * Toto pravidlo odepře přístup, pokud čas není mezi 9 a 5 * / pravidlo denyOutsideHours {target clause currentTime <"09:00:00": time or currentTime> "17:00:00": time deny on deny {advice notify {acme.obligations.message = "Nemáte přístup k tomuto služba mimo úřední hodiny "}}} / ** * Toto pravidlo poskytuje správcům přístup * / rule allowManagers {target clause acme.user.role ==" manager "permit} / ** * Toto pravidlo zachytí vše, na co by mohlo spadnout tento bod * / pravidlo failedafeDeny {odepřít odepřít {rada upozornit {acme.ob ligations.message = "Váš požadavek neodpovídal zásadám. Prosím zkuste to znovu"                }            }        }    } }

Rozbijte scénář autorizace skla

Začněme definováním atributů a povinností, které budeme používat.

jmenný prostor com.axiomatics.examples {import atributů. * povinnost breakTheGlass = "com.axiomatics.examples.breakTheGlass" povinnost auditLog = "com.axiomatics.examples.auditLog" uživatel jmenného prostoru {role atributu {category = subjectCat id = "com.axiomatics .examples.user.role "type = string} identifikátor atributu {category = subjectCat id =" com.axiomatics.examples.user.identifier "type = string}} jmenný prostor pacient {atribut assignedDoctor {category = resourceCat id =" com.axiomatics .examples.user.assignedDoctor "type = string}} záznam oboru názvů {identifikátor atributu {category = resourceCat id =" com.axiomatics.examples.record.identifier "type = string}} atribut actionId {category = actionCat id =" com. axiomatics.examples.actionId "type = string} atribut objectType {category = resourceCat id =" com.axiomatics.examples.objectType "type = string} atribut isEmergency {category = environmentCat id =" com.axiomatics.examples.isEmergency " type = boolean} zpráva atributu {category = environmentCat id = "com.axiomatics.examples.message" type = string}

Nyní můžeme definovat zásadu pomocí 3 pravidel:

  • první pravidlo je pro normální přístup (lékaři si mohou prohlížet záznamy pacientů, kterým jsou přiřazeni.
  • druhé pravidlo je pro speciální přístup, protože sklo bylo rozbité.
  • třetí pravidlo je pravidlo, které spouští povinnost říkat uživateli, jak rozbít sklo.
/ ** * Řízení přístupu k lékařským záznamům * / policy accessMedicalRecord {target clause actionId == "view" a objectType == "medical record" apply firstApplicable / ** * Lékaři mohou prohlížet lékařské záznamy pacientů, kterým jsou přiřazeni * / pravidlo allowRegularAccess {target clause user.role == "doctor" condition patient.assignedDoctor == user.identifier permit} / ** * Lékaři mohou zobrazit jakýkoli zdravotní důvod v případě nouze * / pravidlo allowBreakTheGlassAccess {cílová klauzule isEmergency == true povolení k povolení {povinnost auditLog {zpráva = "Lékař získal přístup k lékařskému záznamu rozbitím skla" user.identifier = user.identifier record.identifier = record.identifier currentDateTime = currentDateTime}}} / ** * Odepřít další přístupy. Pokud je přístup obvykle odepřen, řekněte lékařům, jak * mohou získat přístup „rozbitím skla“. * / pravidlo denyAccess {odepřít při odepření {povinnost breakTheGlass {message = "Nemáte přístup k tomuto lékařskému záznamu. Chcete-li získat přístup, nastavte příznak isEmergency na hodnotu true." record.identifier = record.identifier currentDateTime = currentDateTime}}}}}

Časově jemná pravidla jemného povolení

Následuje příklad zásady ABAC implementované pomocí ALFA. Jako atributy používá čas. Používá podmínku XACML k porovnání atributu currentTime s hodnotou představující 17:00 (vyjádřeno v 24hodinovém čase). Všimněte si použití: time pro převod hodnoty String na správný datový typ.

pravidlo allowAfter5pm{		povolenípodmínka currentTime> "17:00:00": čas}

Zásady HL7

Případy užití

HL7 definuje řadu lékařských kontrol přístupu případy užití které lze snadno definovat v ALFA.

Ukázkové zásady ALFA pro HL7

Řízení přístupu podle kategorie akce

Plugin ALFA pro Eclipse

ALFA Plugin pro Eclipse je nástroj, který převádí vaše programovací IDE Eclipse na vyhrazený editor zásad autorizace pomocí syntaxe ALFA. Zásady ALFA lze poté snadno převést na skutečné XACML Zásady 3.0 a načteny do vašeho nástroje pro správu zásad XACML.[5]

Reference

  1. ^ Gebel, Gerry (16. července 2012). „Axiomatics vydává bezplatný plugin pro IDE Eclipse pro tvorbu zásad XACML3.0“. Axiomatika. Citováno 31. května 2017.
  2. ^ "'alfa 'tag wiki ".
  3. ^ „Zjednodušení XACML - plugin Axiomatics ALFA pro Eclipse IDE“. KuppingerCole. Citováno 2017-02-10.
  4. ^ https://www.linkedin.com/grp/post/3934718-5851696088934801412
  5. ^ „Jak mohu použít odkazy na zásady v ALFA?“. 2016-10-10.

Externí reference

Evropští analytici hovoří o ALFA

Rozhraní pro generování zásad na základě šablon pro webové služby RESTful