Membuat akun layanan

Halaman ini menjelaskan cara membuat akun layanan menggunakan Identity and Access Management (IAM) API, konsol Trusted Cloud , dan alat command line gcloud.

Secara default, setiap project dapat memiliki hingga 100 akun layanan yang mengontrol akses ke resource Anda. Jika perlu, Anda dapat meminta penambahan kuota. Pelajari kuota dan batas lebih lanjut.

Sebelum memulai

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk membuat akun layanan, minta administrator untuk memberi Anda peran IAM Membuat Akun Layanan (roles/iam.serviceAccountCreator) di project. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Jika ingin memberikan akun layanan yang baru dibuat akses ke project, Anda juga memerlukan peran admin IAM Project (roles/resourcemanager.projectIamAdmin).

Membuat akun layanan

Saat membuat akun layanan, Anda harus memberikan ID alfanumerik (SERVICE_ACCOUNT_NAME dalam contoh di bawah), seperti my-service-account. Panjang ID harus antara 6 sampai 30 karakter, dan dapat berisi karakter alfanumerik huruf kecil dan tanda pisah. Setelah membuat akun layanan, Anda tidak dapat mengubah namanya.

Nama akun layanan akan muncul di alamat email yang disediakan selama pembuatan, dalam format SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com.

Setiap akun layanan juga memiliki ID numerik unik yang permanen, yang dihasilkan secara otomatis.

Anda juga memberikan informasi berikut saat membuat akun layanan:

  • DESCRIPTION adalah deskripsi opsional untuk akun layanan.
  • DISPLAY_NAME adalah nama yang cocok untuk akun layanan.
  • PROJECT_ID adalah ID project Trusted Cloud by S3NS Anda.

Setelah membuat akun layanan, Anda mungkin perlu menunggu selama 60 detik atau lebih sebelum menggunakan akun layanan. Perilaku ini terjadi karena operasi baca pada akhirnya konsisten; perlu waktu hingga akun layanan baru terlihat. Jika Anda mencoba membaca atau menggunakan akun layanan segera setelah membuatnya, dan Anda menerima error, Anda dapat mencoba kembali permintaan dengan backoff eksponensial.

