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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

המסוף

  1. במסוף Cloud de Confiance , נכנסים לדף יצירת חשבון שירות.
  2. בוחרים פרויקט Cloud de Confiance .
  3. נותנים לחשבון השירות שם שיוצג במסוף Cloud de Confiance .

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

  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 Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance 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: השם של חשבון השירות שיופיע ב Cloud de Confiance מסוף

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

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.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.s3ns.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. מידע נוסף מופיע במאמר לפני שמתחילים.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך 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#

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

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

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך 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

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

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

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך 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

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

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

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך 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

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

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

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך 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

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

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

    • PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו 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.s3ns.iam.gserviceaccount.com",
      "projectId": "my-project",
      "uniqueId": "123456789012345678901",
      "email": "my-service-account@my-project.s3ns.iam.gserviceaccount.com",
      "displayName": "My service account",
      "etag": "BwUp3rVlzes=",
      "description": "A service account for running jobs in my project",
      "oauth2ClientId": "987654321098765432109"
    }
    

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

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

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