Google Cloud menawarkan Identity and Access Management (IAM), yang memungkinkan Anda memberikan akses secara 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, jadi 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 izin. Kebijakan izinkan memberikan peran tertentu kepada pengguna untuk memberikan izin tertentu kepada pengguna tersebut.
Halaman ini menjelaskan peran IAM yang tersedia di resource organisasi, dan cara membuat serta mengelola kebijakan izin untuk resource organisasi menggunakan Cloud Resource Manager API. Untuk mengetahui informasi selengkapnya, lihat Mengelola akses ke project, folder, dan organisasi.
Izin dan peran
Untuk mengontrol akses ke resource, Google Cloud mengharuskan akun yang membuat permintaan API memiliki peran IAM yang sesuai. Peran IAM
mencakup izin yang memungkinkan pengguna melakukan tindakan tertentu pada
Google Cloud resource. 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 |
|---|---|
Organization Administrator( Akses untuk mengelola kebijakan IAM dan melihat kebijakan organisasi untuk organisasi, folder, dan project. Resource level terendah tempat Anda dapat memberikan peran ini:
|
|
Organization Viewer( Memberikan akses untuk melihat organisasi. Resource level terendah tempat Anda dapat memberikan peran ini:
|
|
Administrator Kebijakan Organisasi( Memberikan akses untuk menentukan batasan yang ingin diterapkan organisasi pada konfigurasi resource cloud dengan menetapkan Kebijakan Organisasi. Resource level terendah tempat Anda dapat memberikan peran ini:
|
|
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 level terendah tempat Anda dapat memberikan peran ini:
|
|
Membuat peran khusus
Selain peran bawaan yang dijelaskan dalam topik ini, Anda juga dapat membuat peran khusus yang merupakan kumpulan izin yang Anda sesuaikan dengan kebutuhan Anda. Saat membuat peran kustom untuk digunakan dengan Resource Manager, perhatikan poin-poin berikut:- Mencantumkan dan mendapatkan izin, seperti
resourcemanager.projects.get/list, harus selalu diberikan sebagai pasangan. - Jika peran khusus Anda menyertakan izin
folders.listdanfolders.get, peran tersebut juga harus menyertakanprojects.listdanprojects.get. - Perlu diketahui bahwa izin
setIamPolicyuntuk resource organisasi, folder, dan project memungkinkan pengguna memberikan semua izin lainnya, sehingga harus ditetapkan dengan hati-hati.
Melihat akses yang ada untuk resource organisasi
Anda dapat melihat peran yang diberikan kepada pengguna untuk resource organisasi dengan
mendapatkan kebijakan izinkan resource tersebut. Anda dapat melihat kebijakan izinkan untuk resource organisasi menggunakan konsol Google Cloud , Google Cloud CLI, atau metode getIamPolicy().
Konsol
Untuk melihat peran yang diberikan di tingkat resource organisasi menggunakan konsol Google Cloud :
Buka halaman Kelola resource di konsol Google Cloud :
Di menu drop-down Organization, pilih resource organisasi Anda.
Pilih kotak centang untuk resource organisasi.
Di Panel Info, di bagian Izin, klik Perluas peran dan tampilkan semua anggota yang memiliki peran tersebut.
gcloud
Dapatkan kebijakan izinkan untuk resource organisasi menggunakan perintah get-iam-policy:
gcloud alpha organizations get-iam-policy <var>ORGANIZATION_ID</var> --format json >
<var>FILENAME.JSON</var>
Perintah tersebut menghasilkan kebijakan izinkan, yang terlihat mirip 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 izin 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 izin 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 pengguna, Grup Google, akun layanan, atau domain G Suite. Anda dapat menggunakan konsol Google Cloud , gcloud CLI, atau
metode
setIamPolicy()
untuk memberikan peran.
Konsol
Untuk menetapkan kontrol akses di tingkat resource organisasi menggunakan konsol Google Cloud :
Buka halaman Kelola resource di konsol Google Cloud :
Di menu drop-down Organization, pilih resource organisasi Anda.
Pilih kotak centang untuk resource organisasi. Jika Anda tidak memiliki resource folder, resource organisasi tidak akan terlihat. Untuk melanjutkan, lihat petunjuk untuk memberikan peran melalui halaman IAM.
Jika Panel Info di sebelah kanan disembunyikan, klik Tampilkan Panel Info di pojok kanan atas.
Di Panel Info, pada tab Izin, klik Tambahkan Anggota.
Di kolom Anggota baru, masukkan anggota tim yang ingin Anda tambahkan. Anda dapat menentukan email akun pengguna, Grup Google, akun layanan, atau domain G Suite.
Di menu drop-down Pilih peran, pilih peran yang ingin Anda berikan kepada anggota tim.
Klik Tambahkan.
gcloud
Untuk menetapkan kebijakan izinkan resource organisasi menggunakan perintah gcloud:
Dapatkan kebijakan izin untuk resource organisasi menggunakan perintah
get-iam-policydan hasilkan kebijakan ke file JSON:gcloud alpha organizations get-iam-policy <var>ORGANIZATION_ID</var> --format json > <var>FILENAME.JSON</var>Isi file JSON akan terlihat mirip dengan 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="
}
- Buka file JSON di editor teks. Kemudian, tambahkan entri baru ke array
bindingsuntuk menentukan Administrator Organisasi. Misalnya, untuk menjadikananotheradmin@gcp-test.comsebagai Administrator Organisasi, ubah contoh sebelumnya 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="
}
- Perbarui kebijakan izinkan resource organisasi dengan menjalankan perintah berikut:
gcloud alpha organizations set-iam-policy <var>ORGANIZATION_ID</var> 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 izinkan ke resource organisasi. Kebijakan izin adalah kumpulan
binding yang menentukan .
Baca-Ubah-Tulis: Pola umum untuk memperbarui metadata resource, seperti kebijakan izin, melibatkan pembacaan status saat ini, memperbarui data secara lokal, lalu mengirim data yang diubah untuk ditulis. Pola ini dapat
menyebabkan konflik jika dua atau beberapa proses independen mencoba
urutan secara bersamaan. Misalnya, jika dua pemilik project mencoba membuat perubahan yang bertentangan pada kebijakan
izin secara bersamaan, perubahan salah satu pemilik dapat gagal. IAM mengatasi masalah ini dengan menggunakan properti etag
dalam kebijakan izin. Properti ini memverifikasi apakah
kebijakan izin telah berubah sejak permintaan terakhir. Saat Anda membuat permintaan
dengan nilai etag, sistem akan membandingkan nilai etag dalam permintaan dengan
nilai etag yang ada yang terkait dengan kebijakan. Kebijakan izin hanya ditulis jika nilai etag cocok.
Saat Anda memperbarui kebijakan izin, pertama-tama dapatkan kebijakan izin menggunakan
getIamPolicy(), perbarui kebijakan izin, lalu tulis kebijakan izin yang diperbarui
menggunakan setIamPolicy(). Saat Anda menetapkan kebijakan izin, gunakan nilai etag hanya jika kebijakan izin yang sesuai di GetPolicyResponse
berisi nilai etag.
Python
Metode
setIamPolicy()
memungkinkan Anda melampirkan kebijakan izinkan ke resource. Metode setIamPolicy
mengambil SetIamPolicyRequest, yang berisi kebijakan izin yang akan
ditetapkan dan resource yang akan dilampiri kebijakan izin. API ini menampilkan
kebijakan izin yang dihasilkan. Sebaiknya ikuti pola
baca-ubah-tulis
saat Anda memperbarui kebijakan izin menggunakan setIamPolicy().
Berikut adalah contoh kode untuk menetapkan kebijakan izin bagi 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 untuk pengguna
Pengguna dapat melihat semua project yang dapat mereka akses di konsol Google Cloud dan dalam kueri penelusuran, terlepas dari apakah mereka berada di resource organisasi yang dipilih pengguna atau tidak. Anda dapat menggunakan Layanan Kebijakan Organisasi untuk membatasi kumpulan project yang ditampilkan dalam kueri dan di konsol Google Cloud . Dengan fitur ini, Anda dapat membatasi pengguna agar hanya dapat melihat project dalam domain Anda.
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 resourcenya terlihat oleh pengguna dalam kueri atau konsol Google Cloud .
Project muncul di bagian No organization jika pengguna tidak memiliki izin
resourcemanager.organizations.get pada resource organisasi induk
project. Hal ini dapat menyebabkan project yang bukan bagian dari resource organisasi Anda tampak tidak terkait dengan resource organisasi mana pun.
Jika Anda menggunakan batasan resourcemanager.accessBoundaries untuk melarang resource organisasi, project yang termasuk dalam resource organisasi tersebut tidak akan muncul dalam kueri atau di konsol Google Cloud . Project yang belum dimigrasikan ke resource organisasi tidak akan terlihat jika Anda menerapkan batasan ini.
Sebaiknya migrasikan project yang berada di bawah No organization ke resource organisasi Anda sebelum menerapkan batasan ini. Untuk mengetahui informasi tentang
memindahkan project ke resource organisasi, lihat
Memindahkan project.
Untuk mengetahui informasi tentang cara menetapkan kebijakan organisasi, lihat Menggunakan batasan.
Memberikan akses bersyarat
Peran IAM tertentu, seperti Administrator Kebijakan Organisasi (roles/orgpolicy.policyAdmin), hanya dapat diberikan di resource organisasi.
Karena pewarisan kebijakan, semua resource dalam organisasi biasanya mewarisi peran ini.
Untuk kontrol lebih besar atas resource yang diberi peran, Anda dapat menggunakan
IAM Conditions. Dengan menggunakan tag dengan
kondisi, Anda dapat memberikan akses ke resource hanya jika resource tersebut memiliki
tag yang ditentukan. Misalnya, kebijakan izin berikut memberikan peran Administrator Kebijakan Organisasi hanya pada resource yang memiliki tag environment: dev, dan tidak memberikannya pada resource lain:
{
"bindings": [
{
"members": [
"{dynamic print variables.examples.principal_group_api}"
],
"role": "roles/orgpolicy.policyAdmin",
"condition": {
"title": "Dev_environment_only",
"description": "Only granted in the development environment",
"expression":
"resource.matchTag('123456789012/env', 'dev')"
}
}
],
"etag": "BwWKmjvelug=",
"version": 3
}
Menguji izin
Anda dapat menguji izin IAM pada pengguna untuk resource organisasi dengan metode
testIamPermissions(). Metode ini mengambil URL resource dan kumpulan izin yang akan diuji. URL ini menampilkan subset izin yang dapat diakses pengguna.
Anda biasanya tidak memanggil testIamPermissions() jika Anda menggunakan
konsolGoogle Cloud secara langsung untuk mengelola izin. testIamPermissions() dimaksudkan untuk integrasi dengan software eksklusif Anda seperti antarmuka pengguna grafis yang disesuaikan. Misalnya, konsol Google Cloud menggunakan
testIamPermissions() secara internal untuk menentukan UI mana yang tersedia bagi
pengguna yang login.
API
Anda dapat menggunakan metode
testIamPermissions()
untuk memeriksa izin yang dimiliki pemanggil untuk resource tertentu. Metode ini mengambil nama resource dan sekumpulan izin sebagai
parameter, serta menampilkan subset izin yang dimiliki pemanggil.
Berikut adalah contoh kode 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)