בדף הזה מוסבר איך להשתמש במערכת בקרת הגישה של Cloud Healthcare API FHIR כדי לנהל ולאבטח את נתוני הבריאות. אתם יכולים להשתמש בבקרת גישה ל-FHIR כדי להגדיר מדיניות הסכמה, לשלוט בגישה לנתונים על סמך תפקידים והקשר של המשתמשים ולאכוף את המדיניות הזו במאגר FHIR.
סקירה כללית על מודל הנתונים
מודל הנתונים לבקרת גישה מיוצג על ידי משאבי הסכמה. הם מגדירים את הכללים שחלים ואת הנתונים שהכללים חלים עליהם.
FHIR Consent
כללי הגישה מבוטאים באמצעות משאבי FHIR Consent. FHIR Consent הוא סוג של FHIR Resource שמתעד את הבחירות של צרכני שירותי בריאות. היא מאפשרת או אוסרת על קבוצה של גורמים לבצע פעולות שמשפיעות על הצרכן למען מטרה ספציפית מסביבה מוגדרת למשך תקופה מסוימת. לדוגמה, צרכן יכול להיות מטופל במערכת הבריאות, כל אדם שפועל בשם מטופל במערכת הבריאות או אדם אחר שחותם על הסכם הסכמה.
הפעולות שמתועדות בהסכמה בפורמט FHIR עשויות להיות רחבות ולהתייחס ליותר מנתוני סיכום מצב בריאותי אלקטרוני (EHR) של הצרכן. עם זאת, לצורך הסכמה ב-Cloud Healthcare API, הדגש הוא על פעולות שקשורות לגישה לנתונים, והאכיפה של הפעולות האלה מוגבלת לקריאת נתוני FHIR ממאגר FHIR.
למשאב Consent יש סטטוס שמציין את המצב הנוכחי של ההסכמה. למרות שמאגר FHIR יכול להכיל הרבה הסכמות במצבים שונים, Cloud Healthcare API אוכף רק הסכמות שנמצאות במצב active. הסכמות בכל מצב אחר לא משפיעות על האכיפה. אם ההסכמה ניתנת בשם מטופל, היא מתועדת כהסכמה שניתנה על ידי מבצע.
סוג המדיניות
Cloud Healthcare API תומך בסוגי מדיניות ההסכמה הבאים:
הסכמת מטופל: משויכת למטופל באמצעות
Consent.patient(STU3, R4) ומאגדת כמה שיותר נתונים כפי שהוגדר על ידי תא המטופל (STU3, R4).מדיניות האדמין: לא משויכת לאף מטופל וחייבת לכלול כתובת URL של תוסף
https://g.co/fhir/medicalrecords/ConsentAdminPolicy. סוג המדיניות הזה יכול להיות קשור לקבוצת משנה או לכל המשאבים בחנות שצוינה בקריטריונים של משאבים. מדיניות האדמין מגדירה את מדיניות ברירת המחדל לכל המשאבים המקשרים בחנות.מדיניות אדמין מדורגת: סוג של מדיניות אדמין שנדרשת בה כתובת ה-URL של התוסף
https://g.co/fhir/medicalrecords/CascadingPolicyוכתובת ה-URL של תוסף מדיניות האדמין. אפשר לקשר את סוג המדיניות הזה לתא של משאבים שתואמים לקריטריונים של משאבים. יש לו את המגבלות הבאות:- תומך רק ב-Patient (STU3, R4) או ב-Encounter (STU3, R4) כבסיס לתא.
- מאגר ה-FHIR שבו המדיניות נאכפת צריך להיות מוגדר עם
disableReferentialIntegrityבערךfalse. כדי להשתמש בתכונה הזו במאגר FHIR ללא שלמות רפרנציאלית, צריך לפנות אל תמיכת Cloud.
אפשר לשלב בין סוגי מדיניות באותה רמת משאב כדי לאשר או לדחות גישה למשאב. אם חסר אישור של מטופל, מדיניות האדמין יכולה לאשר גישה למשאב.
הנחיה בנושא הסכמה
הוראות הסכמה הן הוראות שמקודדות בהסכמה בפורמט FHIR, שמאפשרות או דוחות גישה לנתונים לישות מורשית כמו מקבל מענק או בעל גישה. מסמך הסכמה אחד ב-FHIR יכול לקודד כמה הנחיות להסכמה. כל הוראה מספקת את הפרטים הבאים:
סוג האכיפה: הוראה מסוג
permitאוdeny.פעולה: ההרשאות שחלות על ההנחיה הזו. יש תמיכה רק ב-
accessכדי לספק גישה לקריאה בלבד.קריטריונים לגישה: קבוצה של מאפיינים שמזהים את מבקש ה-API שחל עליו כלל המדיניות.
קריטריונים של משאבים: קבוצה של מאפיינים שמזהים את המשאבים שההנחיה חלה עליהם.
קריטריונים של משתמשים עם גישה
Cloud Healthcare API תומך בשלושה מאפיינים של גורם ניגש לשימוש בהנחיית הסכמה ולהתאמה לגורם ניגש שמגיש בקשה לגישה לנתונים. כדי שההנחיה תיאכף על הפונקציה לקבלת גישה כחלק מהקביעה של הגישה שמוצעת על ידי שרת FHIR, צריך להיות התאמה מדויקת שרגישה לאותיות רישיות.
המאפיינים האלה מקודדים באופן הבא:
גורם מבצע: מייצג אדם, קבוצה או תפקיד גישה שמזהים את הגורם המקבל גישה או מאפיין שלו.
Purpose: מייצג את מטרת השימוש בנתונים.
סביבה: מזהה מופשט שמתאר את הסביבה או את התנאים שבהם מתבצעת הגישה.
לדוגמה, אפשר לייצג מאפיין גישה באמצעות המאפיינים הבאים:
משתמש:
Practitioner/123המטרה:
ETREATאו גישה למטרות טיפול חירוםסביבה:
Application/abc
בדוגמה הזו, המאפיינים האלה מייצגים רופא שניגש לנתונים בזמן שהוא מבצע טיפול חירום באמצעות אפליקציית תוכנה בשם abc.
provision.actor
ו-provision.purpose
מוגדרים כחלק מתקן FHIR, ואילו Environment הוא https://g.co/fhir/medicalrecords/Environment. שימו לב שלא ניתן לפתוח את הקישור הזה.
בכל הוראות ההסכמה צריך לציין actor לאכיפה, אבל לא תמיד צריך לציין purpose או environment. לדוגמה, אם לא מציינים environment בהנחיית ההסכמה, ההנחיה תתאים לכל environment שלא נכלל כבר בהנחיות הסכמה אחרות.
קריטריונים של משאבים
Cloud Healthcare API תומך ברכיבים הבאים כחלק ממקור המידע של ההסכמה:
סוג המשאב (STU3, R4): מייצג את הסוג שמדיניות ההסכמה קשורה אליו, לדוגמה,
Encounter,ObservationאוImmunization.Resource ID (מזהה משאב) (STU3, R4): המזהה שאליו משויכת מדיניות ההסכמה.
מקור נתונים: מייצג את המקור של המשאב כפי שמזוהה על ידי המשאב
meta.source(זמין רק ב-R4).תג נתונים: מייצג את התווית המותאמת אישית של המשאב, כפי שמתואר במשאב
meta.tag(STU3, R4).תווית אבטחה: מייצגת תוויות אבטחה שמגדירות את המשאבים המושפעים כפי שזוהו בשדה
meta.security(STU3, R4). יש תמיכה במערכות הקוד הבאות:סודיות: ערכים היררכיים שמדורגים מהערך הכי פחות מוגבל לערך הכי מוגבל:
U, L, M, N, R, V. אם ההסכמה מאפשרת תווית אבטחה ברמהR, היא חלה על כל המשאבים שסומנו בתוויתRאו ברמה נמוכה יותר. אם המשתמש לא הסכים לשימוש בנתונים עם תווית אבטחהR, ההגדרה הזו תחול על כל המשאבים שרמת הרגישות שלהם היא לפחות כמוR.ActCode: התאמה מדויקת של מחרוזת לקוד האבטחה.
גישה לרצף הפעולות

