הצגת רשימה וטעינה של מפתחות לחשבונות שירות

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

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

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

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

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

לתפקידים בסיסיים ב-IAM יש גם הרשאות לניהול המפתחות של חשבונות השירות. בסביבת ייצור לא מומלץ להקצות תפקידים בסיסיים, אבל אפשר להעניק אותם בסביבת פיתוח או בסביבת בדיקה.

הצגה של רשימת המפתחות לחשבונות השירות

אפשר להציג את רשימת המפתחות של חשבון שירות באמצעות מסוףGoogle Cloud , ה-CLI של gcloud, השיטה serviceAccount.keys.list() או אחת מספריות הלקוח.

בדרך כלל משתמשים בשיטה serviceAccount.keys.list() כדי לבדוק את חשבונות השירות ואת המפתחות, או כדי לבנות כלים מותאמים אישית לניהול חשבונות שירות.

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

יכול להיות שהרשימה תכלול מפתחות שלא יצרתם. אלה מפתחות שנוצרו על ידי Google ונמצאים בשימוש של Service Account Credentials API. מידע נוסף זמין במאמר בנושא Google-owned and managed key זוגות.

המסוף

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

    כניסה לדף Service accounts

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

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

gcloud

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

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

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

פלט:

KEY_ID CREATED_AT EXPIRES_AT DISABLED DISABLE_REASON EXTENDED_STATUS
8e6e3936d7024646f8ceb39792006c07f4a9760c 2021-01-01T21:01:42Z 9999-12-31T23:59:59Z      
937c98f870f5c8db970af527aa3c12fd88b1c20a 2021-01-01T20:55:40Z 9999-12-31T23:59:59Z נכון פעולה שהמשתמש יוזם  
937c98f870f5c8db970af527aa3c12fd88b1c20a 2021-01-01T20:55:40Z 9999-12-31T23:59:59Z נכון חשופות ['key':'SERVICE_ACCOUNT_KEY_EXTENDED_STATUS_KEY_EXPOSED' 'value':'{exposure URL}']

C++

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

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

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& service_account_name,
   std::vector<std::string> const& key_type_labels) {
  iam::IAMClient client(iam::MakeIAMConnection());
  std::vector<google::iam::admin::v1::ListServiceAccountKeysRequest::KeyType>
      key_types;
  for (auto const& type : key_type_labels) {
    if (type == "USER_MANAGED") {
      key_types.push_back(google::iam::admin::v1::
                              ListServiceAccountKeysRequest::USER_MANAGED);
    } else if (type == "SYSTEM_MANAGED") {
      key_types.push_back(google::iam::admin::v1::
                              ListServiceAccountKeysRequest::SYSTEM_MANAGED);
    }
  }
  auto response =
      client.ListServiceAccountKeys(service_account_name, key_types);
  if (!response) throw std::move(response).status();
  std::cout << "ServiceAccountKeys successfully retrieved: "
            << response->DebugString() << "\n";
}

C#

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

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


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

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

        var response = service.Projects.ServiceAccounts.Keys
            .List($"projects/-/serviceAccounts/{serviceAccountEmail}")
            .Execute();
        foreach (ServiceAccountKey key in response.Keys)
        {
            Console.WriteLine("Key: " + key.Name);
        }
        return response.Keys;
    }
}

Go

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

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

import (
	"context"
	"fmt"
	"io"

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

// listKey lists a service account's keys.
func listKeys(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
	response, err := service.Projects.ServiceAccounts.Keys.List(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.ServiceAccounts.Keys.List: %w", err)
	}
	for _, key := range response.Keys {
		fmt.Fprintf(w, "Listing key: %v", key.Name)
	}
	return response.Keys, 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.ListServiceAccountKeysRequest;
import com.google.iam.admin.v1.ServiceAccountKey;
import java.io.IOException;
import java.util.List;

public class ListServiceAccountKeys {

  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";

    List<ServiceAccountKey> keys = listKeys(projectId, serviceAccountName);
    keys.forEach(key -> System.out.println("Key: " + key.getName()));
  }

  // Lists all keys for a service account.
  public static List<ServiceAccountKey> listKeys(String projectId, String accountName)
          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.
    String email = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);
    try (IAMClient iamClient = IAMClient.create()) {
      ListServiceAccountKeysRequest req = ListServiceAccountKeysRequest.newBuilder()
              .setName(String.format("projects/%s/serviceAccounts/%s", projectId, email))
              .build();

      return iamClient.listServiceAccountKeys(req).getKeysList();
    }
  }
}

Python

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

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

from typing import List

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


