Controlar o acesso aos recursos da Cloud Healthcare API

Esta página descreve como controlar o acesso aos conjuntos de dados e às bases de dados da Cloud Healthcare API através das autorizações Identity and Access Management (IAM). O IAM permite-lhe controlar quem tem acesso aos seus conjuntos de dados e repositórios de dados. Para saber mais sobre a IAM para a Cloud Healthcare API, consulte o artigo Controlo de acesso.

Vista geral das políticas de IAM

O acesso a um recurso é gerido através de uma política de IAM. Uma política contém uma matriz denominada bindings. Esta matriz contém uma coleção de associações, que são associações entre responsáveis, como uma conta de utilizador ou uma conta de serviço, e uma função. As políticas são representadas através de JSON ou YAML.

A política de exemplo seguinte mostra que user-1@example.com recebeu a função roles/healthcare.datasetAdmin e que user-2@example.com e service-account-13@appspot.gserviceaccount.com receberam a função roles/healthcare.datasetViewer:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.datasetAdmin",
      "members": [
        "user:user-1@example.com"
      ]
    },
    {
      "role":"roles/healthcare.datasetViewer",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:user-2@example.com"
      ]
    }
  ]
}

Para atualizar uma política para um recurso, use o padrão ler-modificar-escrever. Não existem métodos separados para criar, modificar e revogar o acesso dos utilizadores.

Para atualizar uma política, conclua os seguintes passos:

  1. Leia a política atual chamando o método getIamPolicy() do recurso. Por exemplo, para ler a política atual de um conjunto de dados, chame projects.locations.datasets.getIamPolicy.
  2. Edite a política devolvida através de um editor de texto ou programaticamente para adicionar ou remover quaisquer responsáveis aplicáveis e as respetivas concessões de funções.
  3. Escreva a política atualizada chamando o método setIamPolicy() do recurso. Por exemplo, para escrever a política atualizada de um conjunto de dados, chame projects.locations.datasets.setIamPolicy.

As secções seguintes mostram como obter, modificar e definir uma política para um arquivo de consentimento. Estas secções usam a seguinte política de exemplo como ponto de partida:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.consentStoreAdmin",
      "members": [
        "user:user-1@example.com"
      ]
    },
    {
      "role":"roles/healthcare.consentReader",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:user-2@example.com"
      ]
    }
  ]
}

Obter uma política

Os exemplos seguintes mostram como ler uma política de IAM ao nível do armazenamento de consentimento. Para mais informações, consulte projects.locations.datasets.consentStores.getIamPolicy.

Para ver a política IAM de um armazenamento de consentimento:

  1. Na Google Cloud consola, aceda à página Conjuntos de dados.

    Aceda aos conjuntos de dados

  2. Clique no ID do conjunto de dados que contém o arquivo de consentimento e, de seguida, selecione o arquivo de consentimento para o qual quer obter uma política.
  3. Clique em Mostrar painel de informações.
  4. Para ver os responsáveis atribuídos a uma função, expanda a função.

Para ver a política de IAM de um arquivo de consentimento, execute o comando gcloud healthcare consent-stores get-iam-policy. Especifique o nome da loja de consentimento, o nome do conjunto de dados e a localização.

gcloud healthcare consent-stores get-iam-policy CONSENT_STORE_ID \
    --dataset=DATASET_ID \
    --location=LOCATION

Se o pedido for bem-sucedido, as associações são apresentadas.

bindings:
- members:
  - user:user-1@example.com
  role: roles/healthcare.consentStoreAdmin
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  role: roles/healthcare.consentReader
etag: bytes
version: VERSION_NUMBER
const google = require('@googleapis/healthcare');
const healthcare = google.healthcare({
  version: 'v1',
  auth: new google.auth.GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/cloud-platform'],
  }),
});

