Menguji izin untuk antarmuka pengguna kustom

Sebagian besar resource Trusted Cloud by S3NS mengekspos metode testIamPermissions(), yang memungkinkan Anda secara terprogram memeriksa apakah pemanggil yang saat ini terautentikasi telah diberi satu atau beberapa izin IAM tertentu pada resource. Metode testIamPermissions() ini mengambil ID resource dan sekumpulan izin sebagai parameter input, serta menampilkan sekumpulan izin yang diizinkan oleh pemanggil.

Anda dapat menggunakan metode testIamPermissions() untuk menentukan apakah pengguna harus memiliki akses ke alat administratif di aplikasi web. Misalnya, Anda dapat menggunakan metode ini untuk memutuskan apakah akan menampilkan informasi mendetail tentang resource Trusted Cloud , berdasarkan izin pengguna.

Misalnya, untuk menentukan apakah pengguna yang saat ini terautentikasi memiliki izin untuk menghapus project, panggil metode projects.testIamPermissions() dengan memberikan project ID (seperti foo-project) dan izin resourcemanager.projects.delete sebagai parameter input. Jika pemanggil telah diberi izin resourcemanager.projects.delete, izin tersebut akan tercantum dalam isi respons. Jika pemanggil tidak memiliki izin ini, isi respons akan mencantumkan tidak ada izin.

Metode testIamPermissions() ditujukan untuk antarmuka pengguna grafis (GUI) pihak ketiga yang perlu menampilkan resource Trusted Cloud berdasarkan hal yang dapat dilihat oleh pengguna terautentikasi. Misalnya, konsolTrusted Cloud secara internal menggunakan metode testIamPermissions() untuk menentukan resource dan fungsionalitas yang terlihat oleh Anda setelah autentikasi. Pengguna yang berbeda biasanya diberi izin yang berbeda, dan konsol Trusted Cloud menyembunyikan atau mengekspos item sebagaimana mestinya.

Sebelum memulai

Peran yang diperlukan

Tidak diperlukan peran IAM untuk menguji izin.

Cara menguji izin

Contoh ini menunjukkan cara menguji izin resourcemanager.projects.get dan resourcemanager.projects.delete untuk projectTrusted Cloud . Untuk menguji izin resource Trusted Cloud lainnya, gunakan metode testIamPermissions() yang diekspos oleh setiap resource. Misalnya, Anda dapat menguji izin IAM untuk bucket Cloud Storage.

C++

Untuk mempelajari cara menginstal dan menggunakan library klien untuk IAM, lihat library klien IAM. Untuk informasi selengkapnya, lihat dokumentasi referensi API C++ IAM.

Untuk melakukan autentikasi ke IAM, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

Sebelum menjalankan contoh kode, tetapkan variabel lingkungan GOOGLE_CLOUD_UNIVERSE_DOMAIN ke s3nsapis.fr.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name, std::vector<std::string> const& permissions) {
  iam::IAMClient client(iam::MakeIAMConnection());
  auto response = client.TestIamPermissions(name, permissions);
  if (!response) throw std::move(response).status();
  std::cout << "Permissions successfully tested: " << response->DebugString()
            << "\n";
}

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.

IAM menguji izin akun layanan yang Anda gunakan untuk membuat kredensial.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static IList<String> TestIamPermissions(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        TestIamPermissionsRequest requestBody = new TestIamPermissionsRequest();
        var permissions = new List<string>() { "resourcemanager.projects.get", "resourcemanager.projects.delete" };
        requestBody.Permissions = new List<string>(permissions);
        var returnedPermissions = service.Projects.TestIamPermissions(requestBody, projectId).Execute().Permissions;

        return returnedPermissions;
    }
}

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.

IAM menguji izin akun layanan yang Anda gunakan untuk membuat kredensial.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.TestIamPermissionsRequest;
import com.google.api.services.cloudresourcemanager.v3.model.TestIamPermissionsResponse;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class TestPermissions {

  // Tests if the caller has the listed permissions.
  public static void testPermissions(String projectId) {
    // projectId = "my-project-id"

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return;
    }

    List<String> permissionsList =
        Arrays.asList("resourcemanager.projects.get", "resourcemanager.projects.delete");

    TestIamPermissionsRequest requestBody =
        new TestIamPermissionsRequest().setPermissions(permissionsList);
    try {
      TestIamPermissionsResponse testIamPermissionsResponse =
          service.projects().testIamPermissions(projectId, requestBody).execute();

      System.out.println(
          "Of the permissions listed in the request, the caller has the following: "
              + testIamPermissionsResponse.getPermissions().toString());
    } catch (IOException e) {
      System.out.println("Unable to test permissions: \n" + e.toString());
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

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.

IAM menguji izin akun layanan yang Anda gunakan untuk membuat kredensial.

def test_permissions(project_id: str) -> List[str]:
    """Tests IAM permissions of currently authenticated user to a project."""

    projects_client = resourcemanager_v3.ProjectsClient()
    if not project_id.startswith("projects/"):
        project_id = "projects/" + project_id

    owned_permissions = projects_client.test_iam_permissions(
        resource=project_id,
        permissions=["resourcemanager.projects.get", "resourcemanager.projects.delete"],
    ).permissions

    print("Currently authenticated user has following permissions:", owned_permissions)
    return owned_permissions

REST

Dalam contoh ini, pengguna memiliki peran IAM yang memungkinkan mereka untuk mendapatkan informasi tentang suatu project, tetapi tidak untuk menghapus project.

Metode projects.testIamPermissions Resource Manager API menerima daftar izin dan menguji izin yang dimiliki akun utama.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID project Trusted Cloud Anda. Project ID adalah string alfanumerik, seperti my-project.

Metode HTTP dan URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:testIamPermissions

Meminta isi JSON:

{
  "permissions":  [
    "resourcemanager.projects.get",
    "resourcemanager.projects.delete"
  ]
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

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

Langkah berikutnya

Pelajari cara memberikan, mengubah, dan mencabut akses ke akun utama.