Visão geral do modelo de dados
O modelo de dados para controle de acesso é representado por recursos de consentimento. Eles definem as regras aplicáveis e a quais dados elas se aplicam.
Consentimento do FHIR
As regras de acesso são expressas por meio de recursos de consentimento de FHIR. O consentimento para FHIR é uma tipo de Recurso FHIR que captura as escolhas do consumidor de saúde. Ele permite ou nega um conjunto de atores para realizar ações que afetam o consumidor para um propósito específico de um ambiente especificado durante um período. Por exemplo, um consumidor ser um paciente de saúde, qualquer pessoa que atue em nome de um paciente de saúde, ou outro indivíduo que celebre um contrato de consentimento.
As ações registradas em um consentimento FHIR podem ser amplas e lidar com mais de apenas os dados do histórico de saúde eletrônico (EHR) do consumidor. No entanto, para o para fins de consentimento na API Cloud Healthcare, o foco são as ações relacionadas ao acesso aos dados, e a aplicação dessas ações é limitada para ler dados FHIR de um repositório FHIR.
O recurso de consentimento tem status que indica o estado atual do consentimento. Um repositório FHIR pode contêm muitos consentimentos em diferentes estados, a API Cloud Healthcare só aplica consentimentos que estão no estado ativo; Consentimentos em qualquer outro estado não afetam a aplicação das políticas. Se o consentimento for dado em nome de paciente, o consentimento será registrado como concedido por um executor.
Tipo de política
A API Cloud Healthcare oferece suporte aos seguintes tipos de política de consentimento:
Consentimento do paciente: associado a um paciente que usa
Consent.patient
. (STU3, R4). e vincula quantos dados forem definidos pelo compartimento do paciente. (STU3, R4).Política de administrador: não está associada a nenhum paciente e precisa ter um URL de extensão
https://g.co/fhir/medicalrecords/ConsentAdminPolicy
. Isso o tipo de política pode ser vinculado a um subconjunto ou a todos os recursos no armazenamento especificado pelos critérios de recursos. A política do administrador define o padrão política para todos os recursos de vinculação no armazenamento.Política de administração em cascata: um tipo de política do administrador que exige o o URL de extensão
https://g.co/fhir/medicalrecords/CascadingPolicy
e o URL da extensão da política de administrador. É possível vincular esse tipo de política a um compartimento de recursos que correspondem aos critérios de recurso. Tem o seguintes limitações:- Oferece suporte apenas para Paciente (STU3, R4) ou Encounter (STU3, R4) como base de compartimento.
- O armazenamento FHIR em que a política é aplicada precisa ter
disableReferentialIntegrity
definido comofalse
.
É possível combinar tipos de políticas no mesmo nível de recurso para permitir ou negar o acesso a um recurso. Se o consentimento de um paciente estiver ausente, a política de administrador poderá aprovar o acesso a um recurso.
Diretiva de consentimento
As diretivas de consentimento são instruções codificadas em um consentimento FHIR que Permitir ou negar o acesso a dados para uma entidade autorizada, como um beneficiário ou um accessor. Um único consentimento FHIR pode codificar várias diretivas de consentimento. Cada fornece o seguinte:
Tipo de aplicação: uma instrução
permit
oudeny
.Ação: as permissões abrangidas por esta diretiva. Somente
access
tem suporte para oferecer acesso somente leitura.Critérios de acionador: um conjunto de atributos que identificam o solicitante da API coberto pela diretiva.
Critérios de recursos: um conjunto de atributos que identificam os recursos cobertos pela diretiva.
Critérios de acesso
A API Cloud Healthcare oferece suporte a três propriedades de um acessador para uso dentro de uma diretiva de consentimento e para fazer a correspondência com um acessador que faça a solicitação solicitação. É necessário ter uma correspondência exata que diferencia maiúsculas de minúsculas para que uma diretiva seja aplicada ao acessório como parte da determinação de acesso oferecida pelo servidor FHIR.
Essas propriedades são codificadas da seguinte forma:
Ator: representa uma função individual, de grupo ou de acesso que identifica o acessador ou uma característica dele.
Finalidade: representa a intenção de uso dos dados.
Ambiente: representa um identificador abstrato que descreve o ambiente ou as condições em que o acessório está agindo.
Por exemplo, um acessório pode ser representado pelas seguintes propriedades:
Agente:
Practitioner/123
Objetivo:
ETREAT
ou acesso para tratamento emergencialAmbiente:
Application/abc
Nesse exemplo, essas propriedades representam um médico que está acessando dados ao
realizar um tratamento de emergência usando um aplicativo de software chamado abc
.
provision.actor
e
provision.purpose
são definidos como parte do padrão FHIR, enquanto o Ambiente é
https://g.co/fhir/medicalrecords/Environment
. Esse link não é
resolvível.
Todas as diretivas de consentimento precisam especificar um actor
para ser aplicado, mas não precisam
sempre especificar um purpose
ou um environment
. Por exemplo, se nenhuma environment
for especificada na diretiva de consentimento, ela vai corresponder a qualquer
environment
que não esteja coberto por outras diretivas de consentimento.
Critérios de recursos
A API Cloud Healthcare oferece suporte aos seguintes elementos como parte do recurso de consentimento:
Tipo de recurso (STU3, R4): representa o tipo ao qual a política de consentimento é vinculada, por exemplo,
Encounter
,Observation
ouImmunization
.ID do recurso (STU3, R4): representa o ID ao qual a política de consentimento é vinculada.
Fonte de dados: representa a origem do recurso conforme identificado pelo recurso
meta.source
(disponível apenas no R4).Tag de dados: representa o rótulo personalizado do recurso, conforme descrito no o recurso
meta.tag
(STU3, R4).Rótulo de segurança: representa rótulos de segurança que definem os recursos afetados. conforme identificado no campo
meta.security
. (STU3, R4). Há suporte para os seguintes sistemas de códigos:Confidencialidade: valores hierárquicos classificados de irrestritos para os mais restritos:
U
,L
,M
,N
,R
eV
. Se o consentimento permitir um rótulo de segurança deR
ele será aplicado a todos os recursos rotulados comoR
ou inferiores. Se um consentimento negar um rótulo de segurançaR
, ele será aplicado a todos os recursos que sejam pelo menos tão sensíveis quantoR
.ActCode: string de correspondência exata no código de segurança.
Fluxo de trabalho de acesso
Nesta figura, ilustramos a jornada completa de uma solicitação para um repositório com controle de acesso FHIR ativado. Um token externo com o escopo de consentimento (à esquerda) é usado pelo aplicativo (no 3) ao fazer uma solicitação ao repositório FHIR com o controle de acesso ativado (à direita).
Escopo do consentimento
Ao fazer uma solicitação de acesso a dados, um acessório opera em um determinado
escopo de consentimento que representa as propriedades actor
, purpose
e environment
relacionadas a qualquer solicitação HTTP do FHIR. Os valores dessas propriedades
devem diferenciar maiúsculas de minúsculas e aquelas fornecidas no consentimento para
afetar a determinação de acesso da aplicação.
Um acessório pode ter vários identificadores actor
relevantes para fazer
uma determinação de acesso. Da mesma forma, pode haver várias purposes
ou
environments
relevantes em um contexto de consentimento específico. Portanto,
todas as propriedades de acessório relevantes precisam ser fornecidas como parte de uma solicitação HTTP
FHIR para representar corretamente esse acessório para fins de consentimento.
Por exemplo, o escopo de consentimento para uma determinada solicitação de dados pode ser o seguinte:
actor/Practitioner/444 actor/Group/999 purp/v3/TREAT purp/v3/ETREAT env/App/abc
Isso representa uma enfermeira ou um médico conhecido como profissional 444
, que é membro
do grupo 999
, que representa profissionais de um departamento em um
hospital específico. O profissional está lá para fornecer tratamento regular, mas
e talvez também precise de tratamento emergencial como parte dessas ações. O
profissional está usando um aplicativo de software chamado abc
.
O escopo de consentimento é fornecido como um Escopo de consentimento de solicitação como parte da solicitação de dados de um acessório.
Solicitar escopo de consentimento
As solicitações FHIR usam cabeçalhos de solicitação HTTP FHIR para receber o escopo de consentimento do
acessor. Este escopo de consentimento contém um conjunto de actor
, purpose
e
environment
para refletir a identidade, as qualificações atuais do acessador
intenção de uso e restrições ambientais nas quais o acessador opera.
Pode haver mais de uma dessas propriedades que representam um
escopo de consentimento do acessador a qualquer momento.
As entradas de escopo de consentimento são definidas da seguinte maneira:
actor/{type}/{ID}
: uma propriedadeactor
em que o recursotype
está fornecido junto com oID
. Exemplos detype
incluem:Practitioner
Group
Patient
Por exemplo, se um armazenamento no formato
projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID/fhirStores/STORE_ID
chamar a API, uma referência local a um atorPractitioner/123
será resolvida comoprojects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID/fhirStores/STORE_ID/fhir/Practitioner/123
.purp/v3/{value}
: uma propriedadepurpose
em quevalue
é um membro do Objetivo de uso de FHIR (v3
) ou a extensão dele. Exemplos devalue
incluem:TREAT
ETREAT
HRESCH
env/{type}/{value}
: uma propriedadeenvironment
em quetype
evalue
são strings personalizadas sem taxonomia predefinida. Exemplos detype
evalue
incluem:App/my_app_1
Net/VPN
Além disso, os cabeçalhos da solicitação HTTP FHIR também podem receber escopos especiais, como
btg
e bypass
, que são definidos da seguinte maneira:
btg
: o "break the glass" (ou BTG, na sigla em inglês) permite que você, como usuário humano, pule as verificações de consentimento em caso de emergências. Ele deve ser usado somente em emergências e é sujeito à revisão pós-auditoria. Como resultado,btg
requer pelo menos umactor
.bypass
: permite usuários confiáveis (como um administrador) ou usuários de confiança aplicativos (como um pipeline de treinamento de ML) para operar no repositório FHIR sem autorização. Portanto,bypass
requer pelo menos umactor
. e umenv
.
Aplicação e determinação do acesso
Em um ambiente de saúde complexo, em que várias políticas e consentimentos coexistem, aplicar o acesso e determinar as permissões de acesso pode ser uma tarefa assustadora. Várias partes interessadas podem ter expectativas e requisitos diferentes relacionadas ao uso e à divulgação de informações sobre pacientes. Para navegar nessa paisagem complexa, é necessário entender claramente como o acesso é aplicado e a lógica subjacente que governa a determinação do acesso.
Política de consentimento agregado
Um consumidor da área da saúde, como um paciente ou um administrador, pode ter várias
diretivas de consentimento contidas em um único recurso de consentimento. Os recursos de consentimento
podem conter uma combinação de diretivas
provision.type
permit
e deny
. Por padrão, um usuário pode ter qualquer número de recursos de consentimento, mas
para 200 active
Os recursos de consentimento são aplicados por vez. Consulte
Restrições e limitações para mais detalhes.
Todas as diretivas de consentimento são extraídas dos recursos de consentimento active
de um determinado usuário para criar um conjunto de regras de consentimento agregadas.
Propriedades da diretiva de consentimento
A aplicação do consentimento é limitada a, no máximo, um propósito e a, no máximo, um ambiente por entrada de disposição.
As regras a seguir descrevem os princípios do controle de acesso conjunto de consentimento do paciente, políticas administrativas e políticas em cascata do administrador:
Por padrão, o acesso a todos os recursos é negado se não houver uma diretiva correspondente.
Se o recurso solicitado não existir, somente o tipo e o ID do recurso sejam identificáveis. Todos os outros critérios e o proprietário do recurso são desconhecido, a seguinte regra será aplicada na ordem de listagem:
Se o tipo de recurso pertencer ao compartimento de pacientes ou find-compartment: o acesso é negado.
Se esse não for seu caso, faça o seguinte:
Se houver uma política de administrador negando os critérios de acesso, independentemente dos outros critérios de recurso, o acesso será negado.
Se houver uma política de administrador que permita os critérios de acesso para os critérios de recurso identificável (ou seja, tipo e ID do recurso), um erro "recurso não encontrado" será retornado.
Em todos os outros casos, o acesso é negado.
As políticas de administrador são as políticas padrão usadas para corresponder recursos no armazenamento.
Os recursos que não pertencem a nenhum paciente são determinados apenas pelo administrador políticas.
Os recursos que estão no compartimento do paciente (STU3, R4) ou no compartimento de encontro (STU3, R4) precisam de pelo menos uma diretiva de consentimento de permissão por política de administrador ou do paciente ou política de administrador em cascata e nenhuma diretiva de consentimento de negação da política de administrador e do paciente e da política de administrador em cascata. Isso precisa de todos os pacientes indicados nos recursos a serem acessado pelo solicitante.
- Alguns recursos podem ser usados por vários participantes. Por exemplo,
Agendamento mostra uma lista de
participantes que podem ser pacientes. Todos os pacientes nomeados nesses
recursos precisam permitir o acesso ao acessório usando diretrizes de consentimento.
Caso contrário, os recursos não serão retornados. Se um recurso tiver uma permissão
de uma política de hierarquia de encontros, em que esse encontro referencia um
paciente pelo campo
subject
(STU3, R4), o recurso será considerado permitido pelo paciente.
- Alguns recursos podem ser usados por vários participantes. Por exemplo,
Agendamento mostra uma lista de
participantes que podem ser pacientes. Todos os pacientes nomeados nesses
recursos precisam permitir o acesso ao acessório usando diretrizes de consentimento.
Caso contrário, os recursos não serão retornados. Se um recurso tiver uma permissão
de uma política de hierarquia de encontros, em que esse encontro referencia um
paciente pelo campo
As regras descritas são resumidas pelo seguinte pseudocódigo:
Controle de acesso conjunto
ifresource
does not exist ifresource
is a patient-compartment or encounter-compartment resource: return "deny" else: if there is any admin policy denies access foraccessor criteria
regardless ofresource criteria
other than resource type and resource ID: return "deny" else if there is any admin policy permits access foraccessor criteria
based 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 requestedresource
if 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 allpatients
have 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
O repositório FHIR verifica a permissão de consentimento por recurso. Qualquer
referência
em um recurso não é resolvida e cascadeada para fins de verificação de acesso de consentimento.
Por exemplo, considere um paciente identificado por Patient/f001
que permite que um
profissional de saúde acesse todo o recurso MedicationRequest
, mas não o
recurso Patient/f001
devido à privacidade do paciente. Nesse cenário,
O profissional pode conferir todo o recurso MedicationRequest
, o que inclui uma
subject
referente ao recurso Patient/f001
, mas não é possível ver o
o conteúdo do recurso Patient/f001
, mesmo, por exemplo, ao executar
uma pesquisa FHIR usando _include
.
Resolução de conflitos
São possíveis conflitos entre várias diretivas permit
e deny
. Se duas
diretivas conflitantes corresponderem a um recurso, o conflito será resolvido usando o modelo
deny
vence permit
.
Apenas active
consentimentos estão incluídos para a aplicação obrigatória.
Lógica de aplicação do acesso a recursos
Ao fazer uma solicitação com consentimento para um armazenamento FHIR, o controle de acesso ocorre na seguinte ordem:
A API Cloud Healthcare verifica as permissões no Google Cloud conta de serviço (ou o principal) configurada no proxy. Se o serviço tem as permissões de IAM corretas para executar o método FHIR solicitado no armazenamento FHIR, a solicitação continua.
Se a aplicação de consentimento estiver ativada na configuração do armazenamento FHIR e os cabeçalhos HTTP de consentimento estiverem presentes, a API Cloud Healthcare vai aplicar as políticas de acesso de consentimento para recursos de compartimento de pacientes. A aplicação das políticas de acesso de consentimento é baseada nos escopos de consentimento fornecidos na solicitação, de acordo com as diretivas de consentimento capturadas pela execução mais recente de
ApplyConsents
eApplyAdminConsents
.
As regras a seguir se aplicam ao fazer uma solicitação com consentimento para um armazenamento FHIR:
Forneça pelo menos um escopo de consentimento
actor
relevante para as ações de consentimento realizadas.Forneça outros escopos
purpose
eenvironment
relevantes para as ações de consentimento realizadas.Se o número de entradas de escopo de consentimento exceder o limites compatíveis, será retornado um erro.
Se você chamar um método que acessa vários recursos (por exemplo, o
fhir.Patient-everything
,fhir.Encounter-everything
,fhir.executeBundle
, oufhir.search
a aplicação do consentimento se aplica a cada recurso individual. No entanto, há uma pequena diferença entre esses métodos de acesso a vários recursos:fhir.executeBundle
lendo vários recursos recebe "Acesso de consentimento negado ou o recurso que está sendo acessado não existe" para recursos individuais sem permissões de consentimento (consulte exemplos no Receber recursos FHIR com escopo de consentimento).O
fhir.search
pula recursos sem permissões de consentimento e não retorna erro de acesso negado, mesmo para pesquisa por_id
(veja exemplos na Pesquisar recursos FHIR com escopo de consentimento).fhir.Patient-everything
efhir.Encounter-everything
se comportam de maneira semelhante parafhir.search
, com a exceção de retornar "Acesso de consentimento negado ou o recurso acessado não existe se o autor da chamada não tiver consentimento permissão no recurso Paciente ou Encounter solicitado, respectivamente.
Determinação do acesso de consentimento
Uma diretiva de consentimento tem no máximo um actor
, no máximo um purpose
e no máximo
um environment
, enquanto o escopo de consentimento pode ter vários de cada um. Pouco consentimento
não especificam as três propriedades do acessador. Nesse caso,
o valor da propriedade do escopo de consentimento pode corresponder dependendo
regras de resolução de conflitos. Como resultado, um escopo de consentimento
pode corresponder a mais de uma diretiva de consentimento.
Se o escopo de consentimento de uma solicitação incluir duas ou mais entradas do mesmo
tipo de escopo de consentimento (actor
, purpose
ou environment
), o escopo
de consentimento provavelmente corresponde a várias diretrizes de consentimento. Algumas diretivas de consentimento não especificam purpose
ou environment
. Portanto, o escopo do consentimento também precisa ser
correspondido a diretivas de consentimento que não especificam esses tipos de escopo.
Por exemplo, definir o escopo de consentimento como actor/Practitioner/123
actor/Group/999 purp/v3/TREAT env/App/abc
corresponde a qualquer uma das
diretivas de consentimento permit
ou deny
a seguir:
actor/Practitioner/123 purp/v3/TREAT env/App/abc
actor/Practitioner/123 purp/v3/TREAT
actor/Practitioner/123 env/App/abc
actor/Practitioner/123
actor/Group/999 purp/v3/TREAT env/App/abc
actor/Group/999 purp/v3/TREAT
actor/Group/999 env/App/abc
actor/Group/999