Zugriff auf Cloud Healthcare API-Ressourcen steuern

Auf dieser Seite wird beschrieben, wie Sie den Zugriff auf Cloud Healthcare API-Datasets und -Datenspeicher mit IAM (Identity and Access Management)-Berechtigungen steuern. Mit IAM können Sie steuern, wer Zugriff auf Ihre Datensätze und Datenspeicher hat. Weitere Informationen zu IAM für die Cloud Healthcare API finden Sie unter Zugriffssteuerung.

Übersicht über IAM-Richtlinien

Der Zugriff auf Ressourcen wird über eine IAM-Richtlinie verwaltet. Eine Richtlinie enthält ein Array mit dem Namen bindings. Dieses Array enthält eine Sammlung von Bindungen, bei denen es sich um Verknüpfungen zwischen Hauptkonten wie einem Nutzerkonto oder einem Dienstkonto und einer Rolle handelt. Richtlinien werden im JSON- oder YAML-Format dargestellt.

Die folgende Beispielrichtlinie zeigt user-1@example.com, dem die Rolle roles/healthcare.datasetAdmin zugewiesen wurde und user-2@example.com sowie service-account-13@appspot.gserviceaccount.com, denen die Rolle roles/healthcare.datasetViewer zugewiesen wurde:

{
  "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"
      ]
    }
  ]
}

Verwenden Sie zum Aktualisieren einer Richtlinie für eine Ressource das Read-Modify-Write-Muster. Es gibt keine separaten Methoden zum Erstellen, Ändern und Entziehen von Zugriffsrechten.

So aktualisieren Sie eine Richtlinie:

  1. Rufen Sie die aktuelle Richtlinie durch Aufrufen der getIamPolicy()-Methode der Ressource ab. Wenn Sie beispielsweise die aktuelle Richtlinie eines Datasets lesen möchten, rufen Sie projects.locations.datasets.getIamPolicy auf.
  2. Bearbeiten Sie die zurückgegebene Richtlinie entweder mit einem Texteditor oder programmgesteuert, um entsprechende Hauptkonten und deren Rollenzuweisungen hinzuzufügen oder zu entfernen.
  3. Schreiben Sie die aktualisierte Richtlinie durch Aufrufen der Methode setIamPolicy() der Ressource. Wenn Sie beispielsweise die aktualisierte Richtlinie eines Datasets schreiben möchten, rufen Sie projects.locations.datasets.setIamPolicy auf.

In den folgenden Abschnitten wird gezeigt, wie Sie eine Richtlinie für einen Einwilligungsspeicher abrufen, ändern und festlegen. Diese Abschnitte verwenden die folgende Beispielrichtlinie als Ausgangspunkt:

{
  "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"
      ]
    }
  ]
}

Richtlinie abrufen

Die folgenden Beispiele zeigen, wie Sie eine IAM-Richtlinie auf Einwilligungsspeicherebene lesen. Weitere Informationen finden Sie unter projects.locations.datasets.consentStores.getIamPolicy.

So rufen Sie die IAM-Richtlinie für einen Einwilligungsspeicher ab:

  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Klicken Sie auf die ID des Datasets, das den Einwilligungsspeicher enthält, und wählen Sie dann den Einwilligungsspeicher aus, für den Sie eine Richtlinie abrufen möchten.
  3. Klicken Sie auf Infofeld anzeigen.
  4. Erweitern Sie eine Rolle, um die ihr zugewiesenen Hauptkonten anzeigen zu lassen.

Zum Aufrufen der IAM-Richtlinie für einen Einwilligungsspeicher führen Sie den Befehl gcloud healthcare consent-stores get-iam-policy aus. Geben Sie den Namen des Einwilligungsspeichers, den Dataset-Namen und den Standort an.

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

Wenn die Anfrage erfolgreich ist, werden die Bindungen angezeigt.

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

Um die IAM-Richtlinie für einen Einwilligungsspeicher zu lesen, stellen Sie eine GET-Anfrage und geben Sie den Namen des Datasets, den Namen des Einwilligungsspeichers und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine GET-Anfrage mit 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"

Die Antwort lautet:

{
  "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"
      ]
    }
  ]
}

Um die IAM-Richtlinie für einen Einwilligungsspeicher zu lesen, stellen Sie eine GET-Anfrage und geben Sie den Namen des Datasets, den Namen des Einwilligungsspeichers und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine GET-Anfrage mit 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

Die Antwort lautet:

{
  "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"
      ]
    }
  ]
}

Richtlinie ändern

In den folgenden Beispielen wird einem neuen Nutzer die Rolle roles/healthcare.consentReader zugewiesen. Weitere Informationen finden Sie unter projects.locations.datasets.consentStores.setIamPolicy.

Richtlinie festlegen

Führen Sie die folgenden Schritte aus, um eine IAM-Richtlinie auf Einwilligungsspeicherebene festzulegen:

  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Klicken Sie auf die ID des Datasets, das den Einwilligungsspeicher enthält, und wählen Sie dann den Einwilligungsspeicher aus, für den Sie eine Richtlinie festlegen möchten.
  3. Klicken Sie auf Infofeld anzeigen.
  4. Klicken Sie auf Hauptkonto hinzufügen.
  5. Geben Sie im Feld Neue Hauptkonten eine oder mehrere Identitäten ein, die Zugriff auf den Einwilligungsspeicher benötigen.
  6. Wählen Sie in der Liste Rolle auswählen unter Cloud Healthcare die Berechtigung aus, die Sie gewähren möchten. Beispiel: Healthcare Consent Store Viewer.
  7. Klicken Sie auf Speichern.

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.consentReader an:

{
  "role":"roles/healthcare.consentReader",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Wenn Sie den Zugriff vom letzten Hauptkonto mit einer Rolle widerrufen möchten, löschen Sie das bindings-Array für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, führen Sie den entsprechenden set-iam-policy-Befehl aus, um die Änderungen vorzunehmen. Führen Sie den Befehl gcloud healthcare consent-stores set-iam-policy aus, um eine Richtlinie auf Einwilligungsspeicherebene festzulegen. Geben Sie den Namen des Einwilligungsspeichers, den Dataset-Namen, den Speicherort und den Pfad zur erstellten Richtliniendatei an.

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

Wenn die Anfrage erfolgreich ist, werden der Name des Einwilligungsspeichers und dessen Bindungen angezeigt.

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: 'v1',
  auth: new google.auth.GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/cloud-platform'],
  }),
});

const setConsentStoreIamPolicy = 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 member = 'user:example@gmail.com';
  // const role = 'roles/healthcare.consentStoreViewer';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/consentStores/${consentStoreId}`;
  const request = {
    resource_,
    resource: {
      policy: {
        bindings: [
          {
            members: member,
            role: role,
          },
        ],
      },
    },
  };

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

