Memulihkan versi sebelumnya dari kebijakan izin IAM

Halaman ini menjelaskan cara memulihkan versi sebelumnya dari kebijakan izin IAM setelah melakukan perubahan yang tidak disengaja atau penghapusan yang tidak disengaja.

Untuk memulihkan kebijakan IAM sebelumnya, temukan setIamPolicy yang berhasil terakhir sebelum perubahan atau penghapusan dan gunakan untuk memulihkan kebijakan.

Anda juga dapat menggunakan Inventaris Aset Cloud untuk menemukan histori perubahan IAM dan menggunakannya untuk memulihkan kebijakan.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk memulihkan kebijakan izin sebelumnya, minta administrator untuk memberi Anda peran IAM berikut pada project, folder, atau organisasi:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Saat memulihkan kebijakan izinkan dengan setIamPolicy, peran Administrator Organisasi diperlukan untuk kebijakan izinkan tingkat organisasi dan folder, dan peran Pemilik diperlukan untuk kebijakan izinkan tingkat project.

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Memulihkan kebijakan izinkan dengan instance setIamPolicy yang terakhir berhasil

Untuk memulihkan kebijakan izin ke versi sebelumnya, Anda dapat meninjau log audit untuk instance setIamPolicy yang terakhir berhasil sebelum perubahan atau penghapusan dan menggunakan informasi dari instance tersebut untuk memulihkan kebijakan. Proses ini mencakup langkah-langkah berikut:

  1. Identifikasi instance setIamPolicy terakhir yang berhasil untuk kebijakan izin dan ambil insertId.
  2. Gunakan insertId dari permintaan setIamPolicy untuk mengekspor kebijakan izin dalam format YAML atau JSON.
  3. Ubah file output agar sesuai dengan kebijakan izin kerja sebelumnya dan ganti kebijakan izin saat ini.

Identifikasi instance setIamPolicy terakhir yang berhasil dan ambil insertId

Untuk mengidentifikasi instance setIamPolicy yang terakhir berhasil dan mengambil isertId, gunakan konsol Google Cloud atau gcloud CLI untuk meninjau log audit Anda.

Konsol

  1. Di konsol Google Cloud , buka halaman Logs Explorer.

    Buka Logs Explorer

  2. Di editor kueri, masukkan salah satu kueri berikut. Kueri ini menelusuri log audit Anda untuk menemukan entri yang memiliki SetIamPolicy di kolom methodName pada protoPayload:

    • Untuk mendapatkan log semua perubahan kebijakan izin yang dilakukan pada resource, gunakan kueri berikut:

      logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity"
      protoPayload.methodName:SetIamPolicy
      
    • Untuk mendapatkan log perubahan kebijakan izinkan yang melibatkan pengguna atau akun layanan tertentu, gunakan kueri berikut:

      logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity"
      protoPayload.methodName:SetIamPolicy
      protoPayload.serviceData.policyDelta.bindingDeltas.member:"EMAIL_ADDRESS"
      

      Ganti kode berikut:

      • RESOURCE_TYPE: Jenis resource yang log auditnya ingin Anda cantumkan. Nilai yang valid adalah projects, folders, atau organizations.
      • RESOURCE_ID: ID Google Cloud project, folder, atau organisasi Anda. Project ID berupa alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.
      • EMAIL_ADDRESS: Alamat email pengguna atau akun layanan—misalnya, example-service-account@example-project.iam.gserviceaccount.com.
  3. Untuk menjalankan kueri, klik Run query.

  4. Gunakan pemilih Rentang Waktu untuk menentukan rentang waktu yang sesuai untuk kueri. Atau, Anda dapat menambahkan ekspresi stempel waktu langsung ke editor kueri. Untuk mengetahui informasi selengkapnya, lihat Melihat log menurut rentang waktu.

  5. Salin insertId dari instance setIamPolicy terakhir yang berhasil sebelum perubahan atau penghapusan.

gcloud