Konsol

  1. Di konsol Trusted Cloud , buka halaman Create service account.
  2. Pilih project Trusted Cloud .
  3. Masukkan nama akun layanan untuk ditampilkan di konsol Trusted Cloud .

    Konsol Trusted Cloud membuat ID akun layanan berdasarkan nama ini. Edit ID jika diperlukan. Anda tidak dapat mengubah ID nanti.

  4. Opsional: Masukkan deskripsi akun layanan.
  5. Jika tidak ingin menetapkan kontrol akses sekarang, klik Selesai untuk menyelesaikan pembuatan akun layanan. Untuk menetapkan kontrol akses sekarang, klik Buat dan lanjutkan, lalu lanjutkan ke langkah berikutnya.
  6. Opsional: Pilih satu atau beberapa peran IAM untuk diberikan ke akun layanan pada project.
  7. Setelah selesai menambahkan peran, klik Lanjutkan.
  8. Opsional: Di kolom Peran pengguna akun layanan, tambahkan anggota yang perlu melampirkan akun layanan ke resource lain.
  9. Opsional: Di kolom Peran admin akun layanan, tambahkan anggota yang perlu mengelola akun layanan.
  10. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Untuk membuat akun layanan, jalankan perintahgcloud iam service-accounts create:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --description="DESCRIPTION" \
      --display-name="DISPLAY_NAME"

    Ganti nilai berikut:

    • SERVICE_ACCOUNT_NAME: nama akun layanan

    • DESCRIPTION: deskripsi opsional untuk akun layanan

    • DISPLAY_NAME: nama akun layanan untuk ditampilkan di konsol Trusted Cloud

  3. Opsional: Untuk memberi akun layanan Anda peran IAM pada project Anda, jalankan perintah gcloud projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com" \
      --role="ROLE_NAME"

    Ganti nilai berikut:

    • PROJECT_ID: project ID

    • SERVICE_ACCOUNT_NAME: nama akun layanan

    • ROLE_NAME: nama peran, seperti roles/compute.osLogin

  4. Opsional: Untuk mengizinkan pengguna melampirkan akun layanan ke resource lain, jalankan perintah gcloud iam service-accounts add-iam-policy-binding untuk memberikan peran Pengguna Akun Layanan kepada pengguna (roles/iam.serviceAccountUser) di akun layanan:

    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
      --member="user:USER_EMAIL" \
      --role="roles/iam.serviceAccountUser"

    Ganti nilai berikut:

    • PROJECT_ID: the project ID

    • SERVICE_ACCOUNT_NAME: nama akun layanan

    • USER_EMAIL: alamat email untuk pengguna

  5. 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& project_id, std::string const& account_id,
       std::string const& display_name, std::string const& description) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::ServiceAccount service_account;
      service_account.set_display_name(display_name);
      service_account.set_description(description);
      auto response = client.CreateServiceAccount("projects/" + project_id,
                                                  account_id, service_account);
      if (!response) throw std::move(response).status();
      std::cout << "ServiceAccount successfully created: "
                << response->DebugString() << "\n";
    }

    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.

    
    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class ServiceAccounts
    {
        public static ServiceAccount CreateServiceAccount(string projectId,
            string name, string displayName)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            var request = new CreateServiceAccountRequest
            {
                AccountId = name,
                ServiceAccount = new ServiceAccount
                {
                    DisplayName = displayName
                }
            };
            var serviceAccount = service.Projects.ServiceAccounts.Create(
                request, "projects/" + projectId).Execute();
            Console.WriteLine("Created service account: " + serviceAccount.Email);
            return serviceAccount;
        }
    }
    

    Go

    Untuk mempelajari cara menginstal dan menggunakan library klien untuk IAM, lihat library klien IAM. Untuk informasi selengkapnya, lihat dokumentasi referensi API Go 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.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // createServiceAccount creates a service account.
    func createServiceAccount(w io.Writer, projectID, name, displayName string) (*iam.ServiceAccount, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	request := &iam.CreateServiceAccountRequest{
    		AccountId: name,
    		ServiceAccount: &iam.ServiceAccount{
    			DisplayName: displayName,
    		},
    	}
    	account, err := service.Projects.ServiceAccounts.Create("projects/"+projectID, request).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Create: %w", err)
    	}
    	fmt.Fprintf(w, "Created service account: %v", account)
    	return account, nil
    }
    

    Java

    Untuk mempelajari cara menginstal dan menggunakan library klien untuk IAM, lihat library klien IAM. Untuk informasi selengkapnya, lihat dokumentasi referensi API Java 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.

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.CreateServiceAccountRequest;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.admin.v1.ServiceAccount;
    import java.io.IOException;
    
    public class CreateServiceAccount {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        String projectId = "your-project-id";
        String serviceAccountName = "my-service-account-name";
    
        createServiceAccount(projectId, serviceAccountName);
      }
    
      // Creates a service account.
      public static ServiceAccount createServiceAccount(String projectId, String serviceAccountName)
              throws IOException {
        ServiceAccount serviceAccount = ServiceAccount
                .newBuilder()
                .setDisplayName("your-display-name")
                .build();
        CreateServiceAccountRequest request = CreateServiceAccountRequest.newBuilder()
                .setName(ProjectName.of(projectId).toString())
                .setAccountId(serviceAccountName)
                .setServiceAccount(serviceAccount)
                .build();
        // 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 (IAMClient iamClient = IAMClient.create()) {
          serviceAccount = iamClient.createServiceAccount(request);
          System.out.println("Created service account: " + serviceAccount.getEmail());
        }
        return serviceAccount;
      }
    }

    Python

    Untuk mempelajari cara menginstal dan menggunakan library klien untuk IAM, lihat library klien IAM. Untuk informasi selengkapnya, lihat dokumentasi referensi API Python 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.

    from typing import Optional
    
    from google.cloud import iam_admin_v1
    from google.cloud.iam_admin_v1 import types
    
    
    def create_service_account(
        project_id: str, account_id: str, display_name: Optional[str] = None
    ) -> types.ServiceAccount:
        """Creates a service account.
    
        project_id: ID or number of the Google Cloud project you want to use.
        account_id: ID which will be unique identifier of the service account
        display_name (optional): human-readable name, which will be assigned
            to the service account
    
        return: ServiceAccount
        """
    
        iam_admin_client = iam_admin_v1.IAMClient()
        request = types.CreateServiceAccountRequest()
    
        request.account_id = account_id
        request.name = f"projects/{project_id}"
    
        service_account = types.ServiceAccount()
        service_account.display_name = display_name
        request.service_account = service_account
    
        account = iam_admin_client.create_service_account(request=request)
    
        print(f"Created a service account: {account.email}")
        return account

    REST

    Metode serviceAccounts.create membuat akun layanan.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Trusted Cloud Anda. Project ID adalah string alfanumerik, seperti my-project.
    • SA_NAME: ID alfanumerik akun layanan Anda. Panjang nama ini harus antara 6 dan 30 karakter, serta dapat berisi karakter alfanumerik huruf kecil dan tanda pisah.
    • SA_DESCRIPTION: Opsional. Deskripsi untuk akun layanan.
    • SA_DISPLAY_NAME: Nama yang dapat dibaca manusia untuk akun layanan.

    Metode HTTP dan URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts

    Meminta isi JSON:

    {
      "accountId": "SA_NAME",
      "serviceAccount": {
        "description": "SA_DESCRIPTION",
        "displayName": "SA_DISPLAY_NAME"
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan melihat respons JSON seperti berikut:

    {
      "name": "projects/my-project/serviceAccounts/my-service-account@my-project.s3ns-system.iam.gserviceaccount.com",
      "projectId": "my-project",
      "uniqueId": "123456789012345678901",
      "email": "my-service-account@my-project.s3ns-system.iam.gserviceaccount.com",
      "displayName": "My service account",
      "etag": "BwUp3rVlzes=",
      "description": "A service account for running jobs in my project",
      "oauth2ClientId": "987654321098765432109"
    }
    

Setelah Anda membuat akun layanan, berikan satu atau beberapa peran ke akun layanan sehingga akun layanan tersebut dapat bertindak atas nama Anda.

Selain itu, jika akun layanan perlu mengakses resource di project lain, biasanya Anda harus mengaktifkan API untuk resource tersebut dalam project tempat Anda membuat akun layanan.

Langkah selanjutnya