setConsentStoreIamPolicy();
def set_consent_store_iam_policy(
    project_id: str,
    location: str,
    dataset_id: str,
    consent_store_id: str,
    member,
    role,
    etag=None,
):
    """Sets the IAM policy for the specified consent store.
    A single member will be assigned a single role. A member can be any of:
    - allUsers, that is, anyone
    - allAuthenticatedUsers, anyone authenticated with a Google account
    - user:email, as in 'user:somebody@example.com'
    - group:email, as in 'group:admins@example.com'
    - domain:domainname, as in 'domain:example.com'
    - serviceAccount:email,
        as in 'serviceAccount:my-other-app@appspot.gserviceaccount.com'
    A role can be any IAM role, such as 'roles/viewer', 'roles/owner',
    or 'roles/editor'
    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
    # member = 'myemail@example.com'  # replace with an authorized member
    # role = 'roles/viewer'  # replace with a Healthcare API IAM role
    consent_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    consent_store_name = "{}/consentStores/{}".format(
        consent_store_parent, consent_store_id
    )

    policy = {"bindings": [{"role": role, "members": [member]}]}

    if etag is not None:
        policy["etag"] = etag

    request = (
        client.projects()
        .locations()
        .datasets()
        .consentStores()
        .setIamPolicy(resource=consent_store_name, body={"policy": policy})
    )
    response = request.execute()

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

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.consentReader an:

{
  "role":"roles/healthcare.consentReader",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.consentStores.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf Einwilligungsspeicherebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des Einwilligungsspeichers, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit curl, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.consentReader zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'policy': {
        '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',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:setIamPolicy"

Die Antwort lautet:

{
  "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",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.consentReader an:

{
  "role":"roles/healthcare.consentReader",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie dessen E-Mail-Adresse aus dem Array members. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. In Ihrer Richtlinie darf kein leeres bindings-Array enthalten sein.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.consentStores.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf Einwilligungsspeicherebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des Einwilligungsspeichers, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit Windows PowerShell, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.consentReader zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'policy': {
      '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',
            'user:NEW_USER_EMAIL_ADDRESS'
          ]
        }
      ]
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:setIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

{
  "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",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

IAM mit Datasets verwenden

In den folgenden Abschnitten wird beschrieben, wie Sie eine Richtlinie für ein Dataset abrufen, ändern und festlegen. Diese Abschnitte verwenden die folgende Beispielrichtlinie als Ausgangspunkt:

{
  "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"
      ]
    }
  ]
}

Richtlinie abrufen

Die folgenden Beispiele zeigen, wie eine IAM-Richtlinie auf Dataset-Ebene gelesen wird. Weitere Informationen finden Sie unter projects.locations.datasets.getIamPolicy.

curl

Um die IAM-Richtlinie für ein Dataset zu lesen, stellen Sie eine GET-Anfrage und geben Sie den Namen des Datasets und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine GET-Anfrage mit 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:getIamPolicy"

Die Antwort lautet:

{
  "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"
      ]
    }
  ]
}

PowerShell

Zum Anzeigen der IAM-Richtlinie für ein Dataset senden Sie eine GET-Anfrage, die den Namen des Datasets und ein Zugriffstoken enthält.

Das folgende Beispiel zeigt eine GET-Anfrage mit 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:getIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

{
  "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"
      ]
    }
  ]
}

Console

So rufen Sie die IAM-Richtlinie für ein Dataset auf:
  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Wählen Sie ein Dataset aus und klicken Sie auf Infofeld anzeigen.
  3. Erweitern Sie eine Rolle, um die ihr zugewiesenen Hauptkonten anzeigen zu lassen.

gcloud

Zum Aufrufen der IAM-Richtlinie für ein Dataset führen Sie den Befehl gcloud healthcare datasets get-iam-policy aus. Geben Sie den Namen des Datasets und den Speicherort an.

gcloud healthcare datasets get-iam-policy DATASET_ID \
    --location=LOCATION

Wenn die Anfrage erfolgreich ist, werden die Bindungen angezeigt.

bindings:
- members:
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  role: roles/healthcare.datasetViewer
etag: bytes
version: VERSION_NUMBER

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// datasetIAMPolicy gets the dataset's IAM policy.
func datasetIAMPolicy(w io.Writer, projectID, location, datasetID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	datasetsService := healthcareService.Projects.Locations.Datasets

	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s", projectID, location, datasetID)

	policy, err := datasetsService.GetIamPolicy(name).Do()
	if err != nil {
		return fmt.Errorf("GetIamPolicy: %w", err)
	}

	fmt.Fprintf(w, "IAM Policy etag: %v\n", policy.Etag)
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.Policy;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Collections;

public class DatasetGetIamPolicy {
  private static final String DATASET_NAME = "projects/%s/locations/%s/datasets/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void datasetGetIamPolicy(String datasetName) throws IOException {
    // String datasetName =
    //     String.format(DATASET_NAME, "your-project-id", "your-region-id", "your-dataset-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Create request and configure any parameters.
    Datasets.GetIamPolicy request =
        client.projects().locations().datasets().getIamPolicy(datasetName);

    // Execute the request and process the results.
    Policy policy = request.execute();
    System.out.println("Dataset IAMPolicy retrieved: \n" + policy.toPrettyString());
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

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 getDatasetIamPolicy = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}`;
  const request = {resource_};

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

getDatasetIamPolicy();

Python

# Imports the Dict and Any types for runtime type hints.
from typing import Any, Dict


def get_dataset_iam_policy(
    project_id: str, location: str, dataset_id: str
) -> Dict[str, Any]:
    """Gets the IAM policy for the specified dataset.

    See
    https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/datasets
    before running the sample.
    See https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.html#getIamPolicy
    for the Python API reference.

    Args:
      project_id: The project ID or project number of the Google Cloud project you want
          to use.
      location: The name of the dataset's location.
      dataset_id: The ID of the dataset containing the IAM policy to get.

    Returns:
      A dictionary representing an IAM policy.
    """
    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    # Imports HttpError from the Google Python API client errors module.
    from googleapiclient.errors import HttpError

    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'
    # location = 'us-central1'
    # dataset_id = 'my-dataset'
    dataset_name = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )

    request = (
        client.projects().locations().datasets().getIamPolicy(resource=dataset_name)
    )

    try:
        response = request.execute()
        print("etag: {}".format(response.get("name")))
        return response
    except HttpError as err:
        raise err

Richtlinie ändern

In den folgenden Beispielen wird einem neuen Nutzer die Rolle roles/healthcare.datasetViewer zugewiesen:

Richtlinie festlegen

Console

Führen Sie die folgenden Schritte aus, um eine IAM-Richtlinie auf Dataset-Ebene festzulegen:

  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Wählen Sie das Dataset aus, für das Sie eine Richtlinie festlegen möchten, und klicken Sie dann auf Infofeld ansehen.
  3. Klicken Sie auf Hauptkonto hinzufügen.
  4. Geben Sie im Feld Neue Hauptkonten eine oder mehrere Identitäten ein, die Zugriff auf das Dataset benötigen.
  5. Wählen Sie in der Liste Rolle auswählen unter Cloud Healthcare die Berechtigung aus, die Sie erteilen möchten. Zum Beispiel Healthcare-Dataset-Betrachter.
  6. Klicken Sie auf Speichern.

gcloud

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.datasetViewer an:

{
  "role":"roles/healthcare.datasetViewer",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. In Ihrer Richtlinie darf kein leeres bindings-Array enthalten sein.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, führen Sie den entsprechenden set-iam-policy-Befehl aus, um die Änderungen vorzunehmen. Führen Sie den Befehl gcloud healthcare datasets set-iam-policy aus, um eine Richtlinie auf Dataset-Ebene festzulegen. Geben Sie den Dataset-Namen, den Speicherort und den Pfad zur von Ihnen erstellten Richtliniendatei an.

gcloud healthcare datasets set-iam-policy DATASET_ID \
    --location=LOCATION \
    POLICY_FILE_NAME

Wenn die Anfrage erfolgreich ist, werden der Dataset-Name und die Bindungen angezeigt.

Updated IAM policy for dataset [DATASET_ID].
bindings:
- members:
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  role: roles/healthcare.datasetAdmin
  - user:user-1@example.com
  - user:NEW_USER_EMAIL_ADDRESS
  role: roles/healthcare.datasetViewer
etag: bytes
version: VERSION_NUMBER

curl

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.datasetViewer an:

{
  "role":"roles/healthcare.datasetViewer",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf Dataset-Ebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit curl, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.datasetViewer zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'policy': {
        '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',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID:setIamPolicy"

Die Antwort lautet:

{
  "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",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

PowerShell

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.datasetViewer an:

{
  "role":"roles/healthcare.datasetViewer",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf Dataset-Ebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit Windows PowerShell, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.datasetViewer zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'policy': {
      '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',
            'user:NEW_USER_EMAIL_ADDRESS'
          ]
        }
      ]
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID:setIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

{
  "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",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// setDatasetIAMPolicy sets an IAM policy for the dataset.
func setDatasetIAMPolicy(w io.Writer, projectID, location, datasetID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	datasetsService := healthcareService.Projects.Locations.Datasets

	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s", projectID, location, datasetID)

	policy, err := datasetsService.GetIamPolicy(name).Do()
	if err != nil {
		return fmt.Errorf("GetIamPolicy: %w", err)
	}

	policy.Bindings = append(policy.Bindings, &healthcare.Binding{
		Members: []string{"user:example@example.com"},
		Role:    "roles/viewer",
	})

	req := &healthcare.SetIamPolicyRequest{
		Policy: policy,
	}

	policy, err = datasetsService.SetIamPolicy(name, req).Do()
	if err != nil {
		return fmt.Errorf("SetIamPolicy: %w", err)
	}

	fmt.Fprintf(w, "IAM Policy etag: %v", policy.Etag)
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.Binding;
import com.google.api.services.healthcare.v1.model.Policy;
import com.google.api.services.healthcare.v1.model.SetIamPolicyRequest;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;

public class DatasetSetIamPolicy {
  private static final String DATASET_NAME = "projects/%s/locations/%s/datasets/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void datasetSetIamPolicy(String datasetName) throws IOException {
    // String datasetName =
    //     String.format(DATASET_NAME, "your-project-id", "your-region-id", "your-dataset-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Configure the IAMPolicy to apply to the dataset.
    // For more information on understanding IAM roles, see the following:
    // https://cloud.google.com/iam/docs/understanding-roles
    Binding binding =
        new Binding()
            .setRole("roles/healthcare.datasetViewer")
            .setMembers(Arrays.asList("domain:google.com"));
    Policy policy = new Policy().setBindings(Arrays.asList(binding));
    SetIamPolicyRequest policyRequest = new SetIamPolicyRequest().setPolicy(policy);

    // Create request and configure any parameters.
    Datasets.SetIamPolicy request =
        client.projects().locations().datasets().setIamPolicy(datasetName, policyRequest);

    // Execute the request and process the results.
    Policy updatedPolicy = request.execute();
    System.out.println("Dataset policy has been updated: " + updatedPolicy.toPrettyString());
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

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 setDatasetIamPolicy = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const member = 'user:example@gmail.com';
  // const role = 'roles/healthcare.datasetViewer';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}`;
  const request = {
    resource_,
    resource: {
      policy: {
        bindings: [
          {
            members: member,
            role: role,
          },
        ],
      },
    },
  };

  const dataset =
    await healthcare.projects.locations.datasets.setIamPolicy(request);
  console.log(
    'Set dataset IAM policy:',
    JSON.stringify(dataset.data, null, 2)
  );
};

setDatasetIamPolicy();

Python

# Imports the Dict and Any types for runtime type hints.
from typing import Any, Dict

def set_dataset_iam_policy(
    project_id: str,
    location: str,
    dataset_id: str,
    member: str,
    role: str,
    etag: str = None,
) -> Dict[str, Any]:
    """Sets the IAM policy for the specified dataset.

        A single member will be assigned a single role. A member can be any of:

        - allUsers, that is, anyone
        - allAuthenticatedUsers, anyone authenticated with a Google account
        - user:email, as in 'user:somebody@example.com'
        - group:email, as in 'group:admins@example.com'
        - domain:domainname, as in 'domain:example.com'
        - serviceAccount:email,
            as in 'serviceAccount:my-other-app@appspot.gserviceaccount.com'

        A role can be any IAM role, such as 'roles/viewer', 'roles/owner',
        or 'roles/editor'

    See
    https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/datasets
    before running the sample.
    See https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.html#setIamPolicy
    for the Python API reference.

    Args:
      project_id: The project ID or project number of the Google Cloud project you want
          to use.
      location: The name of the dataset's location.
      dataset_id: The ID of the dataset containing the IAM policy to set.
      member: The principals to grant access for a Google Cloud resource.
      role: The role to assign to the list of 'members'.
      etag: The 'etag' returned in a previous getIamPolicy request to ensure that
        setIamPolicy changes apply to the same policy version.

    Returns:
      A dictionary representing an IAM policy.
    """
    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    # Imports HttpError from the Google Python API client errors module.
    from googleapiclient.errors import HttpError

    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'
    # location = 'us-central1'
    # dataset_id = 'my-dataset'
    dataset_name = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )

    # TODO(developer): Uncomment these lines and replace with your values.
    # role = 'roles/viewer'
    # member = 'serviceAccount:group@example.com'
    policy = {"bindings": [{"role": role, "members": [member]}]}

    if etag is not None:
        policy["etag"] = etag

    request = (
        client.projects()
        .locations()
        .datasets()
        .setIamPolicy(resource=dataset_name, body={"policy": policy})
    )
    try:
        response = request.execute()
        print("etag: {}".format(response.get("name")))
        print("bindings: {}".format(response.get("bindings")))
        return response
    except HttpError as err:
        raise err

IAM mit DICOM-Speichern verwenden

In den folgenden Abschnitten wird gezeigt, wie Sie eine Richtlinie für einen DICOM-Speicher abrufen, ändern und festlegen. Diese Abschnitte verwenden die folgende Beispielrichtlinie als Ausgangspunkt:

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

Richtlinie abrufen

In den folgenden Beispielen wird gezeigt, wie Sie eine IAM-Richtlinie auf DICOM-Speicherebene lesen. Weitere Informationen finden Sie unter projects.locations.datasets.dicomStores.getIamPolicy.

Console

So zeigen Sie die IAM-Richtlinie für einen DICOM-Speicher an:

  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Klicken Sie auf die ID des Datasets, das den DICOM-Speicher enthält, und wählen Sie dann den DICOM-Speicher aus, für den Sie eine Richtlinie abrufen möchten.
  3. Klicken Sie auf Infofeld anzeigen.
  4. Erweitern Sie eine Rolle, um die ihr zugewiesenen Hauptkonten anzeigen zu lassen.

gcloud

Führen Sie den Befehl gcloud healthcare dicom-stores get-iam-policy aus, um die IAM-Richtlinie für einen DICOM-Speicher anzusehen. Geben Sie den DICOM-Speichernamen, den Dataset-Namen und den Speicherort an.

gcloud healthcare dicom-stores get-iam-policy DICOM_STORE_ID \
    --dataset=DATASET_ID \
    --location=LOCATION

Wenn die Anfrage erfolgreich ist, werden die Bindungen angezeigt.

bindings:
- members:
  - user:user-1@example.com
  role: roles/healthcare.dicomStoreAdmin
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  role: roles/healthcare.dicomViewer
etag: bytes
version: VERSION_NUMBER

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// getDICOMIAMPolicy gets the DICOM store's IAM policy.
func getDICOMIAMPolicy(w io.Writer, projectID, location, datasetID, dicomStoreID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	dicomService := healthcareService.Projects.Locations.Datasets.DicomStores

	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s/dicomStores/%s", projectID, location, datasetID, dicomStoreID)

	policy, err := dicomService.GetIamPolicy(name).Do()
	if err != nil {
		return fmt.Errorf("GetIamPolicy: %w", err)
	}

	fmt.Fprintf(w, "IAM Policy etag: %v\n", policy.Etag)
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets.DicomStores;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.Policy;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Collections;

public class DicomStoreGetIamPolicy {
  private static final String DICOM_NAME = "projects/%s/locations/%s/datasets/%s/dicomStores/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void dicomStoreGetIamPolicy(String dicomStoreName) throws IOException {
    // String dicomStoreName =
    //    String.format(
    //        DICOM_NAME, "your-project-id", "your-region-id", "your-dataset-id", "your-dicom-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Create request and configure any parameters.
    DicomStores.GetIamPolicy request =
        client.projects().locations().datasets().dicomStores().getIamPolicy(dicomStoreName);

    // Execute the request and process the results.
    Policy policy = request.execute();
    System.out.println("DICOM store IAMPolicy retrieved: \n" + policy.toPrettyString());
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

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 getDicomStoreIamPolicy = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const dicomStoreId = 'my-dicom-store';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/dicomStores/${dicomStoreId}`;
  const request = {resource_};

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

getDicomStoreIamPolicy();

Python

def get_dicom_store_iam_policy(project_id, location, dataset_id, dicom_store_id):
    """Gets the IAM policy for the specified DICOM store.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/dicom
    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 DICOM store's parent dataset ID
    # dicom_store_id = 'my-dicom-store'  # replace with the DICOM store's ID
    dicom_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    dicom_store_name = f"{dicom_store_parent}/dicomStores/{dicom_store_id}"

    request = (
        client.projects()
        .locations()
        .datasets()
        .dicomStores()
        .getIamPolicy(resource=dicom_store_name)
    )
    response = request.execute()

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

