יצירה ומחיקה של מפתחות של חשבון שירות

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

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

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

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

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

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

כדי לקבל את ההרשאות שדרושות בשביל לאפשר יצירה של מפתחות של חשבונות שירות בפרויקט, אתם צריכים לבקש מהאדמין לתת לכם את התפקידים הבאים ב-IAM ברמת הארגון:

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

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

ההרשאות הנדרשות

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

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set
  • resourcemanager.organizations.get
  • resourcemanager.projects.listTagBindings
  • resourcemanager.projects.listEffectiveTags
  • resourcemanager.tagKeys.get
  • resourcemanager.tagKeys.list
  • resourcemanager.tagValues.list
  • resourcemanager.tagValues.get

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

מתן הרשאה ליצירת מפתחות לחשבון שירות

לפני שיוצרים מפתח של חשבון שירות, צריך לוודא שהאילוץ iam.disableServiceAccountKeyCreation של מדיניות הארגון לא נאכף בפרויקט. אם האילוץ הזה נאכף בפרויקט, לא תוכלו ליצור מפתחות של חשבונות שירות בפרויקט הזה.

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

כדי להחריג פרויקט מאילוץ מדיניות הארגון iam.disableServiceAccountKeyCreation, צריך לבקש מאדמין של מדיניות הארגון לבצע את הפעולות הבאות:

  1. ברמת הארגון, יוצרים מפתח תג וערך תג שישמשו להגדרה אם משאב צריך להיות פטור ממדיניות הארגון. מומלץ ליצור תג עם המפתח disableServiceAccountKeyCreation והערכים enforced ו-not_enforced.

    במאמר איך יוצרים ומגדירים תגים חדשים מוסבר איך ליצור מפתחות וערכים של תגים.

  2. מצרפים את התג disableServiceAccountKeyCreation לארגון ומגדירים את הערך שלו ל-enforced. כל המשאבים בארגון יורשים את ערך התג הזה, אלא אם הוא נכתב מחדש עם ערך תג אחר.

    במאמר צירוף תגים למשאבים מוסבר איך לצרף תגים למשאבים.

  3. לכל פרויקט או תיקייה שרוצים להחריג ממדיניות הארגון, מצרפים את התג disableServiceAccountKeyCreation ומגדירים את הערך שלו ל-not_enforced. הגדרה של ערך תג לפרויקט או לתיקייה בדרך הזו מבטלת את ערך התג שהתקבל בירושה מהארגון.
  4. יוצרים או מעדכנים את מדיניות הארגון שמונעת יצירה של מפתחות של חשבונות שירות, כך שהיא לא תאכוף את האילוץ על משאבים שפטורים ממנו. המדיניות הזו צריכה לכלול את הכללים הבאים:

    • מגדירים את האילוץ iam.disableServiceAccountKeyCreation כך שלא ייאכף על משאבים עם התג disableServiceAccountKeyCreation: not_enforced. התנאי בכלל הזה צריך להיראות כך:

      "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
      
    • מגדירים את האילוץ iam.disableServiceAccountKeyCreation כך שהוא ייאכף על כל המשאבים האחרים.

יצירת מפתח של חשבון שירות

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

אפשר ליצור מפתח של חשבון שירות באמצעות מסוף Google Cloud , ה-CLI של gcloud, ה-method‏ serviceAccounts.keys.create() או אחת מספריות הלקוח. בחשבון שירות יכולים להיות עד 10 מפתחות.

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

בדוגמאות בהמשך, SA_NAME הוא השם של חשבון השירות ו-PROJECT_ID הוא המזהה שלGoogle Cloud הפרויקט. אפשר לאחזר את המחרוזת SA_NAME@PROJECT_ID.iam.gserviceaccount.com מהדף Service Accounts במסוף Google Cloud .

המסוף

  1. נכנסים לדף Service accounts במסוף Google Cloud .

    כניסה לדף Service accounts

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

  2. בוחרים פרויקט.
  3. לוחצים על כתובת האימייל של חשבון השירות שעבורו רוצים ליצור מפתח.
  4. לוחצים על הכרטיסייה Keys.
  5. לוחצים על התפריט הנפתח Add key ובוחרים באפשרות Create new key.
  6. בוחרים באפשרות JSON בתור Key type ולוחצים על Create.

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

המפתח שהורדתם מופיע בפורמט הבא, כאשר PRIVATE_KEY הוא החלק הפרטי של זוג המפתחות הציבוריים/הפרטיים:

{
  "type": "service_account",
  "project_id": "PROJECT_ID",
  "private_key_id": "KEY_ID",
  "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
  "client_email": "SERVICE_ACCOUNT_EMAIL",
  "client_id": "CLIENT_ID",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}
חשוב לאחסן תמיד את המפתחות של חשבונות השירות במיקום מאובטח. אם לא מאחסנים את המפתחות בצורה מאובטחת, גורמים זדוניים יכולים למצוא את המפתחות ולהשתמש בהם כדי לגשת למשאבים שלחשבון השירות יש גישה אליהם. מומלץ מאוד לאחסן את המפתחות במאגר מפתחות מבוסס חומרה או מבוסס תוכנה. הנחיות נוספות לאחסון מאובטח של מפתחות של חשבונות שירות זמינות במאמר הגנה מפני הסלמת הרשאות.

אפשר להעביר את הקובץ לאן שרוצים ולשנות את השם שלו למה שרוצים.

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

gcloud

כדי ליצור מפתחות של חשבונות שירות, מריצים את הפקודה gcloud iam service-accounts keys create.

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

  • KEY_FILE: הנתיב לקובץ פלט חדש של המפתח הפרטי, לדוגמה ~/sa-private-key.json.
  • SA_NAME: השם של חשבון השירות שעבורו רוצים ליצור מפתח.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
gcloud iam service-accounts keys create KEY_FILE \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

פלט:

created key [e44da1202f82f8f4bdd9d92bc412d1d8a837fa83] of type [json] as
[/usr/home/username/KEY_FILE] for
[SA_NAME@PROJECT_ID.iam.gserviceaccount.com]

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

המפתח שהורדתם מופיע בפורמט הבא, כאשר PRIVATE_KEY הוא החלק הפרטי של זוג המפתחות הציבוריים/הפרטיים:

{
  "type": "service_account",
  "project_id": "PROJECT_ID",
  "private_key_id": "KEY_ID",
  "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
  "client_email": "SERVICE_ACCOUNT_EMAIL",
  "client_id": "CLIENT_ID",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}

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

אפשר להעביר את הקובץ לאן שרוצים ולשנות את השם שלו למה שרוצים.

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

C++

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

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

namespace iam = ::google::cloud::iam_admin_v1;
return [](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  auto response = client.CreateServiceAccountKey(
      name,
      google::iam::admin::v1::ServiceAccountPrivateKeyType::
          TYPE_GOOGLE_CREDENTIALS_FILE,
      google::iam::admin::v1::ServiceAccountKeyAlgorithm::KEY_ALG_RSA_2048);
  if (!response) throw std::move(response).status();
  std::cout << "ServiceAccountKey successfully created: "
            << response->DebugString() << "\n"
            << "Please save the key in a secure location, as they cannot "
               "be downloaded later\n";
  return response->name();
}

C#

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

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


using System;
using System.Text;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class ServiceAccountKeys
{
    public static ServiceAccountKey CreateKey(string serviceAccountEmail)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var key = service.Projects.ServiceAccounts.Keys.Create(
            new CreateServiceAccountKeyRequest(),
            "projects/-/serviceAccounts/" + serviceAccountEmail)
            .Execute();

        // The PrivateKeyData field contains the base64-encoded service account key
        // in JSON format.
        // TODO(Developer): Save the below key (jsonKeyFile) to a secure location.
        //  You cannot download it later.
        byte[] valueBytes = System.Convert.FromBase64String(key.PrivateKeyData);
        string jsonKeyContent = Encoding.UTF8.GetString(valueBytes);

        Console.WriteLine("Key created successfully");
        return key;
    }
}

Go

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

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

import (
	"context"
	// "encoding/base64"
	"fmt"
	"io"

	iam "google.golang.org/api/iam/v1"
)

// createKey creates a service account key.
func createKey(w io.Writer, serviceAccountEmail string) (*iam.ServiceAccountKey, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	resource := "projects/-/serviceAccounts/" + serviceAccountEmail
	request := &iam.CreateServiceAccountKeyRequest{}
	key, err := service.Projects.ServiceAccounts.Keys.Create(resource, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.ServiceAccounts.Keys.Create: %w", err)
	}
	// The PrivateKeyData field contains the base64-encoded service account key
	// in JSON format.
	// TODO(Developer): Save the below key (jsonKeyFile) to a secure location.
	// You cannot download it later.
	// jsonKeyFile, _ := base64.StdEncoding.DecodeString(key.PrivateKeyData)
	fmt.Fprintf(w, "Key created successfully")
	return key, nil
}

Java

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

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


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.gson.Gson;
import com.google.iam.admin.v1.CreateServiceAccountKeyRequest;
import com.google.iam.admin.v1.ServiceAccountKey;
import java.io.IOException;