const getConsentStoreIamPolicy = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const consentStoreId = 'my-consent-store';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/consentStores/${consentStoreId}`;
  const request = {resource_};

  const consentStore =
    await healthcare.projects.locations.datasets.consentStores.getIamPolicy(
      request
    );
  console.log(
    'Got consent store IAM policy:',
    JSON.stringify(consentStore.data, null, 2)
  );
};

getConsentStoreIamPolicy();
def get_consent_store_iam_policy(
    project_id: str, location: str, dataset_id: str, consent_store_id: str
):
    """Gets the IAM policy for the specified consent store.
    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/consent
    before running the sample."""
    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    api_version = "v1"
    service_name = "healthcare"
    # Returns an authorized API client by discovering the Healthcare API
    # and using GOOGLE_APPLICATION_CREDENTIALS environment variable.
    client = discovery.build(service_name, api_version)

    # TODO(developer): Uncomment these lines and replace with your values.
    # project_id = 'my-project'  # replace with your GCP project ID
    # location = 'us-central1'  # replace with the parent dataset's location
    # dataset_id = 'my-dataset'  # replace with the consent store's parent dataset ID
    # consent_store_id = 'my-consent-store'  # replace with the consent store's ID
    consent_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    consent_store_name = "{}/consentStores/{}".format(
        consent_store_parent, consent_store_id
    )

    request = (
        client.projects()
        .locations()
        .datasets()
        .consentStores()
        .getIamPolicy(resource=consent_store_name)
    )
    response = request.execute()

    print("etag: {}".format(response.get("name")))
    return response

Para ler a política de IAM de um arquivo de consentimento, faça um pedido GET e especifique o nome do conjunto de dados, o nome do arquivo de consentimento e um token de acesso.

O exemplo seguinte mostra um pedido GET com curl:

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:getIamPolicy"

A resposta é a seguinte:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.consentStoreAdmin",
      "members": [
        "user:user-1@example.com"
      ]
    },
    {
      "role":"roles/healthcare.consentReader",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:user-2@example.com"
      ]
    }
  ]
}

Para ler a política de IAM de um arquivo de consentimento, faça um pedido GET e especifique o nome do conjunto de dados, o nome do arquivo de consentimento e um token de acesso.

O exemplo seguinte mostra um pedido GET através do Windows PowerShell:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:getIamPolicy" | Select-Object -Expand Content

A resposta é a seguinte:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.consentStoreAdmin",
      "members": [
        "user:user-1@example.com"
      ]
    },
    {
      "role":"roles/healthcare.consentReader",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:user-2@example.com"
      ]
    }
  ]
}

Modificar uma política

Os seguintes exemplos concedem a um novo utilizador a função roles/healthcare.consentReader. Para mais informações, consulte projects.locations.datasets.consentStores.setIamPolicy.

Definir uma política

Para definir uma política IAM ao nível do arquivo de consentimento, conclua os seguintes passos:

  1. Na Google Cloud consola, aceda à página Conjuntos de dados.

    Aceda aos conjuntos de dados

  2. Clique no ID do conjunto de dados que contém o arquivo de consentimento e, de seguida, selecione o arquivo de consentimento para o qual quer definir uma política.
  3. Clique em Mostrar painel de informações.
  4. Clique em Adicionar principal.
  5. No campo Novos responsáveis, introduza uma ou mais identidades que precisam de acesso ao arquivo de consentimento.
  6. Na lista Selecionar uma função, em Cloud Healthcare, selecione a autorização que quer conceder. Por exemplo, o visualizador do arquivo de consentimento do Healthcare.
  7. Clique em Guardar.

Conceda ou revogue funções aos utilizadores modificando a política que recuperou, através de programação ou de um editor de texto. O valor etag muda quando a política muda, pelo que tem de especificar o valor atual.

Para conceder a função a um novo utilizador, anexe o respetivo endereço de email à matriz members no âmbito da associação roles/healthcare.consentReader:

{
  "role":"roles/healthcare.consentReader",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Para revogar o acesso de um principal, elimine o respetivo endereço de email da matriz members. Para revogar o acesso do último principal que tem uma função, elimine a matriz bindings para a função. Não pode ter uma matriz bindings vazia na sua política.

Depois de modificar a política para conceder as funções aplicáveis, execute o comando set-iam-policy adequado para fazer as alterações. Para definir uma política ao nível da loja de consentimento, execute o comando gcloud healthcare consent-stores set-iam-policy. Especifique o nome do arquivo de consentimento, o nome do conjunto de dados, a localização e o caminho para o ficheiro de política que criou.

gcloud healthcare consent-stores set-iam-policy CONSENT_STORE_ID \
    --dataset=DATASET_ID \
    --location=LOCATION \
    POLICY_FILE_NAME

Se o pedido for bem-sucedido, o nome da loja de consentimento e as associações são apresentados.

Updated IAM policy for consentStore [CONSENT_STORE_ID].
bindings:
- members:
  - user:user-1@example.com
  role: roles/healthcare.consentStoreAdmin
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  - user:NEW_USER_EMAIL_ADDRESS
  role: roles/healthcare.consentReader
etag: bytes
version: VERSION_NUMBER
const google = require('@googleapis/healthcare');
const healthcare = google.healthcare({
  version