Eliminare e annullare l'eliminazione degli account di servizio

In questa pagina viene spiegato come eliminare e annullare l'eliminazione degli account di servizio utilizzando l'API Identity and Access Management (IAM), la console Google Cloud e lo strumento a riga di comando gcloud.

Prima di iniziare

  • Attiva IAM API.

    Abilita l'API

  • Configurare l'autenticazione.

    Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi e alle API di Google Cloud, non devi configurare l'autenticazione.

    gcloud

    In questa pagina puoi utilizzare gli esempi di gcloud CLI da uno dei seguenti ambienti di sviluppo:

    • Cloud Shell: per utilizzare un terminale online con gcloud CLI già configurato, attiva Cloud Shell.

      In fondo a questa pagina viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. L'inizializzazione della sessione può richiedere alcuni secondi.

    • shell locale: per utilizzare gcloud CLI in un ambiente di sviluppo locale, installa e initialize gcloud CLI.

    C++

    Per utilizzare gli esempi C++ in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per saperne di più, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    C#

    Per utilizzare gli esempi .NET in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per saperne di più, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Go

    Per utilizzare gli esempi Go in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per saperne di più, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Java

    Per utilizzare gli esempi Java in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per saperne di più, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Python

    Per utilizzare gli esempi Python in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per saperne di più, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init

  • Informazioni sugli account di servizio IAM

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per eliminare e annullare l'eliminazione degli account di servizio, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Per saperne di più su questi ruoli, consulta Ruoli degli account di servizio.

I ruoli IAM di base contengono anche le autorizzazioni per gestire gli account di servizio. Non devi concedere ruoli di base in un ambiente di produzione, ma puoi concederli in un ambiente di sviluppo o test.

Eliminazione di un account di servizio

Quando elimini un account di servizio, le applicazioni non avranno più accesso alle risorse Google Cloud tramite quell'account di servizio. Se elimini gli account di servizio predefiniti di App Engine e Compute Engine, le app App Engine e le istanze VM di Compute Engine che utilizzano questi account non avranno più accesso alle risorse del progetto.

Elimina gli account di servizio con cautela. Assicurati che le applicazioni critiche non utilizzino più un account di servizio prima di eliminarlo. Se non sai con certezza se un account di servizio sia in uso, Google consiglia di disattivarlo anziché eliminarlo. Gli account di servizio disabilitati possono essere riattivati se sono ancora necessari.

Se vuoi ripristinare un account di servizio eliminato, puoi undelete se sono trascorsi al massimo 30 giorni da quando hai eliminato l'account di servizio. Dopo 30 giorni IAM rimuove definitivamente l'account di servizio. Google Cloud non può recuperare l'account di servizio dopo che è stato rimosso definitivamente, anche se invii una richiesta di assistenza.

Per ridurre ulteriormente il rischio di eliminare un account di servizio necessario, puoi anche attivare i suggerimenti sul rischio di modifica. I suggerimenti relativi alle modifiche sui rischi generano avvisi quando tenti di eliminare account di servizio che Google Cloud ha identificato come importanti.

Se elimini un account di servizio e poi ne crei uno nuovo con lo stesso nome, il nuovo account di servizio viene considerato come un'identità separata e non eredita i ruoli concessi all'account di servizio eliminato. Al contrario, quando elimini un account di servizio e poi ne annulli l'eliminazione, l'identità dell'account di servizio non cambia e l'account di servizio conserva i propri ruoli.

Quando un account di servizio viene eliminato, le relative associazioni di ruoli non vengono rimosse immediatamente, ma vengono eliminate automaticamente dal sistema dopo un massimo di 60 giorni. Fino a quel momento, l'account di servizio verrà visualizzato nelle associazioni di ruoli con un prefisso deleted: e un suffisso ?uid=NUMERIC_ID, dove NUMERIC_ID è un ID numerico univoco per l'account di servizio.

Gli account di servizio eliminati non vengono conteggiati ai fini della quota degli account di servizio.

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.

  3. Seleziona l'account di servizio che vuoi eliminare, quindi fai clic su Elimina .

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Esegui il comando gcloud iam service-accounts delete per eliminare un account di servizio.

    Comando:

    gcloud iam service-accounts delete \
        SA_NAME@PROJECT_ID.iam.gserviceaccount.com

    Output:

    Deleted service account SA_NAME@PROJECT_ID.iam.gserviceaccount.com

