Mengontrol akses ke resource Cloud Healthcare API

Halaman ini menjelaskan cara mengontrol akses ke set data dan penyimpanan data Cloud Healthcare API menggunakan izin Identity and Access Management (IAM). Dengan IAM, Anda dapat mengontrol siapa saja yang memiliki akses ke set data dan penyimpanan data Anda. Guna mempelajari lebih lanjut IAM untuk Cloud Healthcare API, lihat Kontrol akses.

Ringkasan kebijakan IAM

Akses ke resource dikelola melalui kebijakan IAM. Kebijakan berisi array, yang disebut bindings. Array ini berisi kumpulan binding, yang merupakan asosiasi antar-akun utama, seperti akun pengguna atau akun layanan, dan peran. Kebijakan direpresentasikan menggunakan JSON atau YAML.

Kebijakan contoh berikut menunjukkan [email protected] yang telah diberi peran roles/healthcare.datasetAdmin serta [email protected] dan [email protected] telah diberi peran roles/healthcare.datasetViewer:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.datasetAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.datasetViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Untuk memperbarui kebijakan resource, gunakan pola read-modify-write. Tidak ada metode terpisah untuk membuat, mengubah, dan mencabut akses pengguna.

Untuk memperbarui kebijakan, selesaikan langkah-langkah berikut:

  1. Baca kebijakan saat ini dengan memanggil metode getIamPolicy() resource. Misalnya, untuk membaca kebijakan set data saat ini, panggil projects.locations.datasets.getIamPolicy.
  2. Edit kebijakan yang ditampilkan, baik menggunakan editor teks maupun secara terprogram, untuk menambahkan atau menghapus akun utama yang berlaku dan pemberian perannya.
  3. Tulis kebijakan yang telah diperbarui dengan memanggil metode setIamPolicy() resource. Misalnya, untuk menulis kebijakan set data yang telah diperbarui, panggil projects.locations.datasets.setIamPolicy.

Bagian berikut menunjukkan cara mendapatkan, mengubah, dan menetapkan kebijakan untuk penyimpanan izin. Bagian ini menggunakan contoh kebijakan berikut sebagai titik awal:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.consentStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.consentReader",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Mendapatkan kebijakan

Contoh berikut menunjukkan cara membaca kebijakan IAM tingkat penyimpanan izin. Untuk informasi selengkapnya, lihat projects.locations.datasets.consentStores.getIamPolicy.

Untuk melihat kebijakan IAM untuk penyimpanan izin:

  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Klik ID set data yang berisi penyimpanan izin, lalu pilih penyimpanan izin yang ingin Anda dapatkan kebijakannya.
  3. Klik Tampilkan panel info.
  4. Untuk melihat akun utama yang ditetapkan ke suatu peran, luaskan peran.

Untuk melihat kebijakan IAM untuk penyimpanan izin, jalankan perintah gcloud healthcare consent-stores get-iam-policy. Tentukan nama penyimpanan izin, nama set data, dan lokasi.

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

Jika permintaan berhasil, binding akan ditampilkan.

bindings:
- members:
  - user:[email protected]
  role: roles/healthcare.consentStoreAdmin
  - serviceAccount:[email protected]
  - user:[email protected]
  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

Agar dapat membaca kebijakan IAM untuk penyimpanan izin, buat permintaan GET dan tentukan nama set data, nama penyimpanan izin, dan token akses.

Contoh berikut menunjukkan permintaan GET yang menggunakan 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"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.consentStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.consentReader",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Agar dapat membaca kebijakan IAM untuk penyimpanan izin, buat permintaan GET dan tentukan nama set data, nama penyimpanan izin, dan token akses.

Contoh berikut menunjukkan permintaan GET menggunakan 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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.consentStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.consentReader",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Mengubah kebijakan

Contoh berikut memberikan peran roles/healthcare.consentReader kepada pengguna baru. Untuk informasi selengkapnya, lihat projects.locations.datasets.consentStores.setIamPolicy.

Menetapkan kebijakan

