יצירת חשבונות שירות

בדף הזה מוסבר איך ליצור חשבונות שירות באמצעות ממשק ה-API של ניהול זהויות והרשאות גישה (IAM), מסוף Google Cloud Google Cloud וכלי שורת הפקודה gcloud.

כברירת מחדל, בכל פרויקט יכולים להיות עד 100 חשבונות שירות ששולטים בגישה למשאבים. במקרה הצורך, אפשר לבקש הגדלה של המכסה. מידע נוסף על מכסות ומגבלות

לפני שמתחילים

  • Enable the IAM API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  • מגדירים אימות.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google 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.

    C#‎

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של .NET שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    C++‎

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של C++ שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    Go

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Go שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    Java

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Java שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    Python

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Python שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    REST

    כדי להשתמש בדוגמאות של API בארכיטקטורת REST שבדף הזה בסביבת פיתוח מקומית, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .

  • הסבר על חשבונות שירות של IAM

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות ליצירת חשבונות שירות, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד יצירת חשבונות שירות (roles/iam.serviceAccountCreator) בפרויקט. להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

אם רוצים להעניק לחשבונות שירות שנוצרו לאחרונה גישה לפרויקט, צריך גם את התפקיד 'אדמין IAM בפרויקט' (roles/resourcemanager.projectIamAdmin).

יצירה של חשבון שירות

כשיוצרים חשבון שירות, צריך לספק מזהה אלפאנומרי (SERVICE_ACCOUNT_NAME בדוגמאות הבאות), כמו my-service-account. המזהה צריך להכיל בין 6 ל-30 תווים, והוא יכול להכיל תווים אלפאנומריים קטנים ומקפים. אחרי שיוצרים חשבון שירות, אי אפשר לשנות את השם שלו.

השם של חשבון השירות מופיע בכתובת האימייל שמוקצית במהלך היצירה, בפורמט SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

לכל חשבון שירות יש גם מזהה מספרי ייחודי וקבוע, שנוצר באופן אוטומטי.

כשיוצרים חשבון שירות, צריך לציין גם את הפרטים הבאים:

  • DESCRIPTION הוא תיאור אופציונלי לחשבון השירות.
  • DISPLAY_NAME הוא שם ידידותי לחשבון השירות.
  • PROJECT_ID הוא מזהה הפרויקט שלכם. Google Cloud

אחרי שיוצרים חשבון שירות, יכול להיות שיהיה צריך להמתין 60 שניות לפחות לפני שאפשר להשתמש בו. התנהגות כזו מתרחשת כי בסופו של דבר פעולות קריאה עובדות לפי מודל עקביות הדרגתי, ויכול להיות שיחלוף זמן מה עד שחשבון השירות החדש יופיע. אם ניסיתם לקרוא חשבון שירות או להשתמש בו מיד אחרי שנוצר, וקיבלתם הודעת שגיאה, תוכלו לנסות שוב את הבקשה עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff).

המסוף

  1. במסוף Google Cloud , נכנסים לדף יצירת חשבון שירות.

    כניסה לדף Create service account

    שאר השלבים יופיעו במסוף. Google Cloud

  2. בוחרים פרויקט Google Cloud .
  3. נותנים לחשבון השירות שם שיוצג במסוף Google Cloud .

    המסוף יוצר מזהה לחשבון השירות על סמך השם הזה. Google Cloud עורכים את המזהה לפי הצורך. אי אפשר יהיה לשנות את המזהה בשלב מאוחר יותר.

  4. אופציונלי: מזינים תיאור של חשבון השירות.
  5. אם לא רוצים להגדיר את אמצעי בקרת הגישה עכשיו, לוחצים על Done כדי לסיים את יצירת חשבון השירות. כדי להגדיר אמצעי בקרת גישה עכשיו, לוחצים על Create and continue וממשיכים לשלב הבא.
  6. אופציונלי: אפשר לבחור תפקיד IAM אחד או יותר כדי להקצות לחשבון השירות בפרויקט.
  7. כשמסיימים להוסיף תפקידים, לוחצים על Continue.
  8. אופציונלי: בשדה Service account users role, מוסיפים חברים שצריכים לצרף את חשבון השירות למשאבים אחרים.
  9. אופציונלי: בשדה Service account admins role, מוסיפים חברים שצריכים לנהל את חשבון השירות.
  10. לוחצים על Done כדי לסיים ליצור את חשבון השירות.

