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 yang 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 mengetahui deskripsi mendetail 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
menyertakan 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 |
---|---|
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 menjelajahi 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 disesuaikan dengan kebutuhan Anda. Saat membuat peran kustom untuk digunakan dengan Resource Manager, perhatikan poin-poin berikut:- Izin daftar dan dapatkan, seperti
resourcemanager.projects.get/list
, harus selalu diberikan sebagai pasangan. - Jika peran kustom Anda menyertakan izin
folders.list
danfolders.get
, peran tersebut juga harus menyertakanprojects.list
danprojects.get
. - Perhatikan bahwa izin
setIamPolicy
untuk 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 IAM tingkat resource organisasi. Anda dapat melihat kebijakan 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 Mengelola resource di konsol Google Cloud:
Pada menu drop-down Organization, pilih resource organisasi Anda.
Pilih kotak centang untuk resource organisasi.
Di sisi kanan Panel Info, pada 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 ini menghasilkan kebijakan, yang akan 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 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
sehingga mereka dapat mengakses resource dan API organisasi. Anda dapat memberikan
peran ke email Akun Google, 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 Mengelola resource di konsol Google Cloud:
Pada 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 pemberian peran melalui halaman IAM.
Jika panel Panel Info di sebelah kanan disembunyikan, klik Tampilkan Panel Info di pojok kanan atas.
Di panel Panel Info, pada tab Izin, klik Tambahkan Anggota.
Di kolom Anggota baru, masukkan anggota tim yang ingin ditambahkan. Anda dapat menetapkan email Akun Google, Grup Google, akun layanan, atau domain G Suite.
Di menu drop-down Select a role, pilih peran yang ingin Anda berikan kepada anggota tim.
Klik Tambahkan.
gcloud
Untuk menetapkan kebijakan IAM resource organisasi menggunakan perintah gcloud
:
Dapatkan kebijakan IAM untuk resource organisasi menggunakan perintah
get-iam-policy
dan hasilkan kebijakan ke file JSON:gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json > [FILENAME.JSON]
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=" }
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=" }
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 apa.
Read-Modify-Write: Pola umum untuk memperbarui metadata resource, seperti Kebijakan, adalah membaca status saat ini, memperbarui data secara lokal, lalu mengirim data yang 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 akan membandingkan nilai etag dalam permintaan tersebut dengan nilai etag yang ada yang terkait dengan kebijakan. Kebijakan hanya ditulis jika nilai etag cocok.
Saat Anda memperbarui kebijakan, pertama-tama dapatkan kebijakan menggunakan getIamPolicy()
,
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
menggunakan
SetIamPolicyRequest
, yang berisi kebijakan yang akan ditetapkan dan resource tempat
kebijakan dilampirkan. Fungsi ini menampilkan kebijakan yang dihasilkan. Sebaiknya
ikuti pola baca-ubah-tulis
saat memperbarui kebijakan menggunakan setIamPolicy()
.
Berikut adalah beberapa contoh kode untuk menetapkan kebijakan 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 aksesnya mereka miliki di konsol Google Cloud dan dalam kueri penelusuran, terlepas dari apakah project tersebut berada di resource organisasi yang saat ini dipilih pengguna atau tidak. Anda dapat menggunakan Layanan Kebijakan Organisasi 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 akan muncul di bagian No organization
jika pengguna tidak memiliki
izin resourcemanager.organizations.get
pada resource organisasi induk
project. 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 kurang dari No organization
ke resource organisasi Anda sebelum menerapkan batasan ini. Untuk informasi tentang cara
memigrasikan project ke resource organisasi, lihat
Memindahkan project.
Untuk informasi tentang cara menetapkan kebijakan organisasi, lihat Menggunakan batasan.
Menguji izin
Anda dapat menguji izin IAM pada pengguna untuk resource organisasi dengan metode testIamPermissions()
. Metode ini menggunakan URL resource dan kumpulan izin yang ingin Anda
uji sebagai parameter input, dan menampilkan subkumpulan izin ini yang
diakses pengguna.
Anda biasanya tidak memanggil testIamPermission()
jika menggunakan
konsol Google 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 harus tersedia bagi
pengguna yang login.
API
Anda dapat menggunakan metode testIamPermissions()
untuk memeriksa izin mana yang dimiliki pemanggil untuk resource yang diberikan. Metode ini menggunakan nama resource dan sekumpulan izin sebagai
parameter, dan menampilkan subset izin yang dimiliki pemanggil.
Berikut adalah beberapa contoh kode untuk menguji izin untuk 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)