Untuk menetapkan kebijakan IAM tingkat penyimpanan izin, lakukan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Klik ID set data yang berisi penyimpanan izin, lalu pilih penyimpanan izin yang ingin Anda tetapkan kebijakannya.
  3. Klik Tampilkan panel info.
  4. Klik Tambahkan akun utama.
  5. Di kolom Akun utama baru, masukkan satu atau beberapa identitas yang memerlukan akses ke penyimpanan izin.
  6. Dalam daftar Select a role, di bagian Cloud Healthcare, pilih izin yang ingin Anda berikan. Misalnya, Healthcare Consent Store Viewer.
  7. Klik Save.

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat emailnya ke array members dalam binding roles/healthcare.consentReader:

{
  "role":"roles/healthcare.consentReader",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, jalankan perintah set-iam-policy yang sesuai untuk melakukan perubahan. Untuk menetapkan kebijakan tingkat penyimpanan izin, jalankan perintah gcloud healthcare consent-stores set-iam-policy. Tentukan nama penyimpanan izin, nama set data, lokasi, dan jalur ke file kebijakan yang Anda buat.

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

Jika permintaan berhasil, nama penyimpanan izin dan binding akan ditampilkan.

Updated IAM policy for consentStore [CONSENT_STORE_ID].
bindings:
- members:
  - user:[email protected]
  role: roles/healthcare.consentStoreAdmin
  - serviceAccount:[email protected]
  - user:[email protected]
  - 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:[email protected]';
  // 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:[email protected]'
    - group:email, as in 'group:[email protected]'
    - domain:domainname, as in 'domain:example.com'
    - serviceAccount:email,
        as in 'serviceAccount:[email protected]'
    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 = '[email protected]'  # 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

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat emailnya ke array members dalam binding roles/healthcare.consentReader:

{
  "role":"roles/healthcare.consentReader",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.consentStores.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM tingkat penyimpanan izin, buat permintaan POST dan tentukan nama set data, nama penyimpanan izin, kebijakan, dan token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan curl untuk memberikan peran roles/healthcare.consentReader yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]'
            ]
          },
          {
            'role':'roles/healthcare.consentReader',
            'members': [
              'serviceAccount:[email protected]',
              'user:[email protected]',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:setIamPolicy"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.consentStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.consentReader",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat emailnya ke array members dalam binding roles/healthcare.consentReader:

{
  "role":"roles/healthcare.consentReader",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.consentStores.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM tingkat penyimpanan izin, buat permintaan POST dan tentukan nama set data, nama penyimpanan izin, kebijakan, dan token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan Windows PowerShell untuk memberikan peran roles/healthcare.consentReader yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]',
          ]
        },
        {
          'role': 'roles/healthcare.consentReader',
          'members': [
            'serviceAccount:[email protected]',
            'user:[email protected]',
            '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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.consentStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.consentReader",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

Menggunakan IAM dengan set data

Bagian berikut menunjukkan cara mendapatkan, mengubah, dan menetapkan kebijakan untuk set data. Bagian ini menggunakan contoh kebijakan berikut sebagai titik awal:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.datasetAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.datasetViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Mendapatkan kebijakan

Contoh berikut menunjukkan cara membaca kebijakan IAM tingkat set data. Untuk informasi selengkapnya, lihat projects.locations.datasets.getIamPolicy.

curl

Agar dapat membaca kebijakan IAM untuk set data, buat permintaan GET dan tentukan nama set data dan token akses.

Contoh berikut menunjukkan permintaan GET yang menggunakan 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"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.datasetAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.datasetViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

PowerShell

Agar dapat melihat kebijakan IAM untuk set data, buat permintaan GET dan tentukan nama set data serta token akses.

Contoh berikut menunjukkan permintaan GET menggunakan 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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.datasetAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.datasetViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Konsol

Untuk melihat kebijakan IAM untuk set data:
  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Pilih set data, lalu klik Tampilkan panel info.
  3. Untuk melihat akun utama yang ditetapkan ke suatu peran, luaskan peran.

gcloud

Untuk melihat kebijakan IAM untuk set data, jalankan perintah gcloud healthcare datasets get-iam-policy. Tentukan nama set data dan lokasi.

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

Jika permintaan berhasil, binding akan ditampilkan.

bindings:
- members:
  - serviceAccount:[email protected]
  - user:[email protected]
  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

Mengubah kebijakan

Contoh berikut memberikan peran roles/healthcare.datasetViewer kepada pengguna baru:

Menetapkan kebijakan

Konsol

Untuk menetapkan kebijakan IAM tingkat set data, lakukan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Pilih set data yang ingin Anda tetapkan kebijakannya, lalu klik Show info panel.
  3. Klik Tambahkan akun utama.
  4. Di kolom New principals, masukkan satu atau beberapa identitas yang memerlukan akses ke set data.
  5. Dalam daftar Select a role, di bagian Cloud Healthcare, pilih izin yang ingin Anda berikan. Misalnya, Healthcare Dataset Viewer.
  6. Klik Save.

gcloud

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat emailnya ke array members dalam binding roles/healthcare.datasetViewer:

{
  "role":"roles/healthcare.datasetViewer",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, jalankan perintah set-iam-policy yang sesuai untuk melakukan perubahan. Untuk menetapkan kebijakan tingkat set data, jalankan perintah gcloud healthcare datasets set-iam-policy. Tentukan nama set data, lokasi, dan jalur ke file kebijakan yang Anda buat.

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

Jika permintaan berhasil, nama set data dan binding akan ditampilkan.

Updated IAM policy for dataset [DATASET_ID].
bindings:
- members:
  - serviceAccount:[email protected]
  - user:[email protected]
  role: roles/healthcare.datasetAdmin
  - user:[email protected]
  - user:NEW_USER_EMAIL_ADDRESS
  role: roles/healthcare.datasetViewer
etag: bytes
version: VERSION_NUMBER

curl

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat emailnya ke array members dalam binding roles/healthcare.datasetViewer:

{
  "role":"roles/healthcare.datasetViewer",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM level set data, buat permintaan POST dan tentukan nama set data, kebijakan, serta token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan curl untuk memberikan peran roles/healthcare.datasetViewer yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]'
            ]
          },
          {
            'role':'roles/healthcare.datasetViewer',
            'members': [
              'serviceAccount:[email protected]',
              'user:[email protected]',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID:setIamPolicy"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.datasetAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.datasetViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

PowerShell

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat emailnya ke array members dalam binding roles/healthcare.datasetViewer:

{
  "role":"roles/healthcare.datasetViewer",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM level set data, buat permintaan POST dan tentukan nama set data, kebijakan, serta token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan Windows PowerShell untuk memberikan peran roles/healthcare.datasetViewer yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]'
          ]
        },
        {
          'role': 'roles/healthcare.datasetViewer',
          'members': [
            'serviceAccount:[email protected]',
            'user:[email protected]',
            'user:NEW_USER_EMAIL_ADDRESS'
          ]
        }
      ]
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID:setIamPolicy" | Select-Object -Expand Content

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.datasetAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.datasetViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "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:[email protected]"},
		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:[email protected]';
  // 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:[email protected]'
        - group:email, as in 'group:[email protected]'
        - domain:domainname, as in 'domain:example.com'
        - serviceAccount:email,
            as in 'serviceAccount:[email protected]'

        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:[email protected]'
    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