gcloud

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

    Activate Cloud Shell

    At the bottom of the Google 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. כדי ליצור את חשבון השירות, מריצים את הפקודה gcloud iam service-accounts create:

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

    מחליפים את הערכים הבאים:

    • SERVICE_ACCOUNT_NAME: השם של חשבון השירות

    • DESCRIPTION: תיאור אופציונלי של חשבון השירות

    • DISPLAY_NAME: השם של חשבון השירות שיופיע ב Google Cloud מסוף

  3. אופציונלי: כדי להקצות לחשבון השירות תפקיד IAM בפרויקט, מריצים את הפקודה gcloud projects add-iam-policy-binding:

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

    מחליפים את הערכים הבאים:

    • PROJECT_ID: מזהה הפרויקט

    • SERVICE_ACCOUNT_NAME: השם של חשבון השירות

    • ROLE_NAME: שם התפקיד, כמו roles/compute.osLogin

  4. אופציונלי: כדי לאפשר למשתמשים לצרף את חשבון השירות למשאבים אחרים, מריצים את הפקודה gcloud iam service-accounts add-iam-policy-binding כדי להקצות למשתמש את התפקיד 'משתמש בחשבון שירות' (roles/iam.serviceAccountUser) בחשבון השירות:

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

    מחליפים את הערכים הבאים:

    • PROJECT_ID: מזהה הפרויקט

    • SERVICE_ACCOUNT_NAME: השם של חשבון השירות

    • USER_EMAIL: כתובת האימייל של המשתמש

  5. C++

    במאמר ספריות הלקוח של IAM מוסבר איך להתקין את ספריית הלקוח ולהשתמש בה ב-IAM. למידע נוסף, קראו את מאמרי העזרה של ‎IAM C++ API‎.

    כדי לבצע אימות ב-IAM, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר לפני שמתחילים.

    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#

    במאמר ספריות הלקוח של IAM מוסבר איך להתקין את ספריית הלקוח ולהשתמש בה ב-IAM. למידע נוסף, קראו את מאמרי העזרה של ‎IAM C# API‎.

    כדי לבצע אימות ב-IAM, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר לפני שמתחילים.

    
    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

    במאמר ספריות הלקוח של IAM מוסבר איך להתקין את ספריית הלקוח ולהשתמש בה ב-IAM. למידע נוסף, קראו את מאמרי העזרה של ‎IAM Go API‎.

    כדי לבצע אימות ב-IAM, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר לפני שמתחילים.

    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

    במאמר ספריות הלקוח של IAM מוסבר איך להתקין את ספריית הלקוח ולהשתמש בה ב-IAM. למידע נוסף, קראו את מאמרי העזרה של ‎IAM Java API‎.

    כדי לבצע אימות ב-IAM, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר לפני שמתחילים.

    
    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

    במאמר ספריות הלקוח של IAM מוסבר איך להתקין את ספריית הלקוח ולהשתמש בה ב-IAM. למידע נוסף, קראו את מאמרי העזרה של ‎IAM Python API‎.

    כדי לבצע אימות ב-IAM, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר לפני שמתחילים.

    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

    השיטה serviceAccounts.create יוצרת חשבון שירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • SA_NAME: המזהה האלפאנומרי של חשבון השירות. השם הזה צריך להכיל בין 6 ל-30 תווים, והוא יכול להכיל תווים אלפאנומריים קטנים ומקפים.
    • SA_DESCRIPTION: אופציונלי. תיאור של חשבון השירות.
    • SA_DISPLAY_NAME: שם לחשבון השירות שקריא לאנשים.

    שיטת ה-HTTP וכתובת ה-URL:

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

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    אתם אמורים לקבל תגובת JSON שדומה לזו:

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

אחרי שיוצרים חשבון שירות, מקצים תפקיד אחד או יותר לחשבון השירות כדי שהוא יוכל לפעול בשמכם.

בנוסף, אם חשבון השירות צריך גישה למשאבים בפרויקטים אחרים, בדרך כלל צריך להפעיל את ממשקי ה-API למשאבים האלו בפרויקט שבו יצרתם את חשבון השירות.

המאמרים הבאים

נסו בעצמכם

אתם משתמשים חדשים ב- Google Cloud? אנחנו ממליצים לכם ליצור חשבון, להתנסות בעצמכם במוצרים שלנו ולבחון אותם באמצעות תרחישים ממשיים. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.

מתחילים לעבוד בלי לשלם