curl

Um die IAM-Richtlinie für einen DICOM-Speicher zu lesen, stellen Sie eine GET-Anfrage und geben Sie den Namen des Datasets, den Namen des DICOM-Speichers und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine GET-Anfrage mit 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/dicomStores/DICOM_STORE_ID:getIamPolicy"

Die Antwort lautet:

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

PowerShell

Um die IAM-Richtlinie für einen DICOM-Speicher zu lesen, stellen Sie eine GET-Anfrage und geben Sie den Namen des Datasets, den Namen des DICOM-Speichers und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine GET-Anfrage mit 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/dicomStores/DICOM_STORE_ID:getIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

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

Richtlinie ändern

In den folgenden Beispielen wird einem neuen Nutzer die Rolle roles/healthcare.dicomViewer zugewiesen. Weitere Informationen finden Sie unter projects.locations.datasets.dicomStores.setIamPolicy.

Richtlinie festlegen

Console

Führen Sie die folgenden Schritte aus, um eine IAM-Richtlinie auf DICOM-Speicherebene festzulegen:

  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Klicken Sie auf die ID des Datasets, das den DICOM-Speicher enthält, und wählen Sie dann den DICOM-Speicher aus, für den Sie eine Richtlinie festlegen möchten.
  3. Klicken Sie auf Infofeld anzeigen.
  4. Klicken Sie auf Hauptkonto hinzufügen.
  5. Geben Sie im Feld Neue Hauptkonten eine oder mehrere Identitäten ein, die Zugriff auf den DICOM-Speicher benötigen.
  6. Wählen Sie in der Liste Rolle auswählen unter Cloud Healthcare die Berechtigung aus, die Sie gewähren möchten. Beispiel: Healthcare-DICOM-Speicherbetrachter
  7. Klicken Sie auf Speichern.