Menggunakan IAM dengan penyimpanan DICOM

Bagian berikut menunjukkan cara mendapatkan, mengubah, dan menetapkan kebijakan untuk penyimpanan DICOM. Bagian ini menggunakan contoh kebijakan berikut sebagai titik awal:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.dicomStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.dicomViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Mendapatkan kebijakan

Contoh berikut menunjukkan cara membaca kebijakan IAM tingkat toko DICOM. Untuk informasi selengkapnya, lihat projects.locations.datasets.dicomStores.getIamPolicy.

Konsol

Guna melihat kebijakan IAM untuk penyimpanan DICOM:

  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Klik ID set data yang berisi penyimpanan DICOM, lalu pilih penyimpanan DICOM yang ingin Anda dapatkan kebijakannya.
  3. Klik Tampilkan panel info.
  4. Untuk melihat akun utama yang ditetapkan ke suatu peran, luaskan peran.

gcloud

Untuk melihat kebijakan IAM untuk penyimpanan DICOM, jalankan perintah gcloud healthcare dicom-stores get-iam-policy. Tentukan nama penyimpanan DICOM, nama set data, dan lokasi.

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

Jika permintaan berhasil, binding akan ditampilkan.

bindings:
- members:
  - user:[email protected]
  role: roles/healthcare.dicomStoreAdmin
  - serviceAccount:[email protected]
  - user:[email protected]
  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

