Kontrol akses untuk resource organisasi dengan IAM

Google Cloud menawarkan Identity and Access Management (IAM), yang memungkinkan Anda memberikan akses yang lebih terperinci ke resource Google Cloud tertentu dan mencegah akses yang tidak diinginkan ke resource lain. IAM memungkinkan Anda menerapkan prinsip keamanan dengan hak istimewa terendah, sehingga Anda hanya memberikan akses yang diperlukan ke resource Anda.

Dengan IAM, Anda dapat mengontrol siapa (pengguna) yang memiliki akses (peran) ke resource tertentu dengan menetapkan kebijakan IAM. Kebijakan IAM memberikan peran tertentu kepada pengguna untuk memberikan izin tertentu kepada pengguna.

Halaman ini menjelaskan peran IAM yang tersedia di tingkat resource organisasi, dan cara membuat serta mengelola kebijakan IAM untuk resource organisasi menggunakan Cloud Resource Manager API. Untuk penjelasan lengkap tentang IAM, baca dokumentasi IAM. Secara khusus, lihat Memberikan, Mengubah, dan Mencabut Akses.

Izin dan peran

Untuk mengontrol akses ke resource, Google Cloud mewajibkan akun yang membuat permintaan API memiliki peran IAM yang sesuai. Peran IAM mencakup izin yang memungkinkan pengguna melakukan tindakan tertentu pada resource Google Cloud. Misalnya, izin resourcemanager.organizations.get memungkinkan pengguna mendapatkan detail tentang resource organisasi mereka.

Anda tidak secara langsung memberikan izin kepada pengguna; tetapi, Anda memberikan peran kepada pengguna, yang memiliki satu atau beberapa izin yang dipaketkan di dalamnya.

Anda dapat memberikan satu atau beberapa peran pada resource yang sama.

Menggunakan peran bawaan

Tabel berikut mencantumkan peran yang dapat Anda berikan untuk mengakses properti resource organisasi, deskripsi fungsi peran tersebut, dan izin yang dipaketkan dalam peran tersebut.

Peran Izin

(roles/resourcemanager.organizationAdmin)

Akses untuk mengelola kebijakan IAM dan melihat kebijakan organisasi untuk organisasi, folder, dan project.

Resource tingkat terendah yang dapat Anda beri peran ini:

  • Project

essentialcontacts.*

  • essentialcontacts.contacts.create
  • essentialcontacts.contacts.delete
  • essentialcontacts.contacts.get
  • essentialcontacts.contacts.list
  • essentialcontacts.contacts.send
  • essentialcontacts.contacts.update

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.get

resourcemanager.folders.getIamPolicy

resourcemanager.folders.list

resourcemanager.folders.setIamPolicy

resourcemanager.organizations.*

  • resourcemanager.organizations.get
  • resourcemanager.organizations.getIamPolicy
  • resourcemanager.organizations.setIamPolicy

resourcemanager.projects.get

resourcemanager.projects.getIamPolicy

resourcemanager.projects.list

resourcemanager.projects.setIamPolicy

(roles/resourcemanager.organizationViewer)

Memberikan akses untuk melihat organisasi.

Resource tingkat terendah yang dapat Anda beri peran ini:

  • Organisasi

resourcemanager.organizations.get

(roles/orgpolicy.policyAdmin)

Memberikan akses untuk menentukan batasan yang ingin diterapkan oleh organisasi pada konfigurasi resource cloud dengan menetapkan Kebijakan Organisasi.

Resource tingkat terendah yang dapat Anda beri peran ini:

  • Organisasi

orgpolicy.*

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

policysimulator.orgPolicyViolations.list

policysimulator.orgPolicyViolationsPreviews.*

  • policysimulator.orgPolicyViolationsPreviews.create
  • policysimulator.orgPolicyViolationsPreviews.get
  • policysimulator.orgPolicyViolationsPreviews.list

(roles/browser)

Akses baca untuk menelusuri hierarki dalam suatu project, termasuk folder, organisasi, dan kebijakan izin. Peran ini tidak termasuk izin untuk melihat resource dalam project.

Resource tingkat terendah yang dapat Anda beri peran ini:

  • Project

resourcemanager.folders.get

resourcemanager.folders.list

resourcemanager.organizations.get

resourcemanager.projects.get

resourcemanager.projects.getIamPolicy

resourcemanager.projects.list

Membuat peran khusus

