Les établissements de santé pourraient bientôt bénéficier d’une approche unifiée pour la gestion des accès aux données, combinant la flexibilité du standard FHIR et la robustesse du contrôle d’accès basé sur les attributs (ABAC) via le langage XACML. Cette stratégie vise à sécuriser un large éventail d’informations, des dossiers patients aux images médicales, tout en respectant les préférences individuelles des patients.
Au cœur de ce système se trouve XACML, un standard permettant de définir des politiques d’accès précises en fonction de multiples critères, tels que le rôle de l’utilisateur, le type de ressource et le contexte de la demande. L’organisation qui met en œuvre cette approche utilise déjà XACML pour gérer l’accès aux données des ressources humaines et aux informations médicales. Les politiques XACML sont exprimées en documents XML qui déterminent si l’accès est autorisé ou refusé.
L’arrivée du standard FHIR pour le consentement du patient nécessite une adaptation. FHIR, dans ce contexte, ne vise pas à redéfinir les règles d’accès, mais plutôt à servir de pont entre l’identité du patient dans FHIR et son identifiant correspondant dans XACML. En d’autres termes, FHIR enregistre le consentement, tandis que XACML applique les règles.
Prenons l’exemple d’un patient qui accepte le partage de ses données cliniques habituelles, mais refuse l’accès externe à des informations sensibles. Dans FHIR, ce consentement serait enregistré comme un ensemble de dispositions. Cependant, les règles concrètes qui traduisent ce consentement en actions sont déjà définies et calculables en XACML.
Un élément clé de cette architecture est la “politique de substitution XACML”. Il s’agit d’un ensemble de règles générales qui s’appliquent à toutes les ressources FHIR, en complément des politiques de consentement spécifiques à chaque patient. Cette politique garantit le respect des exigences organisationnelles et réglementaires de manière uniforme. Par exemple, une règle pourrait autoriser l’accès aux données en cas d’urgence médicale, quel que soit le niveau de sensibilité des informations.
Un exemple concret de cette politique de substitution est illustré par le code suivant :
<Policy PolicyId="Org_Policy_7890_Workflow_Governance"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides"
xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<Description>
Gouvernance organisationnelle : applique les rôles de flux de travail et le statut clinique.
Cette politique remplace les autorisations au niveau du sujet.
Description>
<Target/>
<Rule RuleId="Emergency_Access_Permit" Effect="Permit">
<Description>Autorise les médecins à accéder aux données quel que soit le marquage en cas d'événement mettant la vie en danger.</Description>
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">EmergencyAttributeValue</AttributeValue>
<AttributeDesignator
AttributeId="urn:example:names:clinical:access-context"
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="true"/>
Apply>
Condition>
Rule>
<Rule RuleId="Deny_Archived_Data_Access" Effect="Deny">
<Description>Interdit strictement l'accès si le dossier est archivé, remplaçant les autorisations de l'utilisateur.</Description>
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ArchivedAttributeValue</AttributeValue>
<AttributeDesignator
AttributeId="urn:example:names:resource:status"
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="true"/>
Match>
AllOf>
AnyOf>
Target>
Rule>
<Rule RuleId="Deny_Non_Clinical_Staff_Restricted" Effect="Deny">
<Description>Interdit au personnel administratif de consulter les données marquées comme « Restreintes » (R).</Description>
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">AdministrativeAttributeValue</AttributeValue>
<AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:2.0:subject:role" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
Apply>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">RAttributeValue</AttributeValue>
<AttributeDesignator AttributeId="urn:example:med:names:resource:data-tag" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
Apply>
Apply>
Condition>
Rule>
Policy>
De même, la politique de consentement spécifique à un patient, comme illustré ci-dessous, définit les règles d’accès pour cet individu en particulier :
<PolicySet xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
PolicySetId="consent-policy-set-12345"
Version="1.0"
PolicyCombiningAlgId="urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:deny-overrides">
<Description>Ensemble de politiques de consentement pour l'ID patient 12345</Description>
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">12345AttributeValue</AttributeValue>
<AttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"
Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="true"/>
Match>
AllOf>
AnyOf>
Target>
<Policy PolicyId="consent-policy-12345-normal-data"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:permit-overrides">
<Description>Politique autorisant le partage des données Normales (N)</Description>
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NormalAttributeValue</AttributeValue>
<AttributeDesignator AttributeId="data-sensitivity"
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="true"/>
Match>
AllOf>
AnyOf>
Target>
<Rule RuleId="permit-normal-data" Effect="Permit">
<Description>Autoriser l'accès aux données Normales</Description>
Rule>
Policy>
<Policy PolicyId="consent-policy-12345-restricted-data"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:deny-overrides">
<Description>Politique interdisant le partage des données Restreintes (R)</Description>
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">RestrictedAttributeValue</AttributeValue>
<AttributeDesignator AttributeId="data-sensitivity"
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="true"/>
Match>
AllOf>
AnyOf>
Target>
<Rule RuleId="deny-restricted-data" Effect="Deny">
<Description>Interdire l'accès aux données Restreintes</Description>
Rule>
Policy>
PolicySet>
Cette approche combinée permet de garantir un contrôle d’accès à la fois flexible et sécurisé, tout en respectant les préférences individuelles des patients et les exigences réglementaires.
Pour aller plus loin