gcloud

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.dicomViewer an:

{
  "role":"roles/healthcare.dicomViewer",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie dessen E-Mail-Adresse aus dem Array members. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, führen Sie den entsprechenden set-iam-policy-Befehl aus, um die Änderungen vorzunehmen. Führen Sie den Befehl gcloud healthcare dicom-stores set-iam-policy aus, um eine DICOM-Richtlinie auf Speicherebene festzulegen. Geben Sie den DICOM-Speichernamen, den Dataset-Namen, den Speicherort und den Pfad zur erstellten Richtliniendatei an.

gcloud healthcare dicom-stores set-iam-policy DICOM_STORE_ID \
    --dataset=DATASET_ID \
    --location=LOCATION \
    POLICY_FILE_NAME

Wenn die Anfrage erfolgreich ist, werden der Name des DICOM-Speichers und die Bindungen angezeigt.

Updated IAM policy for dicomStore [DICOM_STORE_ID].
bindings:
- members:
  - user:user-1@example.com
  role: roles/healthcare.dicomStoreAdmin
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  - user:NEW_USER_EMAIL_ADDRESS
  role: roles/healthcare.dicomViewer
etag: bytes
version: VERSION_NUMBER

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// setDICOMIAMPolicy sets the DICOM store's IAM policy.
func setDICOMIAMPolicy(w io.Writer, projectID, location, datasetID, dicomStoreID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	dicomService := healthcareService.Projects.Locations.Datasets.DicomStores

	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s/dicomStores/%s", projectID, location, datasetID, dicomStoreID)

	policy, err := dicomService.GetIamPolicy(name).Do()
	if err != nil {
		return fmt.Errorf("GetIamPolicy: %w", err)
	}

	policy.Bindings = append(policy.Bindings, &healthcare.Binding{
		Members: []string{"user:example@example.com"},
		Role:    "roles/viewer",
	})

	req := &healthcare.SetIamPolicyRequest{
		Policy: policy,
	}

	policy, err = dicomService.SetIamPolicy(name, req).Do()
	if err != nil {
		return fmt.Errorf("SetIamPolicy: %w", err)
	}

	fmt.Fprintf(w, "IAM Policy etag: %v\n", policy.Etag)
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets.DicomStores;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.Binding;
import com.google.api.services.healthcare.v1.model.Policy;
import com.google.api.services.healthcare.v1.model.SetIamPolicyRequest;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;

public class DicomStoreSetIamPolicy {
  private static final String DICOM_NAME = "projects/%s/locations/%s/datasets/%s/dicomStores/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void dicomStoreSetIamPolicy(String dicomStoreName) throws IOException {
    // String dicomStoreName =
    //    String.format(
    //        DICOM_NAME, "your-project-id", "your-region-id", "your-dataset-id", "your-dicom-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Configure the IAMPolicy to apply to the store.
    // For more information on understanding IAM roles, see the following:
    // https://cloud.google.com/iam/docs/understanding-roles
    Binding binding =
        new Binding()
            .setRole("roles/healthcare.dicomStoreAdmin")
            .setMembers(Arrays.asList("domain:google.com"));
    Policy policy = new Policy().setBindings(Arrays.asList(binding));
    SetIamPolicyRequest policyRequest = new SetIamPolicyRequest().setPolicy(policy);

    // Create request and configure any parameters.
    DicomStores.SetIamPolicy request =
        client
            .projects()
            .locations()
            .datasets()
            .dicomStores()
            .setIamPolicy(dicomStoreName, policyRequest);

    // Execute the request and process the results.
    Policy updatedPolicy = request.execute();
    System.out.println("DICOM policy has been updated: " + updatedPolicy.toPrettyString());
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

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 setDicomStoreIamPolicy = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const dicomStoreId = 'my-dicom-store';
  // const member = 'user:example@gmail.com';
  // const role = 'roles/healthcare.dicomStoreViewer';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/dicomStores/${dicomStoreId}`;
  const request = {
    resource_,
    resource: {
      policy: {
        bindings: [
          {
            members: member,
            role: role,
          },
        ],
      },
    },
  };

  const dicomStore =
    await healthcare.projects.locations.datasets.dicomStores.setIamPolicy(
      request
    );
  console.log(
    'Set DICOM store IAM policy:',
    JSON.stringify(dicomStore.data, null, 2)
  );
};

setDicomStoreIamPolicy();

Python

def set_dicom_store_iam_policy(
    project_id, location, dataset_id, dicom_store_id, member, role, etag=None
):
    """Sets the IAM policy for the specified DICOM store.

    A single member will be assigned a single role. A member can be any of:

    - allUsers, that is, anyone
    - allAuthenticatedUsers, anyone authenticated with a Google account
    - user:email, as in 'user:somebody@example.com'
    - group:email, as in 'group:admins@example.com'
    - domain:domainname, as in 'domain:example.com'
    - serviceAccount:email,
        as in 'serviceAccount:my-other-app@appspot.gserviceaccount.com'

    A role can be any IAM role, such as 'roles/viewer', 'roles/owner',
    or 'roles/editor'

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/dicom
    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 DICOM store's parent dataset ID
    # dicom_store_id = 'my-dicom-store'  # replace with the DICOM store's ID
    # member = 'myemail@example.com'  # replace with an authorized member
    # role = 'roles/viewer'  # replace with a Healthcare API IAM role
    dicom_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    dicom_store_name = f"{dicom_store_parent}/dicomStores/{dicom_store_id}"

    policy = {"bindings": [{"role": role, "members": [member]}]}

    if etag is not None:
        policy["etag"] = etag

    request = (
        client.projects()
        .locations()
        .datasets()
        .dicomStores()
        .setIamPolicy(resource=dicom_store_name, body={"policy": policy})
    )
    response = request.execute()

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

curl

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.dicomViewer an:

{
  "role":"roles/healthcare.dicomViewer",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Wenn Sie den Zugriff vom letzten Hauptkonto mit einer Rolle widerrufen möchten, löschen Sie das bindings-Array für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.dicomStores.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf DICOM-Speicherebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des DICOM-Speichers, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit curl, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.dicomViewer zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'policy': {
        'bindings': [
          {
            'role':'roles/healthcare.dicomStoreAdmin',
            'members': [
              'user:user-1@example.com'
            ]
          },
          {
            'role':'roles/healthcare.dicomViewer',
            'members': [
              'serviceAccount:service-account-13@appspot.gserviceaccount.com',
              'user:user-2@example.com',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setIamPolicy"

Die Antwort lautet:

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

PowerShell

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.dicomViewer an:

{
  "role":"roles/healthcare.dicomViewer",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.dicomStores.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf DICOM-Speicherebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des DICOM-Speichers, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit Windows PowerShell, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.dicomViewer zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'policy': {
      'bindings': [
        {
          'role': 'roles/healthcare.dicomStoreAdmin',
          'members': [
            'user:user-1@example.com',
          ]
        },
        {
          'role': 'roles/healthcare.dicomViewer',
          'members': [
            'serviceAccount:service-account-13@appspot.gserviceaccount.com',
            'user:user-2@example.com',
            'user:NEW_USER_EMAIL_ADDRESS'
          ]
        }
      ]
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

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

IAM mit FHIR-Speichern verwenden

In den folgenden Abschnitten wird gezeigt, wie Sie eine Richtlinie für einen FHIR-Speicher abrufen, ändern und festlegen. Diese Abschnitte verwenden die folgende Beispielrichtlinie als Ausgangspunkt:

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

Richtlinie abrufen

Die folgenden Beispiele zeigen, wie Sie eine IAM-Richtlinie auf FHIR-Speicherebene lesen. Weitere Informationen finden Sie unter projects.locations.datasets.fhirStores.getIamPolicy.

Console

So rufen Sie die IAM-Richtlinie für einen FHIR-Speicher ab:

  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Klicken Sie auf die ID des Datasets, das den FHIR-Speicher enthält, und wählen Sie dann den FHIR-Speicher aus, für den Sie eine Richtlinie abrufen möchten.
  3. Klicken Sie auf Infofeld anzeigen.
  4. Erweitern Sie eine Rolle, um die ihr zugewiesenen Hauptkonten anzeigen zu lassen.

gcloud

Zum Aufrufen der IAM-Richtlinie für einen FHIR-Speicher führen Sie den Befehl gcloud healthcare fhir-stores get-iam-policy aus. Geben Sie den FHIR-Speichernamen, den Dataset-Namen und den Standort an.

gcloud healthcare fhir-stores get-iam-policy FHIR_STORE_ID \
    --dataset=DATASET_ID \
    --location=LOCATION

Wenn die Anfrage erfolgreich ist, werden die Bindungen angezeigt.

bindings:
- members:
  - user:user-1@example.com
  role: roles/healthcare.fhirStoreAdmin
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  role: roles/healthcare.fhirResourceReader
etag: bytes
version: VERSION_NUMBER

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// getFHIRIAMPolicy gets the FHIR store's IAM policy.
func getFHIRIAMPolicy(w io.Writer, projectID, location, datasetID, fhirStoreID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	fhirService := healthcareService.Projects.Locations.Datasets.FhirStores

	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s/fhirStores/%s", projectID, location, datasetID, fhirStoreID)

	policy, err := fhirService.GetIamPolicy(name).Do()
	if err != nil {
		return fmt.Errorf("GetIamPolicy: %w", err)
	}

	fmt.Fprintf(w, "IAM Policy etag: %v\n", policy.Etag)
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets.FhirStores;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.Policy;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Collections;

public class FhirStoreGetIamPolicy {
  private static final String FHIR_NAME = "projects/%s/locations/%s/datasets/%s/fhirStores/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void fhirStoreGetIamPolicy(String fhirStoreName) throws IOException {
    // String fhirStoreName =
    //    String.format(
    //        FHIR_NAME, "your-project-id", "your-region-id", "your-dataset-id", "your-fhir-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Create request and configure any parameters.
    FhirStores.GetIamPolicy request =
        client.projects().locations().datasets().fhirStores().getIamPolicy(fhirStoreName);

    // Execute the request and process the results.
    Policy policy = request.execute();
    System.out.println("FHIR store IAMPolicy retrieved: \n" + policy.toPrettyString());
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

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 getFhirStoreIamPolicy = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const fhirStoreId = 'my-fhir-store';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/fhirStores/${fhirStoreId}`;
  const request = {resource_};

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

getFhirStoreIamPolicy();

Python

def get_fhir_store_iam_policy(project_id, location, dataset_id, fhir_store_id):
    """Gets the IAM policy for the specified FHIR store.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir
    before running the sample."""
    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    api_version = "v1"
    service_name = "healthcare"
    # Instantiates 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 parent dataset's ID
    # fhir_store_id = 'my-fhir-store' # replace with the FHIR store ID
    fhir_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    fhir_store_name = f"{fhir_store_parent}/fhirStores/{fhir_store_id}"

    request = (
        client.projects()
        .locations()
        .datasets()
        .fhirStores()
        .getIamPolicy(resource=fhir_store_name)
    )
    response = request.execute()

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

curl

Um die IAM-Richtlinie für einen FHIR-Speicher zu lesen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des FHIR-Speichers und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit 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/fhirStores/FHIR_STORE_ID:getIamPolicy"

Die Antwort lautet:

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

PowerShell

Um die IAM-Richtlinie für einen FHIR-Speicher zu lesen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des FHIR-Speichers und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit Windows PowerShell.

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:getIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

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

Richtlinie ändern

In den folgenden Beispielen wird einem neuen Nutzer die Rolle roles/healthcare.fhirResourceReader zugewiesen. Weitere Informationen finden Sie unter projects.locations.datasets.fhirStores.setIamPolicy.

Richtlinie festlegen

Console

Führen Sie die folgenden Schritte aus, um eine IAM-Richtlinie auf FHIR-Speicherebene festzulegen:

  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Klicken Sie auf die ID des Datasets, das den FHIR-Speicher enthält, und wählen Sie dann den FHIR-Speicher aus, für den Sie eine Richtlinie festlegen möchten.
  3. Klicken Sie auf Infofeld anzeigen.
  4. Klicken Sie auf Hauptkonto hinzufügen.
  5. Geben Sie im Feld Neue Hauptkonten eine oder mehrere Identitäten ein, die Zugriff auf den FHIR-Speicher benötigen.
  6. Wählen Sie in der Liste Rolle auswählen unter Cloud Healthcare die Berechtigung aus, die Sie gewähren möchten. Beispiel: Healthcare-FHIR-Ressourcenleser.
  7. Klicken Sie auf Speichern.

gcloud

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.fhirResourceReader an:

{
  "role":"roles/healthcare.fhirResourceReader",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. In Ihrer Richtlinie darf kein leeres bindings-Array enthalten sein.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, führen Sie den entsprechenden set-iam-policy-Befehl aus, um die Änderungen vorzunehmen. Führen Sie den Befehl gcloud healthcare fhir-stores set-iam-policy aus, um eine FHIR-Richtlinie auf Speicherebene festzulegen. Geben Sie den FHIR-Speichernamen, den Dataset-Namen, den Speicherort und den Pfad zur erstellten Richtliniendatei an.

gcloud healthcare fhir-stores set-iam-policy FHIR_STORE_ID \
    --dataset=DATASET_ID \
    --location=LOCATION \
    POLICY_FILE_NAME

Wenn die Anfrage erfolgreich ist, werden der FHIR-Speichername und die Bindungen angezeigt.

Updated IAM policy for fhirStore [FHIR_STORE_ID].
bindings:
- members:
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  - user:NEW_USER_EMAIL_ADDRESS
  role: roles/healthcare.fhirResourceReader
etag: bytes
version: VERSION_NUMBER

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// setFHIRIAMPolicy sets the FHIR store's IAM policy.
func setFHIRIAMPolicy(w io.Writer, projectID, location, datasetID, fhirStoreID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	fhirService := healthcareService.Projects.Locations.Datasets.FhirStores

	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s/fhirStores/%s", projectID, location, datasetID, fhirStoreID)

	policy, err := fhirService.GetIamPolicy(name).Do()
	if err != nil {
		return fmt.Errorf("GetIamPolicy: %w", err)
	}

	policy.Bindings = append(policy.Bindings, &healthcare.Binding{
		Members: []string{"user:example@example.com"},
		Role:    "roles/viewer",
	})

	req := &healthcare.SetIamPolicyRequest{
		Policy: policy,
	}

	policy, err = fhirService.SetIamPolicy(name, req).Do()
	if err != nil {
		return fmt.Errorf("SetIamPolicy: %w", err)
	}

	fmt.Fprintf(w, "IAM Policy version: %v\n", policy.Version)
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets.FhirStores;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.Binding;
import com.google.api.services.healthcare.v1.model.Policy;
import com.google.api.services.healthcare.v1.model.SetIamPolicyRequest;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;

public class FhirStoreSetIamPolicy {
  private static final String FHIR_NAME = "projects/%s/locations/%s/datasets/%s/fhirStores/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void fhirStoreSetIamPolicy(String fhirStoreName) throws IOException {
    // String fhirStoreName =
    //    String.format(
    //        FHIR_NAME, "your-project-id", "your-region-id", "your-dataset-id", "your-fhir-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Configure the IAMPolicy to apply to the store.
    // For more information on understanding IAM roles, see the following:
    // https://cloud.google.com/iam/docs/understanding-roles
    Binding binding =
        new Binding()
            .setRole("roles/healthcare.fhirResourceReader")
            .setMembers(Arrays.asList("domain:google.com"));
    Policy policy = new Policy().setBindings(Arrays.asList(binding));
    SetIamPolicyRequest policyRequest = new SetIamPolicyRequest().setPolicy(policy);

    // Create request and configure any parameters.
    FhirStores.SetIamPolicy request =
        client
            .projects()
            .locations()
            .datasets()
            .fhirStores()
            .setIamPolicy(fhirStoreName, policyRequest);

    // Execute the request and process the results.
    Policy updatedPolicy = request.execute();
    System.out.println("FHIR policy has been updated: " + updatedPolicy.toPrettyString());
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

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 setFhirStoreIamPolicy = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const fhirStoreId = 'my-fhir-store';
  // const member = 'user:example@gmail.com';
  // const role = 'roles/healthcare.fhirStoreViewer';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/fhirStores/${fhirStoreId}`;
  const request = {
    resource_,
    resource: {
      policy: {
        bindings: [
          {
            members: member,
            role: role,
          },
        ],
      },
    },
  };

  const fhirStore =
    await healthcare.projects.locations.datasets.fhirStores.setIamPolicy(
      request
    );
  console.log(
    'Set FHIR store IAM policy:',
    JSON.stringify(fhirStore.data, null, 2)
  );
};

setFhirStoreIamPolicy();

Python

def set_fhir_store_iam_policy(
    project_id,
    location,
    dataset_id,
    fhir_store_id,
    member,
    role,
    etag=None,
):
    """Sets the IAM policy for the specified FHIR store.
        A single member will be assigned a single role. A member can be any of:
        - allUsers, that is, anyone
        - allAuthenticatedUsers, anyone authenticated with a Google account
        - user:email, as in 'user:somebody@example.com'
        - group:email, as in 'group:admins@example.com'
        - domain:domainname, as in 'domain:example.com'
        - serviceAccount:email,
            as in 'serviceAccount:my-other-app@appspot.gserviceaccount.com'
        A role can be any IAM role, such as 'roles/viewer', 'roles/owner',
        or 'roles/editor'

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir
    before running the sample."""
    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    api_version = "v1"
    service_name = "healthcare"
    # Instantiates 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 parent dataset's ID
    # fhir_store_id = 'my-fhir-store' # replace with the FHIR store ID
    # member = 'myemail@example.com'  # replace with an authorized member
    # role = 'roles/viewer'  # replace with a Healthcare API IAM role
    fhir_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    fhir_store_name = f"{fhir_store_parent}/fhirStores/{fhir_store_id}"

    policy = {"bindings": [{"role": role, "members": [member]}]}

    if etag is not None:
        policy["etag"] = etag

    request = (
        client.projects()
        .locations()
        .datasets()
        .fhirStores()
        .setIamPolicy(resource=fhir_store_name, body={"policy": policy})
    )
    response = request.execute()

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

curl

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.fhirResourceReader an:

{
  "role":"roles/healthcare.fhirResourceReader",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.fhirStores.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf FHIR-Speicherebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des FHIR-Speichers, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit curl, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.fhirResourceReader zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'policy': {
        'bindings': [
          {
            'role':'roles/healthcare.fhirStoreAdmin',
            'members': [
              'user:user-1@example.com'
            ]
          },
          {
            'role':'roles/healthcare.fhirResourceReader',
            'members': [
              'serviceAccount:service-account-13@appspot.gserviceaccount.com',
              'user:user-2@example.com',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:setIamPolicy"

Die Antwort lautet:

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

PowerShell

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.fhirResourceReader an:

{
  "role":"roles/healthcare.fhirResourceReader",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.fhirStores.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf FHIR-Speicherebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des FHIR-Speichers, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit Windows PowerShell, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.fhirResourceReader zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'policy': {
      'bindings': [
        {
          'role': 'roles/healthcare.fhirStoreAdmin',
          'members': [
            'user:user-1@example.com',
          ]
        },
        {
          'role': 'roles/healthcare.fhirResourceReader',
          'members': [
            'serviceAccount:service-account-13@appspot.gserviceaccount.com',
            'user:user-2@example.com',
            'user:NEW_USER_EMAIL_ADDRESS'
          ]
        }
      ]
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:setIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

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

IAM mit HL7v2-Speichern verwenden

In den folgenden Abschnitten wird gezeigt, wie Sie eine Richtlinie für einen HL7v2-Speicher abrufen, ändern und festlegen. Diese Abschnitte verwenden die folgende Beispielrichtlinie als Ausgangspunkt:

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

Richtlinie abrufen

Die folgenden Beispiele zeigen, wie Sie eine IAM-Richtlinie auf HL7v2-Speicherebene lesen. Weitere Informationen finden Sie unter projects.locations.datasets.hl7V2Stores.getIamPolicy.

Console

So zeigen Sie die IAM-Richtlinie für einen HL7v2-Speicher an:

  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Klicken Sie auf die ID des Datasets, das den HL7v2-Speicher enthält, und wählen Sie dann den HL7v2-Speicher aus, für den Sie eine Richtlinie abrufen möchten.
  3. Klicken Sie auf Infofeld anzeigen.
  4. Erweitern Sie eine Rolle, um die ihr zugewiesenen Hauptkonten anzeigen zu lassen.

gcloud

Führen Sie den Befehl hl7v2-stores get-iam-policy aus, um die IAM-Richtlinie für einen HL7v2-Speicher anzuzeigen. Geben Sie den HL7v2-Speichernamen, den Dataset-Namen und den Standort an.

gcloud healthcare hl7v2-stores get-iam-policy HL7V2_STORE_ID \
    --dataset=DATASET_ID \
    --location=LOCATION

Wenn die Anfrage erfolgreich ist, werden die Bindungen angezeigt.

bindings:
- members:
  - user:user-1@example.com
  role: roles/healthcare.hl7v2StoreAdmin
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  role: roles/healthcare.hl7v2Consumer
etag: bytes
version: VERSION_NUMBER

curl

Um die IAM-Richtlinie für einen HL7v2-Speicher zu lesen, stellen Sie eine GET-Anfrage und geben Sie den Namen des Datasets, den Namen des HL7v2-Speichers und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine GET-Anfrage mit 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/hl7V2Stores/HL7V2_STORE_ID:getIamPolicy"

Die Antwort lautet:

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

PowerShell

Um die IAM-Richtlinie für einen HL7v2-Speicher zu lesen, stellen Sie eine GET-Anfrage und geben Sie den Namen des Datasets, den Namen des HL7v2-Speichers und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine GET-Anfrage mit 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/hl7V2Stores/HL7V2_STORE_ID:getIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

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

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// hl7V2IAMPolicy gets the IAM policy.
func hl7V2IAMPolicy(w io.Writer, projectID, location, datasetID, hl7V2StoreID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	storesService := healthcareService.Projects.Locations.Datasets.Hl7V2Stores

	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s/hl7V2Stores/%s", projectID, location, datasetID, hl7V2StoreID)

	policy, err := storesService.GetIamPolicy(name).Do()
	if err != nil {
		return fmt.Errorf("GetIamPolicy: %w", err)
	}

	fmt.Fprintf(w, "IAM policy etag: %q\n", policy.Etag)
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets.Hl7V2Stores;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.Policy;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Collections;

public class Hl7v2StoreGetIamPolicy {
  private static final String HL7v2_NAME = "projects/%s/locations/%s/datasets/%s/hl7V2Stores/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void hl7v2StoreGetIamPolicy(String hl7v2StoreName) throws IOException {
    // String hl7v2StoreName =
    //    String.format(
    //        HL7v2_NAME, "your-project-id", "your-region-id", "your-dataset-id", "your-hl7v2-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Create request and configure any parameters.
    Hl7V2Stores.GetIamPolicy request =
        client.projects().locations().datasets().hl7V2Stores().getIamPolicy(hl7v2StoreName);

    // Execute the request and process the results.
    Policy policy = request.execute();
    System.out.println("HL7v2 store IAMPolicy retrieved: \n" + policy.toPrettyString());
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

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 getHl7v2StoreIamPolicy = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const hl7v2StoreId = 'my-hl7v2-store';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/hl7V2Stores/${hl7v2StoreId}`;
  const request = {resource_};

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

getHl7v2StoreIamPolicy();

Python

def get_hl7v2_store_iam_policy(project_id, location, dataset_id, hl7v2_store_id):
    """Gets the IAM policy for the specified HL7v2 store.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/hl7v2
    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 HL7v2 store's parent dataset
    # hl7v2_store_id = 'my-hl7v2-store'  # replace with the HL7v2 store's ID
    hl7v2_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    hl7v2_store_name = f"{hl7v2_store_parent}/hl7V2Stores/{hl7v2_store_id}"

    request = (
        client.projects()
        .locations()
        .datasets()
        .hl7V2Stores()
        .getIamPolicy(resource=hl7v2_store_name)
    )
    response = request.execute()

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

Richtlinie ändern

In den folgenden Beispielen wird einem neuen Nutzer die Rolle roles/healthcare.hl7V2Consumer zugewiesen. Weitere Informationen finden Sie unter projects.locations.datasets.hl7V2Stores.setIamPolicy.

Richtlinie festlegen

Console

Führen Sie die folgenden Schritte aus, um eine IAM-Richtlinie auf HL7v2-Speicherebene festzulegen:

  1. Öffnen Sie in der Google Cloud Console die Seite der Datasets.

    Zu „Datasets“

  2. Klicken Sie auf die ID des Datasets, das den HL7v2-Speicher enthält, und wählen Sie dann den HL7v2-Speicher aus, für den Sie eine Richtlinie festlegen möchten.
  3. Klicken Sie auf Infofeld anzeigen.
  4. Klicken Sie auf Hauptkonto hinzufügen.
  5. Geben Sie im Feld Neue Hauptkonten eine oder mehrere Identitäten ein, die Zugriff auf den HL7v2-Speicher benötigen.
  6. Wählen Sie in der Liste Rolle auswählen unter Cloud Healthcare die Berechtigung aus, die Sie gewähren möchten. Zum Beispiel Healthcare-HL7v2-Nachrichtenverbraucher.
  7. Klicken Sie auf Speichern.

gcloud

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.hl7V2Consumer an:

{
  "role":"roles/healthcare.hl7V2Consumer",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, führen Sie den entsprechenden set-iam-policy-Befehl aus, um die Änderungen vorzunehmen. Führen Sie den Befehl gcloud healthcare hl7v2-stores set-iam-policy aus, um eine HL7v2-Richtlinie auf Speicherebene festzulegen. Geben Sie den HL7v2-Speichernamen, den Dataset-Namen, den Speicherort und den Pfad zur erstellten Richtliniendatei an.

gcloud healthcare hl7v2-stores set-iam-policy HL7V2_STORE_ID \
    --dataset=DATASET_ID \
    --location=LOCATION \
    POLICY_FILE_NAME

Wenn die Anfrage erfolgreich ist, werden der HL7v2-Speichername und die Bindungen angezeigt.

Updated IAM policy for hl7v2Store [HL7V2_STORE_ID].
bindings:
- members:
  - user:user-1@example.com
  role: roles/healthcare.hl7v2StoreAdmin
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - user:user-2@example.com
  - user:NEW_USER_EMAIL_ADDRESS
  role: roles/healthcare.hl7v2Consumer
etag: bytes
version: VERSION_NUMBER

curl

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.hl7V2Consumer an:

{
  "role":"roles/healthcare.hl7V2Consumer",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.hl7V2Stores.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf HL7v2-Speicherebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des HL7v2-Speichers, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit curl, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.hl7V2Consumer zuzuweisen.

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'policy': {
        'bindings': [
          {
            'role':'roles/healthcare.hl7V2StoreAdmin',
            'members': [
              'user:user-1@example.com'
            ]
          },
          {
            'role':'roles/healthcare.hl7V2Consumer',
            'members': [
              'serviceAccount:service-account-13@appspot.gserviceaccount.com',
              'user:user-2@example.com',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID:setIamPolicy"

Die Antwort lautet:

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

PowerShell

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Um einem neuen Nutzer die Rolle zuzuweisen, hängen Sie seine E-Mail-Adresse an das Array members unter der Bindung roles/healthcare.hl7V2Consumer an:

{
  "role":"roles/healthcare.hl7V2Consumer",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@example.com",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.locations.datasets.hl7V2Stores.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf HL7v2-Speicherebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Datasets, den Namen des HL7v2-Speichers, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit curl, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.hl7V2Consumer zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'policy': {
      'bindings': [
        {
          'role': 'roles/healthcare.hl7V2StoreAdmin',
          'members': [
            'user:user-1@example.com',
          ]
        },
        {
          'role': 'roles/healthcare.hl7V2Consumer',
          'members': [
            'serviceAccount:service-account-13@appspot.gserviceaccount.com',
            'user:user-2@example.com',
            'user:NEW_USER_EMAIL_ADDRESS'
          ]
        }
      ]
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID:setIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

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

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// setHL7V2IAMPolicy sets an IAM policy.
func setHL7V2IAMPolicy(w io.Writer, projectID, location, datasetID, hl7V2StoreID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	storesService := healthcareService.Projects.Locations.Datasets.Hl7V2Stores

	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s/hl7V2Stores/%s", projectID, location, datasetID, hl7V2StoreID)

	policy, err := storesService.GetIamPolicy(name).Do()
	if err != nil {
		return fmt.Errorf("GetIamPolicy: %w", err)
	}

	policy.Bindings = append(policy.Bindings, &healthcare.Binding{
		Members: []string{"user:example@example.com"},
		Role:    "roles/viewer",
	})

	req := &healthcare.SetIamPolicyRequest{
		Policy: policy,
	}

	policy, err = storesService.SetIamPolicy(name, req).Do()
	if err != nil {
		return fmt.Errorf("SetIamPolicy: %w", err)
	}

	fmt.Fprintf(w, "Sucessfully set IAM Policy.\n")
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets.Hl7V2Stores;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.Binding;
import com.google.api.services.healthcare.v1.model.Policy;
import com.google.api.services.healthcare.v1.model.SetIamPolicyRequest;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;

public class Hl7v2StoreSetIamPolicy {
  private static final String HL7v2_NAME = "projects/%s/locations/%s/datasets/%s/hl7V2Stores/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void hl7v2StoreSetIamPolicy(String hl7v2StoreName) throws IOException {
    // String hl7v2StoreName =
    //    String.format(
    //        HL7v2_NAME, "your-project-id", "your-region-id", "your-dataset-id", "your-hl7v2-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Configure the IAMPolicy to apply to the store.
    // For more information on understanding IAM roles, see the following:
    // https://cloud.google.com/iam/docs/understanding-roles
    Binding binding =
        new Binding()
            .setRole("roles/healthcare.hl7V2Consumer")
            .setMembers(Arrays.asList("domain:google.com"));
    Policy policy = new Policy().setBindings(Arrays.asList(binding));
    SetIamPolicyRequest policyRequest = new SetIamPolicyRequest().setPolicy(policy);

    // Create request and configure any parameters.
    Hl7V2Stores.SetIamPolicy request =
        client
            .projects()
            .locations()
            .datasets()
            .hl7V2Stores()
            .setIamPolicy(hl7v2StoreName, policyRequest);

    // Execute the request and process the results.
    Policy updatedPolicy = request.execute();
    System.out.println("HL7v2 policy has been updated: " + updatedPolicy.toPrettyString());
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

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 setHl7v2StoreIamPolicy = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const dicomStoreId = 'my-dicom-store';
  // const member = 'user:example@gmail.com';
  // const role = 'roles/healthcare.hl7V2StoreViewer';
  const resource_ = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/hl7V2Stores/${hl7v2StoreId}`;
  const request = {
    resource_,
    resource: {
      policy: {
        bindings: [
          {
            members: member,
            role: role,
          },
        ],
      },
    },
  };

  const hl7v2Store =
    await healthcare.projects.locations.datasets.hl7V2Stores.setIamPolicy(
      request
    );
  console.log(
    'Set HL7v2 store IAM policy:',
    JSON.stringify(hl7v2Store.data, null, 2)
  );
};

setHl7v2StoreIamPolicy();

Python

def set_hl7v2_store_iam_policy(
    project_id, location, dataset_id, hl7v2_store_id, member, role, etag=None
):
    """Sets the IAM policy for the specified HL7v2 store.
        A single member will be assigned a single role. A member can be any of:
        - allUsers, that is, anyone
        - allAuthenticatedUsers, anyone authenticated with a Google account
        - user:email, as in 'user:somebody@example.com'
        - group:email, as in 'group:admins@example.com'
        - domain:domainname, as in 'domain:example.com'
        - serviceAccount:email,
            as in 'serviceAccount:my-other-app@appspot.gserviceaccount.com'
        A role can be any IAM role, such as 'roles/viewer', 'roles/owner',
        or 'roles/editor'.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/hl7v2
    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 HL7v2 store's parent dataset
    # hl7v2_store_id = 'my-hl7v2-store'  # replace with the HL7v2 store's ID
    # member = 'myemail@example.com'  # replace with an authorized member
    # role = 'roles/viewer'  # replace with a Healthcare API IAM role
    hl7v2_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    hl7v2_store_name = f"{hl7v2_store_parent}/hl7V2Stores/{hl7v2_store_id}"

    policy = {"bindings": [{"role": role, "members": [member]}]}

    if etag is not None:
        policy["etag"] = etag

    request = (
        client.projects()
        .locations()
        .datasets()
        .hl7V2Stores()
        .setIamPolicy(resource=hl7v2_store_name, body={"policy": policy})
    )
    response = request.execute()

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

IAM mit der Healthcare Natural Language API verwenden

In den folgenden Abschnitten wird gezeigt, wie Sie eine Richtlinie für die Healthcare Natural Language API abrufen, ändern und festlegen. Diese Abschnitte verwenden die folgende Beispielrichtlinie als Ausgangspunkt:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com"
      ]
    }
  ]
}

Richtlinie abrufen

Die folgenden Beispiele zeigen, wie eine IAM-Richtlinie auf Projektebene gelesen wird. Weitere Informationen finden Sie im Artikel zur Methode projects.getIamPolicy.

curl

Um die IAM-Richtlinie für ein Projekt zu lesen, stellen Sie eine POST-Anfrage und geben Sie den Namen des Projekts und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit curl.

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     "https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy"

Die Antwort lautet:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com"
      ]
    }
  ]
}

PowerShell

Wenn Sie die IAM-Richtlinie für ein Projekt aufrufen möchten, stellen Sie eine POST-Anfrage und geben Sie den Namen des Projekts und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit Windows PowerShell.

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

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -Uri "https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com"
      ]
    }
  ]
}

Console

Führen Sie die folgenden Schritte aus, um die IAM-Richtlinie für ein Projekt aufzurufen:

  1. Öffnen Sie in der Google Cloud Console die Seite "IAM".

    IAM aufrufen

  2. Wenn Sie die einer Rolle zugewiesenen Hauptkonten ansehen möchten, klicken Sie auf Rollen und maximieren dann die Rolle.

gcloud

Zum Aufrufen der IAM-Richtlinie für ein Projekt führen Sie den Befehl gcloud projects get-iam-policy aus. Geben Sie den Projektnamen in der Anfrage an.

gcloud projects get-iam-policy PROJECT_ID 

Wenn die Anfrage erfolgreich ist, werden die Bindungen angezeigt.

bindings:
- members:
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  role: roles/healthcare.nlpServiceViewer
etag: bytes
version: VERSION_NUMBER

Richtlinie ändern

In den folgenden Beispielen wird einem Dienst die Rolle roles/healthcare.nlpServiceViewer zugewiesen. Weitere Informationen finden Sie unter projects.setIamPolicy.

Richtlinie festlegen

Console

Führen Sie die folgenden Schritte aus, um eine IAM-Richtlinie auf Projektebene festzulegen:

  1. Öffnen Sie in der Google Cloud Console die Seite "IAM".

    IAM aufrufen

  2. Klicken Sie neben dem Hauptkonto auf die Schaltfläche Bearbeiten oder klicken Sie auf Hauptkonto hinzufügen und geben Sie dann im Feld Neue Hauptkonten eine oder mehrere Identitäten ein, die Zugriff auf das Projekt benötigen.
  3. Wählen Sie in der Liste Rolle auswählen unter Cloud Healthcare Healthcare Natural Language-Dienstbetrachter aus.
  4. Klicken Sie auf Speichern.

gcloud

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Wenn Sie einem neuen Dienstkonto die Rolle zuweisen möchten, fügen Sie unter roles/healthcare.nlpServiceViewer-Bindung die E-Mail-Adresse des Dienstkontos unter members hinzu:

{
  "role":"roles/healthcare.nlpServiceViewer",
  "members": [
      "serviceAccount:service-account-13@appspot.gserviceaccount.com",
      "serviceAccount:NEW_SERVICE_ACCOUNT_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. In Ihrer Richtlinie darf kein leeres bindings-Array enthalten sein.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, führen Sie den gcloud projects set-iam-policy-Befehl aus, um die Änderungen vorzunehmen. Geben Sie das Projekt und den Pfad zur von Ihnen erstellten Richtliniendatei an.

gcloud projects set-iam-policy PROJECT_STORE_ID \
    POLICY_FILE_NAME 

Wenn die Anfrage erfolgreich ist, werden der Projektname und die Bindungen angezeigt.

Updated IAM policy for project [PROJECT_ID].
bindings:
- members:
  - serviceAccount:service-account-13@appspot.gserviceaccount.com
  - serviceAccount:NEW_USER_EMAIL_ADDRESS
  role: roles/healthcare.nlpServiceViewer
etag: bytes
version: VERSION_NUMBER

curl

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Wenn Sie einem neuen Dienstkonto die Rolle zuweisen möchten, fügen Sie unter roles/healthcare.nlpServiceViewer-Bindung die E-Mail-Adresse des Dienstkontos unter members hinzu:

{
  "role":"roles/healthcare.nlpServiceViewer",
  "members": [
      "serviceAccount:service-account-13@appspot.gserviceaccount.com",
      "serviceAccount:NEW_SERVICE_ACCOUNT_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf Projektebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Projektnamen, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit curl, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.nlpServiceViewer zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'policy': {
        'bindings': [
          {
            'role':'roles/healthcare.nlpServiceViewer',
            'members': [
              'serviceAccount:service-account-13@appspot.gserviceaccount.com'
            ]
          }
        ]
      }
    }" "https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy"

Die Antwort lautet:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com"
      ]
    }
  ]
}

PowerShell

Sie können Nutzern Rollen dadurch zuweisen oder entziehen, dass Sie die Richtlinie ändern, die Sie abgerufen haben – programmatisch oder mithilfe eines Texteditors. Der Wert etag ändert sich, wenn sich die Richtlinie ändert. Sie müssen den aktuellen Wert also angeben.

Wenn Sie einem neuen Dienstkonto die Rolle zuweisen möchten, fügen Sie unter roles/healthcare.nlpServiceViewer-Bindung die E-Mail-Adresse des Dienstkontos unter members hinzu:

{
  "role":"roles/healthcare.nlpServiceViewer",
  "members": [
      "serviceAccount:service-account-13@appspot.gserviceaccount.com",
      "serviceAccount:NEW_SERVICE_ACCOUNT_EMAIL_ADDRESS"
  ]
}
Wenn Sie den Zugriff eines Hauptkontos widerrufen möchten, löschen Sie seine E-Mail-Adresse aus dem members-Array. Bis Zugriff des letzten Hauptkontos mit einer Rolle widerrufen, bindings-Array löschen für die Rolle. Die Richtlinie darf kein leeres bindings-Array enthalten.

Nachdem Sie die Richtlinie geändert haben, um die entsprechenden Rollen zuzuweisen, rufen Sie projects.setIamPolicy auf, um die Aktualisierungen vorzunehmen.

Um eine IAM-Richtlinie auf Projektebene festzulegen, stellen Sie eine POST-Anfrage und geben Sie den Projektnamen, die Richtlinie und ein Zugriffstoken an.

Das folgende Beispiel zeigt eine POST-Anfrage mit curl, um einem neuen Nutzer die vorhandene Rolle roles/healthcare.nlpServiceViewer zuzuweisen:

Die Richtlinie kann, wie hier gezeigt, direkt in die Anfrage geschrieben oder als JSON- oder YAML-Datei übergeben werden. Beispiele zum Formatieren einer Richtlinie als JSON oder YAML finden Sie unter Policy.
$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'policy': {
      'bindings': [
        {
          'role': 'roles/healthcare.nlpServiceViewer',
          'members': [
            'serviceAccount:service-account-13@appspot.gserviceaccount.com',
            'serviceAccount:NEW_USER_EMAIL_ADDRESS'
          ]
        }
      ]
    }
  }" `
  -Uri "https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy" | Select-Object -Expand Content

Die Antwort lautet:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "serviceAccount:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

Nächste Schritte