Selain peran yang telah ditetapkan yang dijelaskan dalam topik ini, Anda juga dapat membuat peran khusus yang merupakan kumpulan izin yang dapat disesuaikan dengan kebutuhan Anda. Saat membuat peran khusus untuk digunakan dengan Resource Manager, perhatikan hal-hal berikut:
  • Menampilkan dan mendapatkan izin, seperti resourcemanager.projects.get/list, harus selalu diberikan sebagai pasangan.
  • Saat peran khusus Anda menyertakan izin folders.list dan folders.get, peran khusus tersebut juga harus menyertakan projects.list dan projects.get.
  • Perlu diketahui bahwa izin setIamPolicy untuk organisasi, folder, dan resource project memungkinkan pengguna memberikan semua izin lain, sehingga harus diberikan dengan hati-hati.

Melihat akses yang ada untuk resource organisasi

Anda dapat melihat peran yang diberikan kepada pengguna untuk resource organisasi dengan mendapatkan kebijakan IAM level resource organisasi. Anda dapat melihat kebijakan resource organisasi menggunakan Google Cloud Console, Google Cloud CLI, atau metode getIamPolicy().

Konsol

Untuk melihat peran yang diberikan pada level resource organisasi menggunakan Konsol Google Cloud:

  1. Buka halaman Manage resources di Konsol Google Cloud:

    Buka halaman Kelola resource

  2. Di menu drop-down Organization, pilih resource organisasi Anda.

  3. Centang kotak untuk resource organisasi.

  4. Di sebelah kanan Panel Info, di bagian Izin, klik untuk meluaskan peran dan menampilkan semua anggota yang memiliki peran tersebut.

gcloud

Dapatkan kebijakan IAM untuk resource organisasi menggunakan perintah get-iam-policy:

gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json >
[FILENAME.JSON]

Perintah menghasilkan kebijakan, yang serupa dengan berikut ini:

bindings:
- members:
- user:testuser1@gcp-test.com
role: roles/editor
- members:
- user:admin@gcp-test.com
role:roles/resourcemanager.organizationAdmin
- members:
- user:testuser2@gcp-test.com
role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="

API

Cuplikan kode berikut menampilkan kebijakan untuk resource organisasi https://cloudresourcemanager.googleapis.com/v3/organizations/12345.

Permintaan:

POST
https://cloudresourcemanager.googleapis.com/v3/organizations/12345:getIamPolicy

Respons:

{
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
        "user:email1@gmail.com"
    ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
            "user:email2@gmail.com",
            "user:email3@gmail.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKHHiQ="
}

Python

Metode getIamPolicy() memungkinkan Anda mendapatkan kebijakan yang telah ditetapkan sebelumnya.

crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
    resource=flags.organizationId, body={}).execute()
print json.dumps(policy, indent=2)

Memberikan akses ke resource organisasi

Administrator Organisasi dapat memberikan peran IAM kepada anggota tim agar mereka dapat mengakses resource dan API organisasi. Anda dapat memberikan peran ke email Akun Google, Google Grup, akun layanan, atau domain G Suite. Anda dapat menggunakan Konsol Google Cloud, gcloud CLI, atau metode setIamPolicy() untuk memberikan peran.

Konsol

Untuk menyetel kontrol akses di level resource organisasi menggunakan Konsol Google Cloud:

  1. Buka halaman Manage resources di Konsol Google Cloud:

    Buka halaman Kelola resource

  2. Di menu drop-down Organization, pilih resource organisasi Anda.

  3. Centang kotak untuk resource organisasi. Jika Anda tidak memiliki resource Folder, resource organisasi tidak akan terlihat. Untuk melanjutkan, lihat petunjuk untuk memberikan peran melalui halaman IAM.

  4. Jika Panel Info di sebelah kanan disembunyikan, klik Tampilkan Panel Info di sudut kanan atas.

  5. Di Panel Info, pada tab Izin, klik Tambahkan Anggota.

  6. Di kolom Anggota baru, masukkan anggota tim yang ingin ditambahkan. Anda dapat menetapkan email Akun Google, Grup Google, akun layanan, atau domain G Suite.

  7. Di menu drop-down Pilih peran, pilih peran yang ingin diberikan kepada anggota tim.

  8. Klik Tambahkan.

gcloud

