Eliminare e annullare l'eliminazione degli account di servizio

Questa pagina spiega 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

  • Enable the IAM API.

    Enable the API

  • Configurare l'autenticazione.

    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#

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

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. 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.

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

    C++

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

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. 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.

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

    Vai

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

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. 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.

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

    Java

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

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. 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.

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

    Python

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

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. 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.

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

    REST

    Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    Per ulteriori informazioni, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

  • 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 nel progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

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

I ruoli di base IAM contengono anche le autorizzazioni per gestire gli account di servizio. Non dovresti concedere ruoli di base in un ambiente di produzione, ma puoi farlo in un ambiente di sviluppo o di 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 App Engine e Compute Engine predefiniti, le app App Engine e le istanze VM Compute Engine che li utilizzano non avranno più accesso alle risorse del progetto.

Elimina gli account di servizio con cautela. Prima di eliminarlo, assicurati che le tue applicazioni critiche non utilizzino più un account di servizio. Se non sai con certezza se viene utilizzato un account di servizio, Google consiglia di disattivarlo anziché eliminarlo. I service account disattivati possono essere riattivati se sono ancora necessari.

Se vuoi ripristinare un account di servizio eliminato, puoi annullare l'eliminazione se sono trascorsi al massimo 30 giorni dall'eliminazione. Dopo 30 giorni, IAM rimuove definitivamente l'account di servizio. Google Cloud non può recuperare l'account di servizio dopo la rimozione definitiva, anche se invii una richiesta di assistenza.

Per ridurre ulteriormente il rischio di eliminare un account di servizio necessario, puoi anche attivare i suggerimenti sui rischi di modifica. I consigli sui rischi relativi alle modifiche generano avvisi quando provi a eliminare gli account di servizio identificati da Google Cloud come importanti.

Se elimini un account di servizio e ne crei uno nuovo con lo stesso nome, il nuovo account di servizio viene trattato 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 lo anulli, l'identità dell'account di servizio non cambia e l'account di servizio mantiene i suoi ruoli.

Quando un account di servizio viene eliminato, le relative associazioni di ruolo non vengono rimosse immediatamente, ma vengono eliminate automaticamente dal sistema dopo un massimo di 60 giorni. Fino a quel momento, l'account di servizio viene visualizzato nelle associazioni di ruolo 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 da eliminare e fai clic su Elimina .

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. 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, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM C++.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, 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, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM C#.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, 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, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM Go.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, 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, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM Java.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.DeleteServiceAccountRequest;
import com.google.iam.admin.v1.ServiceAccountName;
import java.io.IOException;

public class DeleteServiceAccount {

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

    deleteServiceAccount(projectId, serviceAccountName);
  }

  // Deletes a service account.
  public static void deleteServiceAccount(String projectId, String serviceAccountName)
          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 client = IAMClient.create()) {
      String accountName = ServiceAccountName.of(projectId, serviceAccountName).toString();
      String accountEmail = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);
      DeleteServiceAccountRequest request = DeleteServiceAccountRequest.newBuilder()
              .setName(accountEmail)
              .build();
      client.deleteServiceAccount(request);

      System.out.println("Deleted service account: " + serviceAccountName);
    }
  }
}

Python

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

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


def delete_service_account(project_id: str, account: str) -> None:
    """
    Deletes 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.DeleteServiceAccountRequest()
    request.name = f"projects/{project_id}/serviceAccounts/{account}"

    iam_admin_client.delete_service_account(request=request)
    print(f"Deleted a service account: {account}")

REST

Il metodo serviceAccounts.delete elimina un account di servizio.

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

  • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
  • SA_ID: l'ID del tuo account di servizio. Può essere l'indirizzo email dell'account di servizio nel formatoSA_NAME@PROJECT_ID.iam.gserviceaccount.com o l'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 servizio. In genere, 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 la rimozione definitiva, 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 che tu abbia eliminato per errore l'account di servizio my-service-account@project-id.iam.gserviceaccount.com. Hai ancora bisogno di un account di servizio con quel nome, quindi crea un nuovo account di servizio 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. In pratica, è completamente separato dall'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 a annullarne l'eliminazione dell'account di servizio originale.

Se non riesci a 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 principali eliminati.

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, ad esempio 123456789012345678901, che identifica in modo univoco l'account di servizio. Ad esempio, se elimini un account di servizio, poi crei un nuovo account di servizio 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 ottenere il criterio di autorizzazione e trovare l'ID numerico nel criterio di autorizzazione. L'ID numerico viene aggiunto al nome del 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 degli entità principali eliminati.

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

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

    Vai a Esplora log

  2. Nell'editor di query, inserisci la seguente query 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 e poi fai clic su Applica.

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

  5. Individua e annota l'ID numerico dell'account di servizio eliminato in uno dei seguenti modi:

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

    • Se i risultati di ricerca mostrano più di un log, procedi nel seguente modo:

      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 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 locate the numeric ID, espandi il campo protoPayload della voce di log, then find the resourceName field.

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

Annulla l'eliminazione dell'account di servizio tramite ID numerico

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

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. 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 consente di ripristinare un account di servizio eliminato.

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

  • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio 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, ad esempio il seguente:

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