public class CreateServiceAccountKey {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Replace the below variables before running.
    String projectId = "your-project-id";
    String serviceAccountName = "your-service-account-name";

    ServiceAccountKey key = createKey(projectId, serviceAccountName);
    Gson gson = new Gson();

    // System.out.println("Service account key: " + gson.toJson(key));
  }

  // Creates a key for a service account.
  public static ServiceAccountKey createKey(String projectId, String accountName)
          throws IOException {
    String email = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);

    // 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()) {
      CreateServiceAccountKeyRequest req = CreateServiceAccountKeyRequest.newBuilder()
              .setName(String.format("projects/%s/serviceAccounts/%s", projectId, email))
              .build();
      ServiceAccountKey createdKey = iamClient.createServiceAccountKey(req);
      System.out.println("Key created successfully");

      return createdKey;
    }
  }
}

Python

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

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

from google.cloud import iam_admin_v1
from google.cloud.iam_admin_v1 import types


def create_key(project_id: str, account: str) -> types.ServiceAccountKey:
    """
    Creates a key for a service account.

    project_id: ID or number of the Google Cloud project you want to use.
    account: ID or email which is unique identifier of the service account.
    """

    iam_admin_client = iam_admin_v1.IAMClient()
    request = types.CreateServiceAccountKeyRequest()
    request.name = f"projects/{project_id}/serviceAccounts/{account}"

    key = iam_admin_client.create_service_account_key(request=request)

    # The private_key_data field contains the stringified service account key
    # in JSON format. You cannot download it again later.
    # If you want to get the value, you can do it in a following way:
    # import json
    # json_key_data = json.loads(key.private_key_data)
    # key_id = json_key_data["private_key_id"]

    return key

REST

ה-method‏ projects.serviceAccounts.keys.create יוצרת מפתח של חשבון שירות.

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
  • SA_NAME: השם של חשבון השירות שעבורו רוצים ליצור מפתח.
  • KEY_ALGORITHM: אופציונלי. זהו אלגוריתם המפתח שבו משתמשים בשביל המפתח. ברירת המחדל היא מפתח RSA של 2,048 ביט, ואפשר לשנות אותה אם רוצים. רשימה של כל הערכים האפשריים זמינה במאמרי העזרה בנושא ServiceAccountKeyAlgorithm.

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

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys

תוכן בקשת JSON:

{
  "keyAlgorithm": "KEY_ALGORITHM"
}

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

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

{
  "name": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL/keys/KEY_ID",
  "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
  "privateKeyData": "ENCODED_PRIVATE_KEY",
  "validAfterTime": "DATE",
  "validBeforeTime": "DATE",
  "keyAlgorithm": "KEY_ALG_RSA_2048"
}

כדי ליצור קובץ מפתח שאפשר להשתמש בו כדי לאמת כחשבון שירות, צריך לפענח את נתוני המפתח הפרטי ולשמור אותו בקובץ:

Linux

מריצים את הפקודה הבאה:

echo 'ENCODED_PRIVATE_KEY' | base64 --decode > PATH

מחליפים את PATH בנתיב של הקובץ שבו רוצים לשמור את המפתח. השתמשו בסיומת הקובץ .json.

macOS

מריצים את הפקודה הבאה:

echo 'ENCODED_PRIVATE_KEY' | base64 --decode > PATH

מחליפים את PATH בנתיב של הקובץ שבו רוצים לשמור את המפתח. השתמשו בסיומת הקובץ .json.

PowerShell

  1. שומרים בקובץ את נתוני המפתח הפרטי המקודדים (ENCODED_PRIVATE_KEY).

  2. כדי לפענח את הקובץ משתמשים ב-certutil:

    certutil -decode ENCODED_FILE DECODED_FILE

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

    • ENCODED_FILE: הנתיב לקובץ שמכיל את נתוני המפתח הפרטי המקודד.
    • DECODED_FILE: הנתיב של הקובץ שבו רוצים לשמור את המפתח. השתמשו בסיומת הקובץ .json.

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

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

מחיקת מפתח של חשבון שירות

מחיקת המפתח של חשבון השירות מונעת באופן סופי את השימוש במפתח הזה לצורך אימות ב-Google APIs.

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

מומלץ לבצע רוטציה של מפתחות של חשבונות שירות באופן קבוע. מידע נוסף מופיע במאמר רוטציית מפתחות של חשבונות שירות.