def list_keys(project_id: str, account: str) -> List[iam_admin_v1.ServiceAccountKey]:
    """Lists 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.ListServiceAccountKeysRequest()
    request.name = f"projects/{project_id}/serviceAccounts/{account}"

    response = iam_admin_client.list_service_account_keys(request=request)
    return response.keys

REST

השיטה projects.serviceAccounts.keys.list מציגה את כל המפתחות של חשבון שירות.

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
  • SA_NAME: השם של חשבון השירות שאת רשימת המפתחות שלו רוצים לראות.
  • KEY_TYPES: אופציונלי. רשימה מופרדת בפסיקים של סוגי המפתחות שרוצים לכלול בתשובה. סוג המפתח מציין אם המפתח מנוהל על ידי המשתמש (USER_MANAGED) או על ידי המערכת (SYSTEM_MANAGED). אם תשאירו את השדה ריק, יוחזרו כל המפתחות.

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

GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys?keyTypes=KEY_TYPES

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

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

{
  "keys": [
    {
      "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c",
      "validAfterTime": "2020-03-04T17:39:47Z",
      "validBeforeTime": "9999-12-31T23:59:59Z",
      "keyAlgorithm": "KEY_ALG_RSA_2048",
      "keyOrigin": "GOOGLE_PROVIDED",
      "keyType": "USER_MANAGED"
    },
    {
      "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/e5e3800831ac1adc8a5849da7d827b4724b1fce8",
      "validAfterTime": "2020-03-31T23:50:09Z",
      "validBeforeTime": "9999-12-31T23:59:59Z",
      "keyAlgorithm": "KEY_ALG_RSA_2048",
      "keyOrigin": "GOOGLE_PROVIDED",
      "keyType": "USER_MANAGED"
    },
    {
      "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/b97699f042b8eee6a846f4f96259fbcd13e2682e",
      "validAfterTime": "2020-05-17T18:58:13Z",
      "validBeforeTime": "9999-12-31T23:59:59Z",
      "keyAlgorithm": "KEY_ALG_RSA_2048",
      "keyOrigin": "GOOGLE_PROVIDED",
      "keyType": "USER_MANAGED",
      "disabled": true
      "disable_reason": "SERVICE_ACCOUNT_KEY_DISABLE_REASON_EXPOSED"
      "extended_status": "SERVICE_ACCOUNT_KEY_EXTENDED_STATUS_KEY_EXPOSED"
      "extended_status_message": "exposed at: https://www.github.com/SomePublicRepo"
    }
  ]
}

טעינת מפתח לחשבון שירות

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

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

המסוף

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

השתמשו ב-CLI של gcloud או ב-API בארכיטקטורת REST. הנתונים האלה לא זמינים במסוףGoogle Cloud .

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

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

    כניסה לדף Service accounts

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

  2. בוחרים פרויקט.
  3. בדף Service accounts, לוחצים על כתובת האימייל של חשבון השירות שרוצים להציג.
  4. לוחצים על Keys. במסוף מוצגת רשימה של המפתחות של חשבון השירות, כולל המטא-נתונים של כל מפתח. Google Cloud

gcloud

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

מריצים את הפקודה gcloud beta iam service-accounts keys get-public-key:

gcloud beta iam service-accounts keys get-public-key KEY_ID \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --output-file=FILENAME

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

  • KEY_ID: המזהה של המפתח הציבורי שרוצים לקבל. כדי לאתר את המזהה של המפתח, מציגים את רשימת כל המפתחות של חשבון השירות, מזהים את המפתח שרוצים לקבל ומעתיקים את המזהה שלו.
  • SA_NAME: השם של חשבון השירות שאת המפתח הציבורי שלו רוצים לקבל.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • FILENAME: הקובץ שבו יישמרו נתוני המפתח הציבורי.

כברירת מחדל, נתוני המפתחות הציבוריים נשמרים בפורמט X.509 PEM‎. כדי לקבל את המפתח הציבורי במצב Raw, מריצים את הפקודה עם הדגל הנוסף --type=raw.

לדוגמה, הפקודה הבאה מקבלת את נתוני המפתח הציבורי של המפתח c97cc34494c07c9b483701f28368f20145b9ef97, ששייך לחשבון השירות my-service-account@my-project.iam.gserviceaccount.com, ואחר כך שומרת את נתוני המפתח הציבורי בקובץ public_key.pem:

gcloud beta iam service-accounts keys get-public-key \
    c97cc34494c07c9b483701f28368f20145b9ef97 \
    --iam-account=my-service-account@my-project.iam.gserviceaccount.com \
    --output-file=public_key.pem

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

מריצים את הפקודה gcloud iam service-accounts keys list:

gcloud iam service-accounts keys list --iam-account=SA_NAME \
    --filter="name~KEY_ID" --format=json

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

  • SA_NAME: השם של חשבון השירות שעבורו רוצים לקבל את המטא-נתונים של המפתח.
  • KEY_ID: המזהה של המפתח שעבורו רוצים לקבל מטא-נתונים.

לדוגמה, הפקודה הבאה מקבלת מטא-נתונים של המפתח c97cc34494c07c9b483701f28368f20145b9ef97, ששייך לחשבון השירות my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts keys list \
    --iam-account=my-service-account@my-project.iam.gserviceaccount.com \
    --filter="name~c97cc34494c07c9b483701f28368f20145b9ef97" --format=json

REST

השיטה projects.serviceAccounts.keys.get מחזירה מידע על מפתח ציבורי של חשבון שירות.

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
  • SA_NAME: השם של חשבון השירות שאת המפתח הציבורי שלו רוצים לקבל.
  • KEY_ID: המזהה של המפתח הציבורי שרוצים לקבל. כדי לאתר את המזהה של המפתח, טוענים רשימה של כל המפתחות של חשבון השירות, מזהים את המפתח הרצוי ואז מעתיקים את המזהה שלו מקצה השדה name. המזהה של המפתח הוא כל מה שמופיע אחרי keys/.
  • KEY_TYPE: הפורמט שבו יוחזר המפתח הציבורי. כדי לקבל את המפתח הציבורי במצב Raw, השתמשו ב-TYPE_X509_PEM_FILE בפורמט X.509 PEM‎ או ב-TYPE_RAW_PUBLIC_KEY. אם משמיטים את הפרמטרים של השאילתה, השיטה מחזירה מטא-נתונים של המפתח אבל היא לא מחזירה את נתוני המפתח הציבורי.

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

GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/KEY_ID?publicKeyType=KEY_TYPE

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

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

{
  "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/f4a83933ac07cf52bb74e0e66d99662a09f51a36",
  "validAfterTime": "2021-12-10T17:32:06Z",
  "validBeforeTime": "9999-12-31T23:59:59Z",
  "publicKeyData": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvRENDQWVTZ0F3SUJBZ0lJT2lCdm9hR09nV0F3RFFZSktvWklodmNOQVFFRkJRQXdJREVlTUJ3R0ExVUUKQXhNVk1UQXhNVGsxTlRFMk5UWXlPRGszTmpFek1qQXpNQ0FYRFRJeE1USXhNREUzTXpJd05sb1lEems1T1RreApNak14TWpNMU9UVTVXakFnTVI0d0hBWURWUVFERXhVeE1ERXhPVFUxTVRZMU5qSTRPVGMyTVRNeU1ETXdnZ0VpCk1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQzdzeDBFcXVUMGNwSXhlczl1SW0yRy9DS3EKdnc4YTl2a2JkaWZZbDZHSDh1ZUxEWDhGNHVUeEVQMkNzU3JLTHZtOFo2My9IVUxnWjBtQXByb0JlM08vaVR1ZwpmYVZ0NVNtakhvWm9YQ1lpbjR0MS93SkpvdDhrRFdPeDZhOEdieUdqZ215ak8yYk1XdEtaQ2dqeGZ3cUV0MmN3CklnajA5VzJKYTlHTWRsdVA0VGVubTRKSkJoaFpFbTJ1bVAwYVZZdkRnUWF5d0RCYnJuNG8yY0EzSWplRDZGM1gKK0VHRDNKU0s4VW02Sk5sM21adGp6VWNZSHBrYkF0U1A2ZDI5d1RmZkdIRFY0THJRWlM3bG15d3hsb3p5WnpaawpCOFpHckMzSkF1MVNVRTdQOTN6bWtFb1B6MlRUNWhaYXZMWFQ5TGM2SExiRklRVHFnVEJVWHlNMkpIcGZBZ01CCkFBR2pPREEyTUF3R0ExVWRFd0VCL3dRQ01BQXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1CWUdBMVVkSlFFQi93UU0KTUFvR0NDc0dBUVVGQndNQ01BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQkhPNXlpUDY3NkE4UEN2RjdRSzdFMApYZVljbzdsSStFZkowaGJrWVlmdUtnSENPcXcvd3FBbCtOSithanljT2FPWDFPMlRZN3ZOc05pR2t3eWc2QXdqCklhL1NHVjd3NkxpS2JldFRuSVp4UlhRY25lcnVvZEwycUR5eWphMDJJSXJVTmVKY1o0MVJBNXRTL3NkcTFGNm4KM0NjSXFoZTI1OTA4TUNna3cwaFB1K0VLbFF6R1B5T3pVRHBLdXg0cnRBaHJTYTBUVW1wbEMxdTJnUk1YRkF6aApWUjU0V2dNa2tabURyalBNeWdBS3JmNkd0bHo2VHRTYTVLb1BWdGpsWExUQkxaSnlhdk4zc1F2dFlBK1NFQWpWCnA1N1ZabFBYZmR0dWN4ekJaOC9zS25SOHNyYU5hVWFjamg1NEE1Nm1URTE3b0IyUWkrTHBJUTYvNnVqVnNXaUYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
  "keyAlgorithm": "KEY_ALG_RSA_2048",
  "keyOrigin": "GOOGLE_PROVIDED",
  "keyType": "USER_MANAGED"
}

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

נסו בעצמכם

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

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