Guna membaca kebijakan IAM untuk penyimpanan DICOM, buat permintaan GET dan tentukan nama set data, nama penyimpanan DICOM, dan token akses.

Contoh berikut menunjukkan permintaan GET yang menggunakan 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"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.dicomStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.dicomViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

PowerShell

Guna membaca kebijakan IAM untuk penyimpanan DICOM, buat permintaan GET dan tentukan nama set data, nama penyimpanan DICOM, dan token akses.

Contoh berikut menunjukkan permintaan GET menggunakan 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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.dicomStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.dicomViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Mengubah kebijakan

Contoh berikut memberikan peran roles/healthcare.dicomViewer kepada pengguna baru. Untuk informasi selengkapnya, lihat projects.locations.datasets.dicomStores.setIamPolicy.

Menetapkan kebijakan

Konsol

Untuk menetapkan kebijakan IAM tingkat penyimpanan DICOM, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Klik ID set data yang berisi penyimpanan DICOM, lalu pilih penyimpanan DICOM yang ingin Anda tetapkan kebijakannya.
  3. Klik Tampilkan panel info.
  4. Klik Tambahkan akun utama.
  5. Di kolom New principals, masukkan satu atau beberapa identitas yang memerlukan akses ke penyimpanan DICOM.
  6. Dalam daftar Select a role, di bagian Cloud Healthcare, pilih izin yang ingin Anda berikan. Misalnya, Healthcare DICOM Store Viewer.
  7. Klik Save.

gcloud

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat emailnya ke array members dalam binding roles/healthcare.dicomViewer:

{
  "role":"roles/healthcare.dicomViewer",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, jalankan perintah set-iam-policy yang sesuai untuk melakukan perubahan. Untuk menetapkan kebijakan tingkat toko DICOM, jalankan perintah gcloud healthcare dicom-stores set-iam-policy. Tentukan nama penyimpanan DICOM, nama set data, lokasi, dan jalur ke file kebijakan yang Anda buat.

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

Jika permintaan berhasil, nama penyimpanan DICOM dan binding akan ditampilkan.

Updated IAM policy for dicomStore [DICOM_STORE_ID].
bindings:
- members:
  - user:[email protected]
  role: roles/healthcare.dicomStoreAdmin
  - serviceAccount:[email protected]
  - user:[email protected]
  - 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:[email protected]"},
		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:[email protected]';
  // 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:[email protected]'
    - group:email, as in 'group:[email protected]'
    - domain:domainname, as in 'domain:example.com'
    - serviceAccount:email,
        as in 'serviceAccount:[email protected]'

    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 = '[email protected]'  # 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

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat emailnya ke array members dalam binding roles/healthcare.dicomViewer:

{
  "role":"roles/healthcare.dicomViewer",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.dicomStores.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM tingkat toko DICOM, buat permintaan POST dan tentukan nama set data, nama penyimpanan DICOM, kebijakan, dan token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan curl untuk memberikan peran roles/healthcare.dicomViewer yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]'
            ]
          },
          {
            'role':'roles/healthcare.dicomViewer',
            'members': [
              'serviceAccount:[email protected]',
              'user:[email protected]',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setIamPolicy"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.dicomStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.dicomViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

PowerShell

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat emailnya ke array members dalam binding roles/healthcare.dicomViewer:

{
  "role":"roles/healthcare.dicomViewer",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.dicomStores.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM tingkat toko DICOM, buat permintaan POST dan tentukan nama set data, nama penyimpanan DICOM, kebijakan, dan token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan Windows PowerShell untuk memberikan peran roles/healthcare.dicomViewer yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]',
          ]
        },
        {
          'role': 'roles/healthcare.dicomViewer',
          'members': [
            'serviceAccount:[email protected]',
            'user:[email protected]',
            '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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.dicomStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.dicomViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

Menggunakan IAM dengan penyimpanan FHIR

Bagian berikut menunjukkan cara mendapatkan, mengubah, dan menetapkan kebijakan untuk penyimpanan FHIR. Bagian ini menggunakan contoh kebijakan berikut sebagai titik awal:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.fhirStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.fhirResourceReader",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Mendapatkan kebijakan

Contoh berikut menunjukkan cara membaca kebijakan IAM tingkat toko FHIR. Untuk informasi selengkapnya, lihat projects.locations.datasets.fhirStores.getIamPolicy.

Konsol

Guna melihat kebijakan IAM untuk penyimpanan FHIR:

  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Klik ID set data yang berisi penyimpanan FHIR, lalu pilih penyimpanan FHIR yang ingin Anda dapatkan kebijakannya.
  3. Klik Tampilkan panel info.
  4. Untuk melihat akun utama yang ditetapkan ke suatu peran, luaskan peran.

gcloud

Untuk melihat kebijakan IAM penyimpanan FHIR, jalankan perintah gcloud healthcare fhir-stores get-iam-policy. Tentukan nama penyimpanan FHIR, nama set data, dan lokasi.

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

Jika permintaan berhasil, binding akan ditampilkan.

bindings:
- members:
  - user:[email protected]
  role: roles/healthcare.fhirStoreAdmin
  - serviceAccount:[email protected]
  - user:[email protected]
  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

Guna membaca kebijakan IAM untuk penyimpanan FHIR, buat permintaan POST dan tentukan nama set data, nama penyimpanan FHIR, dan token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan 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"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.fhirStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.fhirResourceReader",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

PowerShell

Guna membaca kebijakan IAM untuk penyimpanan FHIR, buat permintaan POST dan tentukan nama set data, nama penyimpanan FHIR, dan token akses.

Contoh berikut menunjukkan permintaan POST menggunakan 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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.fhirStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.fhirResourceReader",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Mengubah kebijakan

Contoh berikut memberikan peran roles/healthcare.fhirResourceReader kepada pengguna baru. Untuk informasi selengkapnya, lihat projects.locations.datasets.fhirStores.setIamPolicy.

Menetapkan kebijakan

Konsol

Untuk menetapkan kebijakan IAM tingkat toko FHIR, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Klik ID set data yang berisi penyimpanan FHIR, lalu pilih penyimpanan FHIR yang ingin ditetapkan kebijakannya.
  3. Klik Tampilkan panel info.
  4. Klik Tambahkan akun utama.
  5. Di kolom New principals, masukkan satu atau beberapa identitas yang memerlukan akses ke penyimpanan FHIR.
  6. Dalam daftar Select a role, di bagian Cloud Healthcare, pilih izin yang ingin Anda berikan. Misalnya, Healthcare FHIR Resource Reader.
  7. Klik Save.

gcloud

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat email mereka ke array members pada binding roles/healthcare.fhirResourceReader:

{
  "role":"roles/healthcare.fhirResourceReader",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, jalankan perintah set-iam-policy yang sesuai untuk melakukan perubahan. Untuk menetapkan kebijakan tingkat toko FHIR, jalankan perintah gcloud healthcare fhir-stores set-iam-policy. Tentukan nama penyimpanan FHIR, nama set data, lokasi, dan jalur ke file kebijakan yang Anda buat.

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

Jika permintaan berhasil, nama penyimpanan FHIR dan binding akan ditampilkan.

Updated IAM policy for fhirStore [FHIR_STORE_ID].
bindings:
- members:
  - serviceAccount:[email protected]
  - user:[email protected]
  - 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:[email protected]"},
		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:[email protected]';
  // 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:[email protected]'
        - group:email, as in 'group:[email protected]'
        - domain:domainname, as in 'domain:example.com'
        - serviceAccount:email,
            as in 'serviceAccount:[email protected]'
        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 = '[email protected]'  # 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

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat email mereka ke array members pada binding roles/healthcare.fhirResourceReader:

{
  "role":"roles/healthcare.fhirResourceReader",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.fhirStores.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM tingkat toko FHIR, buat permintaan POST dan tentukan nama set data, nama penyimpanan FHIR, kebijakan, dan token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan curl untuk memberikan peran roles/healthcare.fhirResourceReader yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]'
            ]
          },
          {
            'role':'roles/healthcare.fhirResourceReader',
            'members': [
              'serviceAccount:[email protected]',
              'user:[email protected]',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:setIamPolicy"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.fhirStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.fhirResourceViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

PowerShell

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat email mereka ke array members pada binding roles/healthcare.fhirResourceReader:

{
  "role":"roles/healthcare.fhirResourceReader",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.fhirStores.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM tingkat toko FHIR, buat permintaan POST dan tentukan nama set data, nama penyimpanan FHIR, kebijakan, dan token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan Windows PowerShell untuk memberikan peran roles/healthcare.fhirResourceReader yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]',
          ]
        },
        {
          'role': 'roles/healthcare.fhirResourceReader',
          'members': [
            'serviceAccount:[email protected]',
            'user:[email protected]',
            '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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.fhirStoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.fhirResourceViewer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

Menggunakan IAM dengan penyimpanan HL7v2

Bagian berikut menunjukkan cara mendapatkan, mengubah, dan menetapkan kebijakan untuk penyimpanan HL7v2. Bagian ini menggunakan contoh kebijakan berikut sebagai titik awal:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.hl7V2StoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.hl7V2Consumer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

Mendapatkan kebijakan

Contoh berikut menunjukkan cara membaca kebijakan IAM tingkat toko HL7v2. Untuk informasi selengkapnya, lihat projects.locations.datasets.hl7V2Stores.getIamPolicy.

Konsol

Guna melihat kebijakan IAM untuk penyimpanan HL7v2:

  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Klik ID set data yang berisi penyimpanan HL7v2, lalu pilih penyimpanan HL7v2 yang ingin Anda dapatkan kebijakannya.
  3. Klik Tampilkan panel info.
  4. Untuk melihat akun utama yang ditetapkan ke suatu peran, luaskan peran.

gcloud

Untuk melihat kebijakan IAM untuk penyimpanan HL7v2, jalankan perintah hl7v2-stores get-iam-policy. Tentukan nama toko HL7v2, nama set data, dan lokasi.

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

Jika permintaan berhasil, binding akan ditampilkan.

bindings:
- members:
  - user:[email protected]
  role: roles/healthcare.hl7v2StoreAdmin
  - serviceAccount:[email protected]
  - user:[email protected]
  role: roles/healthcare.hl7v2Consumer
etag: bytes
version: VERSION_NUMBER

curl

Guna membaca kebijakan IAM untuk penyimpanan HL7v2, buat permintaan GET dan tentukan nama set data, nama penyimpanan HL7v2, dan token akses.

Contoh berikut menunjukkan permintaan GET yang menggunakan 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"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.hl7V2StoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.hl7V2Consumer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

PowerShell

Guna membaca kebijakan IAM untuk penyimpanan HL7v2, buat permintaan GET dan tentukan nama set data, nama penyimpanan HL7v2, dan token akses.

Contoh berikut menunjukkan permintaan GET menggunakan 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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.hl7V2StoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.hl7V2Consumer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]"
      ]
    }
  ]
}

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

