Elimina e annulla l'eliminazione dei service account

Questa pagina spiega come eliminare e annullare l'eliminazione dei service account utilizzando l'API Identity and Access Management (IAM), la console Trusted Cloud e lo strumento a riga di comando gcloud.

Prima di iniziare

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per eliminare e ripristinare i service account, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestisci 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 dei service account.

I ruoli di base IAM contengono anche le autorizzazioni per gestire i service account. Non devi concedere ruoli di base in un ambiente di produzione, ma puoi concederli 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 risorseTrusted Cloud by S3NS tramite quelaccount di serviziot. Se elimini il account di servizio Compute Engine predefinito, le istanze VM di Compute Engine che utilizzano questo account di servizio non avranno più accesso alle risorse del progetto.

Elimina i service account con cautela. Prima di eliminare un account di servizio, assicurati che le tue applicazioni critiche non lo utilizzino più. Se non sai con certezza se unaccount di serviziot è in uso, 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 30 giorni o meno dall'eliminazione deaccount di serviziont. Dopo 30 giorni, IAM rimuove definitivamente il service account. Trusted Cloud non può recuperare il account di servizio dopo la rimozione definitiva, anche se presenti 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. Le raccomandazioni di rischio di modifica generano avvisi quando tenti di eliminare account di servizio che Trusted Cloud sono stati identificati come importanti.

Se elimini un account di servizio e poi 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 al account di servizio eliminato. Al contrario, quando elimini un account di servizio e poi lo ripristini, la sua identità non cambia e mantiene i suoi ruoli.

Quando un account di servizio viene eliminato, i relativi binding dei ruoli non vengono rimossi immediatamente, ma vengono eliminati automaticamente dal sistema dopo un massimo di 60 giorni. Fino a quel momento, il account di servizio viene visualizzato nei binding dei ruoli con un prefisso deleted: e un suffisso ?uid=NUMERIC_ID, dove NUMERIC_ID è un ID numerico univoco per il service account.

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

Console

  1. Nella Trusted Cloud console, vai alla pagina Service account.

    Vai ad Account di servizio

  2. Seleziona un progetto.

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

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted 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.s3ns-system.iam.gserviceaccount.com

    Output:

    Deleted service account SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
  3. C++

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, 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.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    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 saperne di più, 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.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    
    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 saperne di più, 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.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    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 saperne di più, 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.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    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 saperne di più, 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.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    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: il tuo ID progetto Trusted Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.
    • SA_ID: l'ID del account di servizio. Può trattarsi dell'indirizzo email del account di servizio nel formato SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com o dell'ID numerico univoco del service account.

    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. In genere puoi annullare l'eliminazione di un account di servizio eliminato se soddisfa questi criteri:

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

    Dopo 30 giorni, IAM rimuove definitivamente il service account. Trusted Cloud Non è possibile recuperare ilaccount di serviziot dopo la rimozione definitiva, anche se invii una richiesta di assistenza.

  • Non esiste un account di servizio con lo stesso nome del service account eliminato.

    Ad esempio, supponiamo di eliminare accidentalmente il account di servizio my-service-account@project-id.s3ns-system.iam.gserviceaccount.com. Hai comunque bisogno di un account di servizio con quel nome, quindi ne crei uno nuovo con lo stesso nome, my-service-account@project-id.s3ns-system.iam.gserviceaccount.com.

    Il nuovo account di servizio non eredita le autorizzazioni del account di servizio eliminato. In effetti, è completamente separato dal 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 recuperare ilaccount di serviziot originale.

Se non riesci ad annullare l'eliminazione del account di servizio, puoi crearne uno nuovo con lo stesso nome, revocare tutti i ruoli delaccount di serviziot eliminato e concedere gli stessi ruoli al nuovoaccount di serviziot. 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 suo ID numerico. L'ID numerico è un numero di 21 cifre, ad esempio 123456789012345678901, che identifica in modo univoco il account di servizio. Ad esempio, se elimini un account di servizio, poi crei un nuovoaccount di serviziot con lo stesso nome, il service account originale e il nuovoaccount di serviziot avranno ID numerici diversi.

Se sai che un'associazione in un criterio di autorizzazione include il service account eliminato, puoi recuperare il criterio di autorizzazione, quindi trovare l'ID numerico nel criterio di autorizzazione. L'ID numerico viene aggiunto al nome del account di servizio eliminato. Ad esempio, in questa policy di autorizzazione, l'ID numerico per il account di serviziot eliminato è 123456789012345678901:

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

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

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

  1. Nella console Trusted 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.s3ns-system.iam.gserviceaccount.com):

    resource.type="service_account"
    resource.labels.email_id="SERVICE_ACCOUNT_EMAIL"
    "DeleteServiceAccount"
    
  3. Se il 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, poi fai clic su Applica.

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

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

    • Se i risultati di 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, 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 la voce di log mostra l'operazione che vuoi annullare. Ripeti questa procedura finché non trovi la voce di log corretta.

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

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

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

Dopo aver trovato l'ID numerico del account di servizio eliminato, puoi provare a ripristinarlo.

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted 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.s3ns-system.iam.gserviceaccount.com
        etag: BwWWE7zpApg=
        name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
        oauth2ClientId: '123456789012345678901'
        projectId: PROJECT_ID
        uniqueId: 'ACCOUNT_ID'
  3. REST

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

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

    • PROJECT_ID: il tuo ID progetto Trusted Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.
    • SA_NUMERIC_ID: l'ID numerico univoco del 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 l'account può essere ripristinato, riceverai un codice di risposta 200 OK con i dettagli dell'account di servizio ripristinato, ad esempio:

    {
      "restoredAccount": {
        "name": "projects/my-project/serviceAccounts/my-service-account@my-project.s3ns-system.iam.gserviceaccount.com",
        "projectId": "my-project",
        "uniqueId": "123456789012345678901",
        "email": "my-service-account@my-project.s3ns-system.iam.gserviceaccount.com",
        "displayName": "My service account",
        "etag": "BwUp3rVlzes=",
        "description": "A service account for running jobs in my project",
        "oauth2ClientId": "987654321098765432109"
      }
    }
    

Passaggi successivi