Perintah gcloud logging read membaca entri log.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • RESOURCE_TYPE: Jenis resource yang log auditnya Anda cantumkan. Gunakan nilai projects, folders, atau organizations.
  • RESOURCE_ID: ID Google Cloud project, organisasi, atau folder Anda. Project ID adalah string alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.
  • TIME_PERIOD: Periode waktu yang Anda gunakan untuk mencantumkan log audit. Entri yang ditampilkan tidak lebih lama dari nilai ini. Jika tidak ditentukan, nilai defaultnya adalah 1d. Untuk informasi tentang format waktu, lihat gcloud topic datetimes.
  • RESOURCE_TYPE_SINGULAR: Jenis resource yang log auditnya Anda cantumkan. Gunakan nilai project, folder, atau organization.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud logging read \
    'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity
    AND protoPayload.methodName=SetIamPolicy' \
    --freshness=TIME_PERIOD \
    --RESOURCE_TYPE_SINGULAR=RESOURCE_ID

Windows (PowerShell)

gcloud logging read `
    'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity
    AND protoPayload.methodName=SetIamPolicy' `
    --freshness=TIME_PERIOD `
    --RESOURCE_TYPE_SINGULAR=RESOURCE_ID

Windows (cmd.exe)

gcloud logging read ^
    'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity
    AND protoPayload.methodName=SetIamPolicy' ^
    --freshness=TIME_PERIOD ^
    --RESOURCE_TYPE_SINGULAR=RESOURCE_ID

Salin insertId dari instance setIamPolicy terakhir yang berhasil sebelum perubahan atau penghapusan.

Gunakan insertId untuk mengekspor kebijakan izin

Gunakan insertId yang Anda ambil dari instance setIamPolicy yang terakhir berhasil untuk menjalankan perintah berikut di gcloud CLI guna mengekspor kebijakan izin dalam format JSON atau YAML. Anda dapat mengekspor kebijakan izin untuk organisasi dan project.

Tingkat organisasi

Perintah gcloud logging read membaca entri log.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • ORGANIZATION_ID: Organisasi yang ingin Anda lihat dan ekspor kebijakan izinkannya.
  • INSERT_ID: insertId permintaan setIamPolicy.
  • FORMAT: Format respons. Gunakan json atau yaml.
  • TIME_PERIOD: Periode waktu yang Anda cantumkan untuk log audit. Entri yang ditampilkan tidak lebih lama dari nilai ini. Jika tidak ditentukan, nilai defaultnya adalah 1d. Untuk informasi tentang format waktu, lihat gcloud topic datetimes.
  • OUTPUT_FILE: Nama dan ekstensi file untuk output. Contoh previous_policy.json atau previous_policy.yaml.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com
insertId="INSERT_ID"'
--organization=ORGANIZATION_ID
--format="FORMAT(protoPayload.request.policy)"
--freshness=TIME_PERIOD > OUTPUT_FILE

Windows (PowerShell)

gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com
insertId="INSERT_ID"'
--organization=ORGANIZATION_ID
--format="FORMAT(protoPayload.request.policy)"
--freshness=TIME_PERIOD > OUTPUT_FILE

Windows (cmd.exe)

gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com
insertId="INSERT_ID"'
--organization=ORGANIZATION_ID
--format="FORMAT(protoPayload.request.policy)"
--freshness=TIME_PERIOD > OUTPUT_FILE

Level project

Perintah gcloud logging read membaca entri log.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • INSERT_ID: insertId permintaan setIamPolicy.
  • TIME_PERIOD: Periode waktu yang Anda cantumkan untuk log audit. Entri yang ditampilkan tidak lebih lama dari nilai ini. Jika tidak ditentukan, nilai defaultnya adalah 1d. Untuk informasi tentang format waktu, lihat gcloud topic datetimes.
  • FORMAT: Format respons. Gunakan json atau yaml.
  • OUTPUT_FILE: Nama file tempat Anda ingin menyimpan output—misalnya, previous_policy.json atau previous_policy.yaml.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud logging read \
'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' \
--freshness=TIME_PERIOD \
--format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE

Windows (PowerShell)

gcloud logging read `
'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' `
--freshness=TIME_PERIOD `
--format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE

Windows (cmd.exe)

gcloud logging read ^
'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' ^
--freshness=TIME_PERIOD ^
--format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE

Mengubah file output dan mengganti kebijakan izin saat ini