Untuk menetapkan kebijakan IAM resource organisasi menggunakan perintah gcloud:

  1. Dapatkan kebijakan IAM untuk resource organisasi menggunakan perintah get-iam-policy dan output kebijakan ke file JSON:

    gcloud alpha organizations get-iam-policy [ORGANIZATION_ID]
    --format json > [FILENAME.JSON]
    
  2. Isi file JSON akan terlihat seperti berikut:

    {
        "bindings": [
        {
            "members": [
                "user:testuser1@gcp-test.com"
            ],
            "role": "roles/editor"
        },
        {
            "members": [
                "user:admin@gcp-test.com",
            ],
            "role": "roles/resourcemanager.organizationAdmin"
        },
        {
            "members": [
                "user:testuser2@gcp-test.com"
            ],
            "role": "roles/resourcemanager.projectCreator"
        },
        ],
        "etag": "BwU1aRxWk30="
    }
    
  3. Dengan menggunakan editor teks, buka file JSON dan tambahkan entri baru ke array binding yang menentukan Administrator Organisasi. Misalnya untuk menjadikan anotheradmin@gcp-test.com sebagai Administrator Organisasi, Anda akan mengubah contoh yang ditampilkan di atas sebagai berikut:

    {
        "bindings": [
        {
            "members": [
                "user:testuser1@gcp-test.com"
            ],
            "role": "roles/editor"
        },
        {
            "members": [
                "user:admin@gcp-test.com",
                "user:anotheradmin@gcp-test.com"
            ],
            "role": "roles/resourcemanager.organizationAdmin"
        },
        {
            "members": [
                "user:testuser20@gcp-test.com"
            ],
            "role": "roles/resourcemanager.projectCreator"
        },
        ],
        "etag": "BwU1aRxWk30="
    }
    
  4. Perbarui kebijakan resource organisasi dengan menjalankan perintah berikut:

    gcloud alpha organizations set-iam-policy [ORGANIZATION_ID] policy.json
    

API

Permintaan:

POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:setIamPolicy
{
    "policy": {
    "version": "0",
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
            "user:email1@gmail.com"
        ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
        "user:email2@gmail.com",
        "user:email3@gmail.com",
        "serviceAccount:my-other-app@appspot.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKHHiQ="
    }
}

Respons:

{
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
            "user:email1@gmail.com"
        ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
            "user:email2@gmail.com",
            "user:email3@gmail.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKJUiQ="
}

Metode setIamPolicy() memungkinkan Anda memberikan peran kepada pengguna dengan melampirkan kebijakan IAM ke resource organisasi. Kebijakan IAM adalah kumpulan pernyataan yang menentukan siapa yang memiliki akses tertentu.

Read-Modify-Write: Pola umum untuk mengupdate metadata resource, seperti Policy adalah untuk membaca statusnya saat ini, mengupdate data secara lokal, lalu mengirim data yang telah diubah untuk ditulis. Pola ini dapat mengakibatkan konflik jika dua atau beberapa proses independen mencoba urutan secara bersamaan. Misalnya, ada dua pemilik untuk sebuah project dan keduanya mencoba membuat perubahan yang bertentangan pada kebijakan secara bersamaan. Perubahan yang dilakukan oleh salah satu pemilik project dapat gagal dalam beberapa kasus. IAM mengatasi masalah ini menggunakan properti etag dalam kebijakan IAM. Properti ini digunakan untuk memverifikasi apakah kebijakan telah berubah sejak permintaan terakhir. Saat Anda membuat permintaan ke IAM dengan nilai etag, IAM membandingkan nilai etag dalam permintaan dengan nilai etag yang ada yang terkait dengan kebijakan. Kode ini menulis kebijakan hanya jika nilai etag cocok.

Saat Anda memperbarui kebijakan, dapatkan kebijakan menggunakan getIamPolicy() terlebih dahulu, perbarui kebijakan, lalu tulis kebijakan yang diperbarui menggunakan setIamPolicy(). Gunakan nilai etag saat menetapkan kebijakan hanya jika kebijakan yang sesuai di GetPolicyResponse berisi nilai etag.

Python

Metode setIamPolicy() memungkinkan Anda melampirkan kebijakan ke resource. Metode setIamPolicy mengambil SetIamPolicyRequest, yang berisi kebijakan yang akan ditetapkan dan resource tempat kebijakan dilampirkan. Metode ini menampilkan kebijakan yang dihasilkan. Sebaiknya ikuti pola read-modify-write saat mengupdate kebijakan menggunakan setIamPolicy().

Berikut adalah beberapa kode contoh untuk menetapkan kebijakan resource organisasi:

crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
    resource=flags.organizationId, body={}).execute()

admin_binding = next(
    (binding
        for binding in policy['bindings']
        if binding['role'] == 'roles/resourcemanager.organizationAdmin'),
        None)

# Add an empty Organization Administrator binding if not present.
if not admin_binding:
    admin_binding = {
        'role': 'roles/resourcemanager.organizationAdmin',
        'members': []
    }
policy['bindings'].append(admin_binding)

# Add the new Admin (if necessary).
new_admin = 'user:' + flags.adminEmail
if new_admin not in admin_binding['members']:
    admin_binding['members'].append(new_admin)
policy = crm.organizations().setIamPolicy(
    resource=flags.organizationId,
    body={
        'resource': flags.organizationId,
        'policy': policy
    }).execute()

print json.dumps(policy, indent=2)

Membatasi visibilitas project bagi pengguna

Pengguna dapat melihat semua project yang aksesnya mereka miliki di Konsol Google Cloud dan di kueri penelusuran, terlepas dari apakah project tersebut berada di resource organisasi yang saat ini dipilih atau tidak. Anda dapat menggunakan Organization Policy Service untuk membatasi kumpulan project yang ditampilkan dalam kueri dan di Konsol Google Cloud. Hal ini dapat digunakan untuk membatasi pengguna agar hanya melihat project dalam domain Anda sendiri.

Batasan Kebijakan Organisasi constraints/resourcemanager.accessBoundaries adalah batasan daftar yang diterapkan pada resource organisasi Anda. Batasan ini menerima daftar ID resource organisasi, yang menentukan kumpulan resource organisasi yang membuat resource-nya terlihat oleh pengguna dalam kueri atau konsol Google Cloud.

Project muncul di bagian No organization jika pengguna tidak memiliki izin resourcemanager.organizations.get di resource organisasi induk project tersebut. Hal ini dapat membuat project yang bukan bagian dari resource organisasi Anda tidak dikaitkan dengan resource organisasi sama sekali. Jika Anda menggunakan batasan resourcemanager.accessBoundaries untuk melarang resource organisasi, project yang termasuk dalam resource organisasi tersebut tidak akan muncul sama sekali dalam kueri atau di Konsol Google Cloud. Setiap project yang belum dimigrasikan ke resource organisasi tidak akan terlihat jika batasan ini diterapkan.

Sebaiknya migrasikan project yang berada di bawah No organization ke resource organisasi Anda sebelum menerapkan batasan ini. Untuk mengetahui informasi tentang memigrasikan project ke resource organisasi, lihat Memindahkan project.

Untuk informasi tentang menetapkan kebijakan organisasi, lihat Menggunakan batasan.

Menguji izin

Anda dapat menguji izin IAM pada pengguna untuk resource organisasi dengan metode testIamPermissions(). Metode ini mengambil URL resource dan sekumpulan izin yang ingin Anda uji sebagai parameter input, serta menampilkan subset izin ini yang dapat diakses pengguna.

Anda biasanya tidak memanggil testIamPermission() jika menggunakan Konsol Google Cloud secara langsung untuk mengelola izin. testIamPermissions() dimaksudkan untuk diintegrasikan dengan software eksklusif Anda, seperti antarmuka pengguna grafis yang disesuaikan. Misalnya, Konsol Google Cloud menggunakan testIamPermissions() secara internal untuk menentukan UI mana yang harus tersedia bagi pengguna yang login.

API

Anda dapat menggunakan metode testIamPermissions() untuk memeriksa izin mana yang diberikan oleh pemanggil untuk resource tertentu. Metode ini mengambil nama resource dan sekumpulan izin sebagai parameter, serta menampilkan subset izin yang dimiliki pemanggil.

Berikut ini beberapa kode contoh untuk menguji izin bagi resource organisasi:

Request:

POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:testIamPermissions

{
    "permissions":  [
        "resourcemanager.organizations.get",
        "resourcemanager.organizations.setIamPolicy"
    ]
}

Response:

{
    "permissions": [
        "resourcemanager.organizations.get"
    ]
}

Python

crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))

response = crm.organizations().testIamPermissions(
    resource=flags.organizationId,
    body={
        'resource': flags.organizationId,
        'permissions': [
            'resourcemanager.organizations.setIamPolicy',
            'resourcemanager.projects.patch'
        ]
    }).execute()

print json.dumps(response, indent=2)