C++

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM C++.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  auto response = client.DeleteServiceAccount(name);
  if (!response.ok()) throw std::runtime_error(response.message());
  std::cout << "ServiceAccount successfully deleted.\n";
}

C#

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM C#.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.


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

public partial class ServiceAccounts
{
    public static void DeleteServiceAccount(string email)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        string resource = "projects/-/serviceAccounts/" + email;
        service.Projects.ServiceAccounts.Delete(resource).Execute();
        Console.WriteLine("Deleted service account: " + email);
    }
}

Go

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM Go.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

import (
	"context"
	"fmt"
	"io"

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

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

	_, err = service.Projects.ServiceAccounts.Delete("projects/-/serviceAccounts/" + email).Do()
	if err != nil {
		return fmt.Errorf("Projects.ServiceAccounts.Delete: %w", err)
	}
	fmt.Fprintf(w, "Deleted service account: %v", email)
	return nil
}

Java

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM Java.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.iam.v1.Iam;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class DeleteServiceAccount {

  // Deletes a service account.
  public static void deleteServiceAccount(String projectId, String serviceAccountName) {
    // String projectId = "my-project-id";
    // String serviceAccountName = "my-service-account-name";

    Iam service = null;
    try {
      service = initService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return;
    }

    String serviceAccountEmail = serviceAccountName + "@" + projectId + ".iam.gserviceaccount.com";
    try {
      service
          .projects()
          .serviceAccounts()
          .delete("projects/-/serviceAccounts/" + serviceAccountEmail)
          .execute();

      System.out.println("Deleted service account: " + serviceAccountEmail);
    } catch (IOException e) {
      System.out.println("Unable to delete service account: \n" + e.toString());
    }
  }

  private static Iam initService() throws GeneralSecurityException, IOException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
    // Initialize the IAM service, which can be used to send requests to the IAM API.
    Iam service =
        new Iam.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM Python.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

import os

from google.oauth2 import service_account  # type: ignore
import googleapiclient.discovery  # type: ignore

def delete_service_account(email: str) -> None:
    """Deletes a service account."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )

    service = googleapiclient.discovery.build("iam", "v1", credentials=credentials)

    service.projects().serviceAccounts().delete(
        name="projects/-/serviceAccounts/" + email
    ).execute()

    print("Deleted service account: " + email)

REST

Il metodo serviceAccounts.delete elimina un account di servizio.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
  • SA_ID: l'ID del tuo account di servizio. Può trattarsi dell'indirizzo email dell'account di servizio nel modulo SA_NAME@PROJECT_ID.iam.gserviceaccount.com o dell'ID numerico univoco dell'account di servizio.

Metodo HTTP e URL:

DELETE https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID

Per inviare la richiesta, espandi una di queste opzioni:

In caso di esito positivo, il corpo della risposta sarà vuoto.

Annullare l'eliminazione di un account di servizio

In alcuni casi, puoi utilizzare il comando undelete per annullare l'eliminazione di un account di servizio eliminato. Generalmente, puoi annullare l'eliminazione di un account di servizio eliminato se soddisfa i seguenti criteri:

  • L'account di servizio è stato eliminato meno di 30 giorni fa.

    Dopo 30 giorni, IAM rimuove definitivamente l'account di servizio. Google Cloud non può recuperare l'account di servizio dopo che è stato rimosso definitivamente, anche se invii una richiesta di assistenza.

  • Non esiste un account di servizio con lo stesso nome dell'account di servizio eliminato.

    Ad esempio, supponiamo di aver eliminato accidentalmente l'account di servizio my-service-account@project-id.iam.gserviceaccount.com. Devi comunque avere un account di servizio con quel nome, quindi creane uno nuovo con lo stesso nome, my-service-account@project-id.iam.gserviceaccount.com.

    Il nuovo account di servizio non eredita le autorizzazioni dell'account di servizio eliminato. Di fatto, è completamente separato da quello dell'account di servizio eliminato. Tuttavia, non puoi annullare l'eliminazione dell'account di servizio originale, perché il nuovo account di servizio ha lo stesso nome.

    Per risolvere il problema, elimina il nuovo account di servizio, quindi prova ad annullare l'eliminazione dell'account di servizio originale.

Se non riesci ad annullare l'eliminazione dell'account di servizio, puoi creare un nuovo account di servizio con lo stesso nome, revocare tutti i ruoli dall'account di servizio eliminato e concedere gli stessi ruoli al nuovo account di servizio. Per maggiori dettagli, consulta Criteri con entità eliminate.

Trovare l'ID numerico di un account di servizio eliminato

Quando annulli l'eliminazione di un account di servizio, devi fornire il relativo ID numerico. L'ID numerico è un numero di 21 cifre, come 123456789012345678901, che identifica in modo univoco l'account di servizio. Ad esempio, se elimini un account di servizio, creane uno nuovo con lo stesso nome. L'account di servizio originale e il nuovo account di servizio avranno ID numerici diversi.

Se sai che un'associazione in un criterio di autorizzazione include l'account di servizio eliminato, puoi recuperare il criterio di autorizzazione e poi trovare l'ID numerico nel criterio di autorizzazione. L'ID numerico viene aggiunto al nome dell'account di servizio eliminato. Ad esempio, in questo criterio di autorizzazione, l'ID numerico dell'account di servizio eliminato è 123456789012345678901:

{
  "version": 1,
  "etag": "BwUjMhCsNvY=",
  "bindings": [
    {
      "members": [
        "deleted:serviceAccount:my-service-account@project-id.iam.gserviceaccount.com?uid=123456789012345678901"
      ],
      "role": "roles/iam.serviceAccountUser"
    },
  ]
}

Gli ID numerici vengono aggiunti solo ai nomi delle entità eliminate.

In alternativa, puoi cercare negli audit log l'operazione DeleteServiceAccount che ha eliminato l'account di servizio:

  1. Nella console Google Cloud, vai alla pagina Esplora log.

    Vai a Esplora log

  2. Nell'editor query, inserisci la query seguente, sostituendo SERVICE_ACCOUNT_EMAIL con l'indirizzo email del tuo account di servizio (ad esempio, my-service-account@project-id.iam.gserviceaccount.com):

    resource.type="service_account"
    resource.labels.email_id="SERVICE_ACCOUNT_EMAIL"
    "DeleteServiceAccount"
    
  3. Se l'account di servizio è stato eliminato più di un'ora fa, fai clic su schedule Ultima ora, seleziona un periodo di tempo più lungo dall'elenco a discesa, quindi fai clic su Applica.

  4. Fai clic su Esegui query. Esplora log visualizza le operazioni DeleteServiceAccount che interessano gli account di servizio con il nome specificato.

  5. Trova e prendi nota dell'ID numerico dell'account di servizio eliminato in uno dei seguenti modi:

    • Se i risultati della ricerca includono una sola operazione DeleteServiceAccount, trova l'ID numerico nel campo ID univoco del riquadro Campi log.

    • Se i risultati di ricerca mostrano più di un log:

      1. Trova la voce di log corretta. Per trovare la voce di log corretta, fai clic sulla freccia di espansione accanto a una voce di log. Esamina i dettagli della voce di log e determina se la voce di log mostra l'operazione che vuoi annullare. Ripeti questa procedura finché non trovi la voce di log corretta.

      2. Nella voce di log corretta, individua l'ID numerico dell'account di servizio. Per individuare l'ID numerico, espandi il campo protoPayload della voce di log, quindi trova il campo resourceName.

        L'ID numerico è tutto ciò che segue serviceAccounts nel campo resourceName.

Annulla l'eliminazione dell'account di servizio in base all'ID numerico

Dopo aver trovato l'ID numerico dell'account di servizio eliminato, puoi provare a annullarne l'eliminazione.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Esegui il comando gcloud beta iam service-accounts undelete per annullare l'eliminazione di un account di servizio.

    Comando:

    gcloud beta iam service-accounts undelete ACCOUNT_ID

    Output:

    restoredAccount:
        email: SA_NAME@PROJECT_ID.iam.gserviceaccount.com
        etag: BwWWE7zpApg=
        name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com
        oauth2ClientId: '123456789012345678901'
        projectId: PROJECT_ID
        uniqueId: 'ACCOUNT_ID'

REST

Il metodo serviceAccounts.undelete ripristina un account di servizio eliminato.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project.
  • SA_NUMERIC_ID: l'ID numerico univoco dell'account di servizio.

Metodo HTTP e URL:

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

Per inviare la richiesta, espandi una di queste opzioni:

Se è possibile annullare l'eliminazione dell'account, riceverai un codice di risposta 200 OK con i dettagli dell'account di servizio ripristinato, come riportato di seguito:

{
  "restoredAccount": {
    "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"
  }
}

Passaggi successivi

Provalo

Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.

Inizia gratuitamente