Mengubah kebijakan

Contoh berikut memberikan peran roles/healthcare.hl7V2Consumer kepada pengguna baru. Untuk informasi selengkapnya, lihat projects.locations.datasets.hl7V2Stores.setIamPolicy.

Menetapkan kebijakan

Konsol

Untuk menetapkan kebijakan IAM tingkat toko HL7v2, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Klik ID set data yang berisi penyimpanan HL7v2, lalu pilih penyimpanan HL7v2 yang ingin ditetapkan kebijakannya.
  3. Klik Tampilkan panel info.
  4. Klik Tambahkan akun utama.
  5. Di kolom New principals, masukkan satu atau beberapa identitas yang memerlukan akses ke penyimpanan HL7v2.
  6. Dalam daftar Select a role, di bagian Cloud Healthcare, pilih izin yang ingin Anda berikan. Misalnya, Healthcare HL7v2 Message Consumer.
  7. Klik Save.

gcloud

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat email mereka ke array members pada binding roles/healthcare.hl7V2Consumer:

{
  "role":"roles/healthcare.hl7V2Consumer",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, jalankan perintah set-iam-policy yang sesuai untuk melakukan perubahan. Untuk menetapkan kebijakan tingkat toko HL7v2, jalankan perintah gcloud healthcare hl7v2-stores set-iam-policy. Tentukan nama penyimpanan HL7v2, nama set data, lokasi, dan jalur ke file kebijakan yang Anda buat.

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

Jika permintaan berhasil, nama penyimpanan HL7v2 dan binding akan ditampilkan.

Updated IAM policy for hl7v2Store [HL7V2_STORE_ID].
bindings:
- members:
  - user:[email protected]
  role: roles/healthcare.hl7v2StoreAdmin
  - serviceAccount:[email protected]
  - user:[email protected]
  - user:NEW_USER_EMAIL_ADDRESS
  role: roles/healthcare.hl7v2Consumer
etag: bytes
version: VERSION_NUMBER

curl

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat email mereka ke array members pada binding roles/healthcare.hl7V2Consumer:

{
  "role":"roles/healthcare.hl7V2Consumer",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.hl7V2Stores.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM tingkat toko HL7v2, buat permintaan POST dan tentukan nama set data, nama penyimpanan HL7v2, kebijakan, dan token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan curl untuk memberikan peran roles/healthcare.hl7V2Consumer yang sudah ada kepada pengguna baru.

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]'
            ]
          },
          {
            'role':'roles/healthcare.hl7V2Consumer',
            'members': [
              'serviceAccount:[email protected]',
              'user:[email protected]',
              'user:NEW_USER_EMAIL_ADDRESS'
            ]
          }
        ]
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID:setIamPolicy"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.hl7V2StoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.hl7V2Consumer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "user:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