Ubah file output dengan cara berikut dan ganti kebijakan izin saat ini.

  1. Secara terprogram atau menggunakan editor teks, ubah file output dengan menghapus baris berikut:

     ---
     protoPayload:
        request:
          policy:
    

    File yang dihasilkan dimulai dengan auditConfigs:.

  2. Dapatkan kebijakan izin saat ini.

    gcloud

    Perintah gcloud get-iam-policy mendapatkan kebijakan izin project, folder, atau organisasi.

    Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

    • RESOURCE_TYPE: Jenis resource yang ingin Anda dapatkan kebijakan izinnya. Nilai yang valid adalah projects, resource-manager folders, atau organizations.

    • RESOURCE_ID: Project, folder, atau ID organisasi Google Cloud Anda. Project ID berupa alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.

    • FORMAT: Format yang diinginkan untuk kebijakan izinkan. Gunakan json atau yaml.

    • PATH: Jalur ke file output baru untuk kebijakan izinkan.

    Jalankan perintah berikut:

    Linux, macOS, atau Cloud Shell

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Windows (PowerShell)

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Windows (cmd.exe)

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Misalnya, perintah berikut mendapatkan kebijakan izinkan untuk project my-project dan menyimpannya ke direktori beranda Anda dalam format JSON:

    gcloud projects get-iam-policy my-project --format json > ~/policy.json

    C#

    Untuk mengautentikasi ke Resource Manager, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

    Untuk mempelajari cara menginstal dan menggunakan library klien untuk Resource Manager, lihat library klien Resource Manager.

    Contoh berikut menunjukkan cara mendapatkan kebijakan izinkan untuk project. Untuk mempelajari cara mendapatkan kebijakan izin folder atau organisasi, tinjau dokumentasi library klien Resource Manageruntuk bahasa pemrograman Anda.

    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.CloudResourceManager.v1;
    using Google.Apis.CloudResourceManager.v1.Data;
    
    public partial class AccessManager
    {
        public static Policy GetPolicy(string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
            var service = new CloudResourceManagerService(
                new CloudResourceManagerService.Initializer
                {
                    HttpClientInitializer = credential
                });
    
            var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
                projectId).Execute();
            return policy;
        }
    }
    

    Java

    Untuk mengautentikasi ke Resource Manager, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

    Untuk mempelajari cara menginstal dan menggunakan library klien untuk Resource Manager, lihat library klien Resource Manager.

    Contoh berikut menunjukkan cara mendapatkan kebijakan izinkan untuk project. Untuk mempelajari cara mendapatkan kebijakan izin folder atau organisasi, tinjau dokumentasi library klien Resource Manageruntuk bahasa pemrograman Anda.

    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.v1.GetIamPolicyRequest;
    import com.google.iam.v1.Policy;
    import java.io.IOException;
    
    public class GetProjectPolicy {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // TODO: Replace with your project ID.
        String projectId = "your-project-id";
    
        getProjectPolicy(projectId);
      }
    
      // Gets a project's policy.
      public static Policy getProjectPolicy(String projectId) throws IOException {
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (ProjectsClient projectsClient = ProjectsClient.create()) {
          GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
                  .setResource(ProjectName.of(projectId).toString())
                  .build();
          return projectsClient.getIamPolicy(request);
        }
      }
    }

    Python

    Untuk mengautentikasi ke Resource Manager, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

    Untuk mempelajari cara menginstal dan menggunakan library klien untuk Resource Manager, lihat library klien Resource Manager.

    Contoh berikut menunjukkan cara mendapatkan kebijakan izinkan untuk project. Untuk mempelajari cara mendapatkan kebijakan izin folder atau organisasi, tinjau dokumentasi library klien Resource Manageruntuk bahasa pemrograman Anda.

    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def get_project_policy(project_id: str) -> policy_pb2.Policy:
        """Get policy for project.
    
        project_id: ID or number of the Google Cloud project you want to use.
        """
    
        client = resourcemanager_v3.ProjectsClient()
        request = iam_policy_pb2.GetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
    
        policy = client.get_iam_policy(request)
        print(f"Policy retrieved: {policy}")
    
        return policy

    REST

    Metode Resource Manager API get-iam-policy mendapatkan kebijakan izin project, folder, atau organisasi.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • API_VERSION: Versi API yang akan digunakan. Untuk project dan organisasi, gunakan v1. Untuk folder, gunakan v2.
    • RESOURCE_TYPE: Jenis resource yang ingin Anda kelola kebijakannya. Gunakan nilai projects, folders, atau organizations.
    • RESOURCE_ID: ID Google Cloud project, organisasi, atau folder Anda. Project ID adalah string alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Responsnya berisi kebijakan izin resource. Contoh:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Simpan respons dalam file dengan jenis yang sesuai (json atau yaml).

  3. Salin nilai etag dari kebijakan izin saat ini.

  4. Ganti nilai etag dalam file output dengan nilai etag yang Anda salin dari kebijakan izin saat ini. etag dalam file output harus cocok dengan etag saat ini untuk memulai permintaan setIamPolicy baru. Pastikan bahwa jarak untuk etag tidak berubah dalam file output.

  5. Tinjau file untuk memastikan file tersebut cocok dengan kebijakan izin kerja sebelumnya. Anda dapat mempertimbangkan untuk membuat project baru dan menerapkan kebijakan untuk memastikan kebijakan tersebut berfungsi sebagaimana mestinya.

  6. Tetapkan kebijakan izin untuk menggantikan kebijakan izin saat ini dengan kebijakan izin di file output yang Anda buat.

    gcloud

    Perintah gcloud set-iam-policy menetapkan kebijakan dalam permintaan sebagai kebijakan izin baru untuk project, folder, atau organisasi.

    Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

    • RESOURCE_TYPE: Jenis resource yang ingin Anda tetapkan kebijakan izinya. Nilai yang valid adalah projects, resource-manager folders, atau organizations.

    • RESOURCE_ID: Project, folder, atau ID organisasi Google Cloud Anda. Project ID berupa alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.

    • PATH: Jalur ke file yang berisi kebijakan izinkan baru.

    Jalankan perintah berikut:

    Linux, macOS, atau Cloud Shell

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    Windows (PowerShell)

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    Windows (cmd.exe)

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    Respons berisi kebijakan izin yang diperbarui.

    Misalnya, perintah berikut menetapkan kebijakan izinkan yang disimpan di policy.json sebagai kebijakan izinkan untuk project my-project:

    gcloud projects set-iam-policy my-project ~/policy.json

    C#

    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.CloudResourceManager.v1;
    using Google.Apis.CloudResourceManager.v1.Data;
    
    public partial class AccessManager
    {
        public static Policy SetPolicy(string projectId, Policy policy)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
            var service = new CloudResourceManagerService(
                new CloudResourceManagerService.Initializer
                {
                    HttpClientInitializer = credential
                });
    
            return service.Projects.SetIamPolicy(new SetIamPolicyRequest
            {
                Policy = policy
            }, projectId).Execute();
        }
    }
    

    Java

    Untuk mengautentikasi ke Resource Manager, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

    Untuk mempelajari cara menginstal dan menggunakan library klien untuk Resource Manager, lihat library klien Resource Manager.

    Contoh berikut menunjukkan cara menetapkan kebijakan izinkan untuk project. Untuk mempelajari cara menetapkan kebijakan izinkan folder atau organisasi, tinjau dokumentasi library klien Resource Manager untuk bahasa pemrograman Anda.

    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.v1.Policy;
    import com.google.iam.v1.SetIamPolicyRequest;
    import com.google.protobuf.FieldMask;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;
    
    public class SetProjectPolicy {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // TODO: Replace with your project ID.
        String projectId = "your-project-id";
        // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
        Policy policy = Policy.newBuilder().build();
    
        setProjectPolicy(policy, projectId);
      }
    
      // Sets a project's policy.
      public static Policy setProjectPolicy(Policy policy, String projectId)
              throws IOException {
    
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (ProjectsClient projectsClient = ProjectsClient.create()) {
          List<String> paths = Arrays.asList("bindings", "etag");
          SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
                  .setResource(ProjectName.of(projectId).toString())
                  .setPolicy(policy)
                  // A FieldMask specifying which fields of the policy to modify. Only
                  // the fields in the mask will be modified. If no mask is provided, the
                  // following default mask is used:
                  // `paths: "bindings, etag"`
                  .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
                  .build();
    
          return projectsClient.setIamPolicy(request);
        }
      }
    }

    Python

    Untuk mengautentikasi ke Resource Manager, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

    Untuk mempelajari cara menginstal dan menggunakan library klien untuk Resource Manager, lihat library klien Resource Manager.

    Contoh berikut menunjukkan cara menetapkan kebijakan izinkan untuk project. Untuk mempelajari cara menetapkan kebijakan izinkan folder atau organisasi, tinjau dokumentasi library klien Resource Manager untuk bahasa pemrograman Anda.

    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def set_project_policy(
        project_id: str, policy: policy_pb2.Policy, merge: bool = True
    ) -> policy_pb2.Policy:
        """
        Set policy for project. Pay attention that previous state will be completely rewritten.
        If you want to update only part of the policy follow the approach read->modify->write.
        For more details about policies check out https://cloud.google.com/iam/docs/policies
    
        project_id: ID or number of the Google Cloud project you want to use.
        policy: Policy which has to be set.
        merge: The strategy to be used forming the request. CopyFrom is clearing both mutable and immutable fields,
        when MergeFrom is replacing only immutable fields and extending mutable.
        https://googleapis.dev/python/protobuf/latest/google/protobuf/message.html#google.protobuf.message.Message.CopyFrom
        """
        client = resourcemanager_v3.ProjectsClient()
    
        request = iam_policy_pb2.GetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
        current_policy = client.get_iam_policy(request)
    
        # Etag should as fresh as possible to lower chance of collisions
        policy.ClearField("etag")
        if merge:
            current_policy.MergeFrom(policy)
        else:
            current_policy.CopyFrom(policy)
    
        request = iam_policy_pb2.SetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
    
        # request.etag field also will be merged which means you are secured from collision,
        # but it means that request may fail and you need to leverage exponential retries approach
        # to be sure policy has been updated.
        request.policy.CopyFrom(current_policy)
    
        policy = client.set_iam_policy(request)
        return policy
    
    

    REST

    Metode Resource Manager API set-iam-policy menetapkan kebijakan dalam permintaan sebagai kebijakan izin baru untuk project, folder, atau organisasi.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • API_VERSION: Versi API yang akan digunakan. Untuk project dan organisasi, gunakan v1. Untuk folder, gunakan v2.
    • RESOURCE_TYPE: Jenis resource yang ingin Anda kelola kebijakannya. Gunakan nilai projects, folders, atau organizations.
    • RESOURCE_ID: ID Google Cloud project, organisasi, atau folder Anda. Project ID adalah string alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.
    • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat referensi Kebijakan.

    Metode HTTP dan URL:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

    Meminta isi JSON:

    {
      "policy": POLICY
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi kebijakan izin yang telah diperbarui.

Memulihkan kebijakan izinkan dengan Cloud Asset Inventory

Untuk memulihkan kebijakan izin ke versi sebelumnya, Anda dapat menggunakan Cloud Asset Inventory untuk melihat histori perubahan kebijakan izin resource dan menggunakan informasi tersebut untuk memulihkan kebijakan. Proses ini mencakup langkah-langkah berikut:

  1. Gunakan Inventaris Aset Cloud untuk meninjau histori perubahan kebijakan izin dan mengidentifikasi kebijakan izin yang ingin Anda pulihkan.
  2. Salin kebijakan izinkan dan buat file baru dalam format JSON.
  3. Ganti kebijakan izin saat ini dengan kebijakan dalam file baru.

Meninjau histori perubahan kebijakan izinkan dengan Cloud Asset Inventory

Konsol

  1. Di konsol Google Cloud , buka halaman Asset Inventory.

    Buka Inventaris Aset

  2. Klik tab Kebijakan IAM.

  3. Jalankan kueri berikut di kolom Filter:

    Resource : RESOURCE_ID

    Ganti RESOURCE_ID dengan ID project, folder, atau organisasi Google Cloud Anda. Project ID berupa alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.

  4. Untuk melihat histori perubahan kebijakan izin resource, klik nama resource, lalu pilih tab Histori Perubahan.

  5. Untuk membandingkan perubahan pada kebijakan izin untuk resource, pilih dua kumpulan data berbeda yang diberi stempel waktu dari menu Pilih kumpulan data yang akan dibandingkan.

gcloud

Perintah gcloud asset get-history mendapatkan histori kebijakan izinkan yang diperbarui pada aset yang tumpang-tindih dengan periode waktu.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • RESOURCE_TYPE: Jenis resource yang log auditnya Anda cantumkan. Gunakan nilai project, folder, atau organization.
  • RESOURCE_ID: ID Google Cloud project, organisasi, atau folder Anda. Project ID adalah string alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.
  • ASSET_NAME: Daftar nama resource berformat yang dipisahkan koma untuk resource yang ingin Anda lihat histori kebijakan izinnya. Contoh, //cloudresourcemanager.googleapis.com/projects/my-project. Resource ini dapat berupa jenis resource yang menerima kebijakan izinkan.
  • START_TIME: Awal rentang waktu. Rentang waktu maksimum adalah 7 hari. Nilainya harus berupa waktu saat ini atau waktu tidak lebih dari 35 hari yang lalu. Untuk informasi tentang format waktu, lihat gcloud topic datetimes.
  • END_TIME: Opsional. Titik akhir rentang waktu. Rentang waktu maksimum adalah 7 hari. Nilainya harus berupa waktu saat ini atau waktu tidak lebih dari 35 hari di masa lalu. Jika tidak diberikan, waktu berakhir dianggap sebagai waktu saat ini. Untuk mengetahui informasi tentang format waktu, lihat gcloud topic datetimes.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud asset get-history \
    --RESOURCE_TYPE=RESOURCE_ID \
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... \
    --content-type=iam-policy \
    --start-time=START_TIME \
    --end-time=END_TIME

Windows (PowerShell)

gcloud asset get-history `
    --RESOURCE_TYPE=RESOURCE_ID `
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... `
    --content-type=iam-policy `
    --start-time=START_TIME `
    --end-time=END_TIME

Windows (cmd.exe)

gcloud asset get-history ^
    --RESOURCE_TYPE=RESOURCE_ID ^
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... ^
    --content-type=iam-policy ^
    --start-time=START_TIME ^
    --end-time=END_TIME

Respons berisi histori kebijakan izin yang telah diperbarui.

Buat file kebijakan izin baru

Setelah Anda meninjau histori kebijakan izinkan dan mengidentifikasi kebijakan izinkan yang ingin dipulihkan, selesaikan langkah-langkah berikut.

  1. Salin kebijakan yang diizinkan yang ingin Anda pulihkan, mulai dari baris "bindings" hingga baris "etag".

  2. Tempel kebijakan yang diizinkan yang Anda salin ke file baru dan gunakan tanda kurung kurawal ({}) untuk menyertakan kebijakan. Misalnya, kebijakan izinkan mungkin terlihat seperti berikut:

     {
      "bindings": [
        {
          "role": "roles/resourcemanager.organizationAdmin",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/resourcemanager.organizationViewer",
          "members": [
            "user:eve@example.com"
          ],
          "condition": {
            "title": "expirable access",
            "description": "Does not grant access after Sep 2020",
            "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
          }
        }
      ],
      "etag": "BwWWja0YfJA=",
     }
    
  3. Simpan file dalam format JSON. Misalnya, Anda dapat memberi nama file baru dengan previous_iam_policy.json.

Tetapkan kebijakan izin baru

Tetapkan kebijakan izin untuk menggantikan kebijakan izin saat ini dengan kebijakan izin di file output yang Anda buat.

gcloud

Perintah gcloud set-iam-policy menetapkan kebijakan dalam permintaan sebagai kebijakan izin baru untuk project, folder, atau organisasi.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • RESOURCE_TYPE: Jenis resource yang ingin Anda tetapkan kebijakan izinya. Nilai yang valid adalah projects, resource-manager folders, atau organizations.

  • RESOURCE_ID: Project, folder, atau ID organisasi Google Cloud Anda. Project ID berupa alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.

  • PATH: Jalur ke file yang berisi kebijakan izinkan baru.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

Windows (PowerShell)

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

Windows (cmd.exe)

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

Respons berisi kebijakan izin yang diperbarui.

Misalnya, perintah berikut menetapkan kebijakan izinkan yang disimpan di policy.json sebagai kebijakan izinkan untuk project my-project:

gcloud projects set-iam-policy my-project ~/policy.json

C#


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy SetPolicy(string projectId, Policy policy)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        return service.Projects.SetIamPolicy(new SetIamPolicyRequest
        {
            Policy = policy
        }, projectId).Execute();
    }
}

Java

Untuk mengautentikasi ke Resource Manager, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Resource Manager, lihat library klien Resource Manager.

Contoh berikut menunjukkan cara menetapkan kebijakan izinkan untuk project. Untuk mempelajari cara menetapkan kebijakan izinkan folder atau organisasi, tinjau dokumentasi library klien Resource Manager untuk bahasa pemrograman Anda.

import com.google.cloud.resourcemanager.v3.ProjectsClient;
import com.google.iam.admin.v1.ProjectName;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class SetProjectPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();

    setProjectPolicy(policy, projectId);
  }

  // Sets a project's policy.
  public static Policy setProjectPolicy(Policy policy, String projectId)
          throws IOException {

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (ProjectsClient projectsClient = ProjectsClient.create()) {
      List<String> paths = Arrays.asList("bindings", "etag");
      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
              .setResource(ProjectName.of(projectId).toString())
              .setPolicy(policy)
              // A FieldMask specifying which fields of the policy to modify. Only
              // the fields in the mask will be modified. If no mask is provided, the
              // following default mask is used:
              // `paths: "bindings, etag"`
              .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
              .build();

      return projectsClient.setIamPolicy(request);
    }
  }
}

Python

Untuk mengautentikasi ke Resource Manager, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Resource Manager, lihat library klien Resource Manager.

Contoh berikut menunjukkan cara menetapkan kebijakan izinkan untuk project. Untuk mempelajari cara menetapkan kebijakan izinkan folder atau organisasi, tinjau dokumentasi library klien Resource Manager untuk bahasa pemrograman Anda.

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2, policy_pb2


def set_project_policy(
    project_id: str, policy: policy_pb2.Policy, merge: bool = True
) -> policy_pb2.Policy:
    """
    Set policy for project. Pay attention that previous state will be completely rewritten.
    If you want to update only part of the policy follow the approach read->modify->write.
    For more details about policies check out https://cloud.google.com/iam/docs/policies

    project_id: ID or number of the Google Cloud project you want to use.
    policy: Policy which has to be set.
    merge: The strategy to be used forming the request. CopyFrom is clearing both mutable and immutable fields,
    when MergeFrom is replacing only immutable fields and extending mutable.
    https://googleapis.dev/python/protobuf/latest/google/protobuf/message.html#google.protobuf.message.Message.CopyFrom
    """
    client = resourcemanager_v3.ProjectsClient()

    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}"
    current_policy = client.get_iam_policy(request)

    # Etag should as fresh as possible to lower chance of collisions
    policy.ClearField("etag")
    if merge:
        current_policy.MergeFrom(policy)
    else:
        current_policy.CopyFrom(policy)

    request = iam_policy_pb2.SetIamPolicyRequest()
    request.resource = f"projects/{project_id}"

    # request.etag field also will be merged which means you are secured from collision,
    # but it means that request may fail and you need to leverage exponential retries approach
    # to be sure policy has been updated.
    request.policy.CopyFrom(current_policy)

    policy = client.set_iam_policy(request)
    return policy

REST

Metode Resource Manager API set-iam-policy menetapkan kebijakan dalam permintaan sebagai kebijakan izin baru untuk project, folder, atau organisasi.

Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

  • API_VERSION: Versi API yang akan digunakan. Untuk project dan organisasi, gunakan v1. Untuk folder, gunakan v2.
  • RESOURCE_TYPE: Jenis resource yang ingin Anda kelola kebijakannya. Gunakan nilai projects, folders, atau organizations.
  • RESOURCE_ID: ID Google Cloud project, organisasi, atau folder Anda. Project ID adalah string alfanumerik, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.
  • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat referensi Kebijakan.

Metode HTTP dan URL:

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

Meminta isi JSON:

{
  "policy": POLICY
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Respons berisi kebijakan izin yang telah diperbarui.