המסוף

  1. נכנסים לדף Service accounts במסוף Google Cloud .

    כניסה לדף Service accounts

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

  2. בוחרים פרויקט.
  3. בדף Service accounts לוחצים על כתובת האימייל של חשבון השירות שאת המפתח שלו רוצים למחוק.
  4. לוחצים על הכרטיסייה Keys.
  5. ברשימת המפתחות, לוחצים על Delete () לצד כל מפתח שרוצים למחוק.

gcloud

מריצים את הפקודה gcloud iam service-accounts keys delete כדי למחוק את המפתחות של חשבון השירות.

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

  • KEY_ID: המזהה של המפתח שרוצים למחוק. כדי לאתר את המזהה של המפתח, מציגים את הרשימה של כל המפתחות של חשבון השירות, מזהים את המפתח שרוצים למחוק ומעתיקים את המזהה שלו.
  • SA_NAME: השם של חשבון השירות שהמפתח שייך לו.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
gcloud iam service-accounts keys delete KEY_ID \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

פלט:

Deleted key [KEY_ID] for service account
[SA_NAME@PROJECT_ID.iam.gserviceaccount.com]

C++

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

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

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  auto response = client.DeleteServiceAccountKey(name);
  if (!response.ok()) throw std::runtime_error(response.message());
  std::cout << "ServiceAccountKey successfully deleted.\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 ServiceAccountKeys
{
    public static void DeleteKey(string fullKeyName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        service.Projects.ServiceAccounts.Keys.Delete(fullKeyName).Execute();
        Console.WriteLine("Deleted key: " + fullKeyName);
    }
}

Go

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

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

import (
	"context"
	"fmt"
	"io"

	iam "google.golang.org/api/iam/v1"
)

// deleteKey deletes a service account key.
func deleteKey(w io.Writer, fullKeyName string) error {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return fmt.Errorf("iam.NewService: %w", err)
	}

	_, err = service.Projects.ServiceAccounts.Keys.Delete(fullKeyName).Do()
	if err != nil {
		return fmt.Errorf("Projects.ServiceAccounts.Keys.Delete: %w", err)
	}
	fmt.Fprintf(w, "Deleted key: %v", fullKeyName)
	return 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.DeleteServiceAccountKeyRequest;
import com.google.iam.admin.v1.KeyName;
import java.io.IOException;

public class DeleteServiceAccountKey {

  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";
    String serviceAccountKeyId = "service-account-key-id";

    deleteKey(projectId, serviceAccountName, serviceAccountKeyId);
  }

  // Deletes a service account key.
  public static void deleteKey(String projectId, String accountName,
                               String serviceAccountKeyId) throws IOException {
    //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()) {

      //Construct the service account email.
      //You can modify the ".iam.gserviceaccount.com" to match the service account name in which
      //you want to delete the key.
      //See, https://cloud.google.com/iam/docs/creating-managing-service-account-keys#deleting

      String accountEmail = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);

      String name = KeyName.of(projectId, accountEmail, serviceAccountKeyId).toString();

      DeleteServiceAccountKeyRequest request = DeleteServiceAccountKeyRequest.newBuilder()
              .setName(name)
              .build();

      // Then you can delete the key
      iamClient.deleteServiceAccountKey(request);

      System.out.println("Deleted key: " + serviceAccountKeyId);
    }
  }
}

Python

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

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

from google.cloud import iam_admin_v1
from google.cloud.iam_admin_v1 import types


def delete_key(project_id: str, account: str, key_id: str) -> None:
    """Deletes a key for a service account.

    project_id: ID or number of the Google Cloud project you want to use.
    account: ID or email which is unique identifier of the service account.
    key_id: unique ID of the key.
    """

    iam_admin_client = iam_admin_v1.IAMClient()
    request = types.DeleteServiceAccountKeyRequest()
    request.name = f"projects/{project_id}/serviceAccounts/{account}/keys/{key_id}"

    iam_admin_client.delete_service_account_key(request=request)
    print(f"Deleted key: {key_id}")

REST

ה-method‏ projects.serviceAccounts.keys.delete מוחקת מפתח של חשבון שירות.

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
  • SA_NAME: השם של חשבון השירות שאת המפתח שלו רוצים למחוק.
  • KEY_ID: המזהה של המפתח שרוצים למחוק. כדי לאתר את המזהה של המפתח, מציגים את הרשימה של כל המפתחות של חשבון השירות, מזהים את המפתח שרוצים למחוק ומעתיקים את המזהה שלו שבסוף השדה name. המזהה של המפתח הוא כל מה שמופיע אחרי keys/.

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

DELETE https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/KEY_ID

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

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

{
}

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

נסו בעצמכם

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

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