PowerShell

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada pengguna baru, tambahkan alamat email mereka ke array members pada binding roles/healthcare.hl7V2Consumer:

{
  "role":"roles/healthcare.hl7V2Consumer",
  "members": [
    "serviceAccount:[email protected]",
    "user:[email protected]",
    "user:NEW_USER_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.locations.datasets.hl7V2Stores.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM tingkat toko HL7v2, buat permintaan POST dan tentukan nama set data, nama penyimpanan HL7v2, kebijakan, dan token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan curl untuk memberikan peran roles/healthcare.hl7V2Consumer yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]',
          ]
        },
        {
          'role': 'roles/healthcare.hl7V2Consumer',
          'members': [
            'serviceAccount:[email protected]',
            'user:[email protected]',
            '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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.hl7V2StoreAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role":"roles/healthcare.hl7V2Consumer",
      "members": [
        "serviceAccount:[email protected]",
        "user:[email protected]",
        "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:[email protected]"},
		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:[email protected]';
  // 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:[email protected]'
        - group:email, as in 'group:[email protected]'
        - domain:domainname, as in 'domain:example.com'
        - serviceAccount:email,
            as in 'serviceAccount:[email protected]'
        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 = '[email protected]'  # 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

Menggunakan IAM dengan Healthcare Natural Language API

Bagian berikut menunjukkan cara mendapatkan, mengubah, dan menetapkan kebijakan untuk Healthcare Natural Language API. Bagian ini menggunakan contoh kebijakan berikut sebagai titik awal:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:[email protected]"
      ]
    }
  ]
}

Mendapatkan kebijakan

Contoh berikut menunjukkan cara membaca kebijakan IAM level project. Untuk informasi selengkapnya, lihat metode projects.getIamPolicy.

curl

Untuk membaca kebijakan IAM untuk project, buat permintaan POST dan tentukan nama project serta token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan curl:

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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:[email protected]"
      ]
    }
  ]
}

PowerShell

Untuk melihat kebijakan IAM untuk sebuah project, buat permintaan POST dan tentukan nama project serta token akses.

Contoh berikut menunjukkan permintaan POST menggunakan 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

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:[email protected]"
      ]
    }
  ]
}

Konsol

Untuk melihat kebijakan IAM untuk sebuah project, selesaikan langkah-langkah berikut:

  1. Di Konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Untuk melihat akun utama yang ditetapkan ke peran, klik Peran, lalu luaskan peran.

gcloud

Untuk melihat kebijakan IAM project, jalankan perintah gcloud projects get-iam-policy. Tentukan nama project dalam permintaan.

gcloud projects get-iam-policy PROJECT_ID 

Jika permintaan berhasil, binding akan ditampilkan.

bindings:
- members:
  - serviceAccount:[email protected]
  role: roles/healthcare.nlpServiceViewer
etag: bytes
version: VERSION_NUMBER

Mengubah kebijakan

Contoh berikut memberikan peran roles/healthcare.nlpServiceViewer kepada layanan. Untuk informasi selengkapnya, lihat projects.setIamPolicy.