באיור הזה מוצג מסלול מלא של בקשה לחנות עם בקרת גישה ל-FHIR. אפליקציה (מס' 3) משתמשת באסימון חיצוני עם היקף הרשאות ההסכמה (מימין) כשהיא שולחת בקשה למאגר FHIR עם בקרת גישה מופעלת (משמאל).
היקף ההסכמה
כששולחים בקשת גישה לנתונים, המבקש פועל במסגרת היקף הסכמה מסוים שמייצג את המאפיינים actor, purpose ו-environment שקשורים לכל בקשת HTTP של FHIR. הערכים של המאפיינים האלה חייבים להיות זהים לאלה שצוינו בהסכמה, כולל אותיות רישיות, כדי שהם ישפיעו על קביעת הגישה לאכיפה.
לגורם שמבקש גישה יכולים להיות כמה מזהים actor שרלוונטיים לקביעת הגישה. באופן דומה, יכולים להיות כמה purposes או environments שרלוונטיים בהקשר מסוים של הסכמה. לכן, צריך לספק את כל מאפייני הגישה הרלוונטיים כחלק מבקשת FHIR HTTP כדי לייצג את הגישה הזו בצורה נכונה למטרות קבלת הסכמה.
לדוגמה, היקף ההסכמה לבקשת נתונים מסוימת יכול להיות:
actor/Practitioner/444 actor/Group/999 purp/v3/TREAT purp/v3/ETREAT env/App/abc
התג הזה מייצג אחות או רופא, שנקראים גם אנשי מקצוע רפואיים 444, שהם חברים בקבוצה 999 שמייצגת אנשי מקצוע רפואיים ממחלקה בבית חולים ספציפי. הרופא/ה המטפל/ת נמצא/ת שם כדי לספק טיפול רגיל, אבל יכול להיות שגם כדי לטפל במקרי חירום כחלק מהפעולות האלה. המומחה משתמש באפליקציית תוכנה שנקראת abc.
היקף ההסכמה מסופק כבקשה להיקף הסכמה כחלק מבקשת הנתונים של בעל הגישה.
בקשת היקף הרשאות להסכמה
בקשות FHIR משתמשות בכותרות של בקשות FHIR HTTP כדי לקבל את היקף ההסכמה של בעל הגישה. היקף ההסכמה הזה מכיל קבוצה של ערכים actor, purpose ו-environment שמשקפים את הזהות הנוכחית של המשתמש, את הכישורים שלו, את כוונת השימוש שלו ואת המגבלות הסביבתיות שחלות עליו.
יכול להיות שבכל רגע נתון יהיו יותר ממופע אחד של כל אחד מהמאפיינים האלה שמייצגים את היקף ההסכמה של המשתמש שקיבל גישה.
ההגדרות של היקף ההסכמה מוגדרות כך:
actor/{type}/{ID}: מאפייןactorשבו המשאבtypeמסופק יחד עםID. דוגמאות לtype:PractitionerGroupPatient
לדוגמה, אם חנות בפורמט
projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID/fhirStores/STORE_IDקוראת ל-API, הפניה מקומית לשחקןPractitioner/123הופכת ל-projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID/fhirStores/STORE_ID/fhir/Practitioner/123.
purp/v3/{value}: מאפייןpurposeשבוvalueהוא חבר בערכת הערכים FHIR Purpose of Use (v3) או בתוסף שלה. דוגמאות לvalue:TREATETREATHRESCH
env/{type}/{value}: מאפייןenvironmentשבוtypeו-valueהם מחרוזות מותאמות אישית ללא טקסונומיה מוגדרת מראש. דוגמאות לערכים שלtypeו-value:App/my_app_1Net/VPN
בנוסף, כותרות של בקשות HTTP ב-FHIR יכולות לקבל גם היקפי הרשאות מיוחדים, כמו btg ו-bypass, שמוגדרים באופן הבא:
-
btg: Break the glass (או BTG) מאפשר לכם, כמשתמשים אנושיים, לדלג על בדיקות ההסכמה במקרה חירום. השימוש בה מיועד למקרי חירום בלבד, והיא כפופה לבדיקה לאחר הביקורת. לכן,btgצריך לפחותactorאחד. -
bypass: מאפשר למשתמשים מהימנים (כמו אדמין) או לאפליקציות מהימנות (כמו צינור להדרכת ML) לפעול במאגר FHIR ללא אישור הסכמה. לכן,bypassצריך לפחותactorוגםenv.
אכיפת גישה וקביעת גישה
בסביבה מורכבת של שירותי בריאות שבה יש כמה מדיניות והסכמות, יכול להיות קשה לאכוף את הגישה ולקבוע את הרשאות הגישה. לבעלי עניין שונים יכולות להיות ציפיות ודרישות שונות לגבי השימוש במידע על מטופלים והחשיפה שלו. כדי להתמצא בסביבה המורכבת הזו, צריך להבין בבירור איך הגישה נאכפת ואת הלוגיקה הבסיסית שקובעת את הגישה.
מדיניות בנושא הסכמה מצטברת
לצרכן שירותי בריאות, כמו מטופל או אדמין, יכולות להיות כמה הנחיות הסכמה שכלולות במשאב הסכמה יחיד. יכול להיות שמשאבי ההסכמה יכילו שילוב של הנחיות permit ו-deny
provision.type. כברירת מחדל, למשתמש יכולים להיות כל מספר של משאבי הסכמה, אבל בכל פעם נאכפים עד 200 משאבי הסכמה מסוג active. פרטים נוספים זמינים במאמר אילוצים ומגבלות.
כל הוראות ההסכמה מחולצות מactive משאבי ההסכמה של משתמש מסוים כדי ליצור קבוצה של כללי הסכמה מצטברים.
מאפיינים של הוראות הסכמה
אפשר להגדיר אכיפת הסכמה לכל היותר למטרה אחת ולכל היותר לסביבה אחת לכל רשומה של הקצאת הרשאות.
הכללים הבאים מתארים את העקרונות לבקרת גישה משותפת של הסכמת המטופל, מדיניות האדמין ומדיניות האדמין המדורגת:
אם אין הנחיה תואמת, הגישה לכל המשאבים נחסמת כברירת מחדל.
אם המשאב המבוקש לא קיים, אפשר לזהות רק את סוג המשאב ואת מזהה המשאב. כל שאר הקריטריונים של המשאב ובעלי המשאב לא ידועים, ולכן הכלל הבא חל על סדר הצגת המשאבים:
אם סוג המשאב שייך ל-patient-compartment או ל-encounter-compartment: הגישה נדחית.
אחרת:
אם יש מדיניות אדמין שדוחה את קריטריוני הגישה בלי קשר לקריטריונים האחרים של המשאב, הגישה נדחית.
אם יש מדיניות אדמין שמתירה את קריטריוני הגישה לקריטריונים של משאב שניתן לזיהוי (כלומר, סוג המשאב ומזהה המשאב), מוחזרת שגיאה מסוג 'המשאב לא נמצא'.
בכל המקרים האחרים, הגישה נדחית.
מדיניות האדמין היא מדיניות ברירת המחדל שמשמשת להתאמת משאבים בחנות.
המשאבים שלא שייכים לאף מטופל נקבעים רק על ידי כללי המדיניות של האדמין.
למשאבים שנמצאים בתא המטופל (STU3, R4) או בתא המפגש (STU3, R4) צריך להיות לפחות אישור אחד להוראת הסכמה לכל מטופל או מדיניות אדמין או מדיניות אדמין מדורגת, ולא יכולה להיות הוראת הסכמה מסוג 'דחייה' מהמטופל וגם ממדיניות האדמין וגם ממדיניות האדמין המדורגת. התנאי הזה נדרש מכל המטופלים ששמותיהם מופיעים במשאבים שהמבקש רוצה לגשת אליהם.
- יכול להיות שחלק מהמשאבים יתמכו בכמה משתתפים שהם מטופלים. לדוגמה, Appointment מספק רשימה של participants, שיכולים להיות מטופלים. כל המטופלים שמופיעים במשאבים כאלה צריכים לאשר את הגישה למשתמש באמצעות הוראות הסכמה, אחרת המשאבים לא יוחזרו. אם למשאב יש הרשאה ממדיניות מדורגת של מפגש, שבה המפגש מפנה למטופל דרך השדה
subject(STU3, R4), אז המשאב נחשב כמאושר על ידי המטופל.
- יכול להיות שחלק מהמשאבים יתמכו בכמה משתתפים שהם מטופלים. לדוגמה, Appointment מספק רשימה של participants, שיכולים להיות מטופלים. כל המטופלים שמופיעים במשאבים כאלה צריכים לאשר את הגישה למשתמש באמצעות הוראות הסכמה, אחרת המשאבים לא יוחזרו. אם למשאב יש הרשאה ממדיניות מדורגת של מפגש, שבה המפגש מפנה למטופל דרך השדה
הקוד המדומה הבא מסכם את הכללים שמתוארים למעלה:
בקרת גישה משותפת
ifresourcedoes not exist ifresourceis a patient-compartment or encounter-compartment resource: return "deny" else: if there is any admin policy denies access foraccessor criteriaregardless ofresource criteriaother than resource type and resource ID: return "deny" else if there is any admin policy permits access foraccessor criteriabased on the identifiableresource criteria: return "resource not found" else: return "deny" else: letpatients= list of patient references named in the patient compartment eligible fields of the requestedresourceif there is any matching deny from eitherpatients's consents or admin policy or admin cascading policy: return "deny" if there is matching admin policy permits access: return "permit" if allpatientshave matching patient consents or admin cascading consent that permit access or are subject of encounters which permit the access through encounter cascading policy: return "permit" else: return "deny" end
מאגר FHIR בודק את הרשאת ההסכמה ברמת כל משאב. כל הפניה במשאב לא מפוענחת ולא מועברת לבדיקת גישה לצורך קבלת הסכמה.
לדוגמה, נניח שיש מטופל שמזוהה על ידי Patient/f001 שמאפשר לרופא גישה לכל משאב MedicationRequest שלו, אבל לא למשאב Patient/f001 עצמו בגלל פרטיות המטופל. בתרחיש הזה, איש המקצוע יכול לראות את כל המשאב MedicationRequest, כולל השדה subject שמתייחס למשאב Patient/f001, אבל הוא לא יכול לראות את התוכן של המשאב Patient/f001, גם אם הוא מבצע חיפוש FHIR באמצעות _include.
פתרון התנגשויות
יכולות להיות התנגשויות בין הנחיות שונות של permit ו-deny. אם שתי הנחיות סותרות תואמות למשאב, הסתירה נפתרת באמצעות המודל deny עדיף על permit.
רק הסכמות מסוג active נכללות באכיפת ההסכמה.
לוגיקה לאכיפת גישה למשאבים
כששולחים בקשה ל-FHIR store עם תמיכה מובנית בסטטוס הסכמה, בקרת הגישה מתבצעת בסדר הבא:
Cloud Healthcare API בודק את ההרשאות ב Google Cloud חשבון השירות (או בפרינציפל) שהוגדר בפרוקסי. אם לחשבון השירות יש את הרשאות ה-IAM הנכונות לביצוע ה-method המבוקש של FHIR במאגר FHIR, הבקשה תאושר.
אם אכיפת ההסכמה מופעלת בהגדרות של מאגר FHIR וכותרות ה-HTTP עם תמיכה מובנית בסטטוס הסכמה קיימות, אז Cloud Healthcare API אוכף מדיניות גישה להסכמה למשאבי Patient Compartment. האכיפה של מדיניות הגישה להסכמה מבוססת על היקפי ההסכמה שצוינו בבקשה, בהתאם להנחיות ההסכמה שנרשמו בביצוע האחרון של
ApplyConsentsושלApplyAdminConsents.
הכללים הבאים חלים כששולחים בקשה ל-FHIR Store עם תמיכה מובנית בסטטוס הסכמה:
צריך לציין לפחות
actorהיקף הרשאות שרלוונטי לפעולות שבוצעו בהסכמה.כאן אפשר לציין היקפי הרשאות נוספים של
purposeושלenvironmentשרלוונטיים לפעולות שבוצעו בהסכמה.אם מספר הרשומות של היקף ההסכמה חורג מהמגבלות הנתמכות, מוחזרת שגיאה.
אם קוראים לשיטה שמקבלת גישה למספר משאבים (לדוגמה, השיטה
fhir.Patient-everything,fhir.Encounter-everything,fhir.executeBundleאוfhir.search), אכיפת ההסכמה חלה על כל משאב בנפרד. עם זאת, יש הבדל קטן בין שיטות הגישה האלה למספר משאבים:fhir.executeBundleקריאת כמה משאבים מקבלת את השגיאה Consent access denied or the resource being accessed does not exist (הגישה נדחתה או שהמשאב שאליו מנסים לגשת לא קיים) למשאב בודד ללא הרשאות הסכמה (ראו דוגמאות במאמר קבלת משאבי FHIR עם היקף הסכמה).
fhir.searchמדלג על משאבים ללא הרשאות הסכמה ולא מחזיר שגיאה על דחיית גישה להסכמה, גם כשמבצעים חיפוש לפי_id(ראו דוגמאות במאמר חיפוש משאבי FHIR עם היקף הרשאות הסכמה).הפרמטרים
fhir.Patient-everythingו-fhir.Encounter-everythingפועלים באופן דומה לפרמטרfhir.search, אלא שהם מחזירים את השגיאה Consent access denied or the resource being accessed does not exist (הגישה בהסכמה נדחתה או שהמשאב שאליו מתבצעת הגישה לא קיים) אם למתקשר אין הרשאת הסכמה למשאב המטופל או למפגש המבוקש, בהתאמה.
קביעת גישה בהסכמה
לכל היותר יש בהנחיית הסכמה actor אחד, purpose אחד ו-environment אחד, בעוד שלכל היותר יש בהיקף ההסכמה כמה מכל אחד מהם. חלק מההנחיות בנושא הסכמה לא מציינות את כל שלושת מאפייני הגישה, ובמקרה כזה יכול להיות שערך של מאפיין היקף ההסכמה יתאים בהתאם לכללי פתרון הקונפליקטים. כתוצאה מכך, יכול להיות שטווח ההסכמה יתאים ליותר מהנחיית הסכמה אחת.
אם היקף ההסכמה של בקשה כולל שתי רשומות או יותר מאותו סוג של היקף הסכמה (actor, purpose או environment), יכול להיות שהיקף ההסכמה תואם לכמה הנחיות הסכמה. חלק מההנחיות לבקשת הסכמה לא מציינות purpose או environment. לכן, היקף ההסכמה צריך להתאים גם להנחיות בנושא הסכמה שלא מציינות את סוגי ההיקף האלה.
לדוגמה, הגדרת היקף ההסכמה ל-actor/Practitioner/123
actor/Group/999 purp/v3/TREAT env/App/abc תואמת לכל אחת מההנחיות הבאות להסכמה: permit או deny:
actor/Practitioner/123 purp/v3/TREAT env/App/abcactor/Practitioner/123 purp/v3/TREATactor/Practitioner/123 env/App/abcactor/Practitioner/123actor/Group/999 purp/v3/TREAT env/App/abcactor/Group/999 purp/v3/TREATactor/Group/999 env/App/abcactor/Group/999