Menetapkan kebijakan

Konsol

Untuk menetapkan kebijakan IAM level project, selesaikan langkah-langkah berikut:

  1. Di Konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Klik tombol Edit di samping akun utama atau klik Add principal, lalu di kolom New principals, masukkan satu atau beberapa identitas yang memerlukan akses ke project.
  3. Dalam daftar Select a role, di bagian Cloud Healthcare, pilih Healthcare Natural Language Service Viewer.
  4. Klik Save.

gcloud

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada akun layanan yang baru, tambahkan alamat email akun layanan ke array members di bagian binding roles/healthcare.nlpServiceViewer:

{
  "role":"roles/healthcare.nlpServiceViewer",
  "members": [
      "serviceAccount:[email protected]",
      "serviceAccount:NEW_SERVICE_ACCOUNT_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, jalankan perintah gcloud projects set-iam-policy untuk melakukan perubahan. Tentukan project dan jalur ke file kebijakan yang Anda buat.

gcloud projects set-iam-policy PROJECT_STORE_ID \
    POLICY_FILE_NAME 

Jika permintaan berhasil, nama project dan binding akan ditampilkan.

Updated IAM policy for project [PROJECT_ID].
bindings:
- members:
  - serviceAccount:[email protected]
  - serviceAccount:NEW_USER_EMAIL_ADDRESS
  role: roles/healthcare.nlpServiceViewer
etag: bytes
version: VERSION_NUMBER

curl

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada akun layanan yang baru, tambahkan alamat email akun layanan ke array members di bagian binding roles/healthcare.nlpServiceViewer:

{
  "role":"roles/healthcare.nlpServiceViewer",
  "members": [
      "serviceAccount:[email protected]",
      "serviceAccount:NEW_SERVICE_ACCOUNT_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM level project, buat permintaan POST dan tentukan nama project, kebijakan, serta token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan curl untuk memberikan peran roles/healthcare.nlpServiceViewer yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]'
            ]
          }
        ]
      }
    }" "https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy"

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:[email protected]"
      ]
    }
  ]
}

PowerShell

Berikan atau cabut peran kepada pengguna dengan mengubah kebijakan yang Anda ambil, secara terprogram, atau menggunakan editor teks. Nilai etag berubah saat kebijakan berubah, jadi Anda harus menentukan nilai saat ini.

Untuk memberikan peran tersebut kepada akun layanan yang baru, tambahkan alamat email akun layanan ke array members di bagian binding roles/healthcare.nlpServiceViewer:

{
  "role":"roles/healthcare.nlpServiceViewer",
  "members": [
      "serviceAccount:[email protected]",
      "serviceAccount:NEW_SERVICE_ACCOUNT_EMAIL_ADDRESS"
  ]
}
Untuk mencabut akses akun utama, hapus alamat emailnya dari array members. Untuk mencabut akses dari akun utama terakhir yang memiliki peran, hapus array bindings untuk peran tersebut. Anda tidak boleh memiliki array bindings kosong dalam kebijakan Anda.

Setelah Anda mengubah kebijakan untuk memberikan peran yang berlaku, panggil projects.setIamPolicy untuk melakukan perubahan.

Untuk menetapkan kebijakan IAM level project, buat permintaan POST dan tentukan nama project, kebijakan, serta token akses.

Contoh berikut menunjukkan permintaan POST yang menggunakan curl untuk memberikan peran roles/healthcare.nlpServiceViewer yang sudah ada kepada pengguna baru:

Kebijakan dapat ditulis langsung dalam permintaan, seperti yang ditunjukkan di sini, atau dapat diteruskan sebagai file JSON atau YAML. Untuk contoh cara memformat kebijakan sebagai JSON atau YAML, lihat 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:[email protected]',
            'serviceAccount:NEW_USER_EMAIL_ADDRESS'
          ]
        }
      ]
    }
  }" `
  -Uri "https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy" | Select-Object -Expand Content

Responsnya adalah sebagai berikut:

{
  "etag":"bytes",
  "bindings": [
    {
      "role":"roles/healthcare.nlpServiceViewer",
      "members": [
        "serviceAccount:[email protected]",
        "serviceAccount:NEW_USER_EMAIL_ADDRESS"
      ]
    }
  ]
}

Langkah selanjutnya