Create and delete service account keys

This page explains how to create and delete service account keys using theGoogle Cloud console, theGoogle Cloud CLI,theIdentity and Access Management API, or oneof theGoogle Cloud Client Libraries.

Note: If you need to access resources from a workload that runs outside of Google Cloud, such as on Amazon Web Services (AWS) or Microsoft Azure, consider usingWorkload Identity Federation instead of service account keys. Federation lets your workloads access resources directly, using a short-lived access token, and eliminates the maintenance and security burden associated with service account keys.

Before you begin

  • Enable the IAM API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enable permission.Learn how to grant roles.

    Enable the API

  • Set up authentication.

    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, aCloud 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#

    To use the .NET samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.

      Install the Google Cloud CLI.

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloudauthapplication-defaultlogin

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    For more information, see Set up ADC for a local development environment in the Google Cloud authentication documentation.

    C++

    To use the C++ samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.

      Install the Google Cloud CLI.

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloudauthapplication-defaultlogin

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    For more information, see Set up ADC for a local development environment in the Google Cloud authentication documentation.

    Go

    To use the Go samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.

      Install the Google Cloud CLI.

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloudauthapplication-defaultlogin

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    For more information, see Set up ADC for a local development environment in the Google Cloud authentication documentation.

    Java

    To use the Java samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.

      Install the Google Cloud CLI.

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloudauthapplication-defaultlogin

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    For more information, see Set up ADC for a local development environment in the Google Cloud authentication documentation.

    Python

    To use the Python samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.

      Install the Google Cloud CLI.

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloudauthapplication-defaultlogin

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    For more information, see Set up ADC for a local development environment in the Google Cloud authentication documentation.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      Install the Google Cloud CLI.

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    For more information, seeAuthenticate for using REST in the Google Cloud authentication documentation.

  • Understandservice account credentials.

Required roles

To get the permissions that you need to create and delete service account keys, ask your administrator to grant you theService Account Key Admin (roles/iam.serviceAccountKeyAdmin) IAM role on the project, or the service account whose keys you wantto manage. For more information about granting roles, seeManage access to projects, folders, and organizations.

You might also be able to get the required permissions throughcustom roles or otherpredefined roles.

Note:IAM basic roles might also contain permissions to create and delete service account keys. You shouldn't grant basic roles in a production environment, but you can grant them in a development or test environment.

For more information, seeService Accounts roles.

Depending on your organization policy configuration, you might also need toallow service account keys to be created in your projectbefore creating a key.

To get the permissions that you need to allow service account keys to be created in a project, ask your administrator to grant you the following IAM roles on your organization:

For more information about granting roles, seeManage access to projects, folders, and organizations.

These predefined roles contain the permissions required to allow service account keys to be created in a project. To see the exact permissions that are required, expand theRequired permissions section:

Required permissions

The following permissions are required to allow service account keys to be created in a project:

  • 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

You might also be able to get these permissions withcustom roles or otherpredefined roles.

Note:IAM basic roles might also contain permissions to allow service account keys to be created in a project. You shouldn't grant basic roles in a production environment, but you can grant them in a development or test environment.

Allow service account key creation

Before you create a service account key, make sure that theiam.disableServiceAccountKeyCreation organization policy constraint isn'tenforced for your project. If this constraint is enforced for your project,you can't create service account keys in that project.

Note: If your organization was created on or after May 3, 2024, this constraint is enforced by default.

We recommend enforcing this constraint for most projects and only exemptingprojects that truly require service account keys. For more information aboutalternative authentication methods, seeChoose the right authentication methodfor your use case.

To exempt a project from theiam.disableServiceAccountKeyCreation organizationpolicy constraint, ask an organization policy administrator to do the following:

  1. At the organization level, create a tag key and tag value that you will use to define whether a resource should be exempt from the organization policy. We recommend creating a tag with the keydisableServiceAccountKeyCreation and the valuesenforced andnot_enforced.

    To learn how to create tag keys and tag values, seeCreating and defining a new tag.

  2. Attach thedisableServiceAccountKeyCreation tag to the organization and set its value toenforced. All resources in the organization inherit this tag value, unless it's overwritten with a different tag value.

    To learn how to attach tags to resources, seeAttaching tags to resources.

  3. For each project or folder that you want to exempt from the organization policy, attach thedisableServiceAccountKeyCreation tag and set its value tonot_enforced. Setting a tag value for a project or folder in this way overrides the tag value inherited from the organization.
  4. Create or update the organization policy that prevents the creation of service account keys so that it doesn't enforce the constraint for exempt resources. This policy should have the following rules:

    • Configure theiam.disableServiceAccountKeyCreation constraint to not be enforced on any resources with thedisableServiceAccountKeyCreation: not_enforced tag. The condition in this rule should look like the following:

      "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
    • Configure theiam.disableServiceAccountKeyCreation constraint to be enforced on all other resources.

Create a service account key

To use a service account from outside of Google Cloud, such as on otherplatforms or on-premises, you must first establish the identity of the serviceaccount. Public/private key pairs provide a secure way of accomplishing thisgoal. When you create a service account key, the public portion is stored onGoogle Cloud, while the private portion is available only to you. For moreinformation about public/private key pairs, seeService account keys.

Note: You can create service account keys in JSON orPKCS#12 (P12) format. P12 service account keys are not recommended unlessthey are necessary for backwards compatibility. The following examples use JSONformat.

You can create aservice account keyusing the Google Cloud console, the gcloud CLI, theserviceAccounts.keys.create()method, or one of theclient libraries.A service account can have up to 10 keys.

By default, service account keys never expire. You can use anorganization policy constraint to specify the length oftime for which a service account key is valid. For details, seeExpiry times for user-managed keys.

In the examples below,SA_NAME is the name of yourservice account, andPROJECT_ID is the ID of yourGoogle Cloud project. You can retrieve theSA_NAME@PROJECT_ID.iam.gserviceaccount.comstring from theService Accountspage in the Google Cloud console.

Note: After you create a key, you might need to wait for60 seconds or more before you perform another operation with thekey. If you try to perform an operation with the key immediately after youcreate the key, and you receive an error, you canretry the request with exponential backoff.

Console

  1. In the Google Cloud console, go to theService accounts page.

    Go to Service accounts

    The remaining steps appear in the Google Cloud console.

  2. Select a project.
  3. Click the email address of the service account that you want to create a key for.
  4. Click theKeystab.
  5. Click theAdd key drop-down menu, then selectCreate new key.
  6. SelectJSON as theKey type and clickCreate.

ClickingCreate downloads a service account key file. After you download thekey file, you cannot download it again.

The downloaded key has the following format, wherePRIVATE_KEY is the private portion of the public/privatekey pair:

{"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"}
Always store your service account keys in a secure location. If you don't store your keys securely,then bad actors can find the keys and use them to access the resources that the service account canaccess. We strongly recommend storing your keys in a hardware-based or software-based key store. Formore guidance on storing service account keys securely, seeProtectingagainst privilege escalation.

You can move and rename this file however you like.

You can use service account key files toauthenticate an application as a service account.

gcloud

Execute thegcloud iam service-accounts keys createcommand to create service account keys.

Replace the following values:

  • KEY_FILE: The path to a new output file for theprivate key—for example,~/sa-private-key.json.
  • SA_NAME: The name of the service accountto create a key for.
  • PROJECT_ID: Your Google Cloud project ID.
gcloud iam service-accounts keys createKEY_FILE \    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

Output:

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

The service account key file is now downloaded to your machine. After youdownload the key file, you cannot download it again.

The downloaded key has the following format, wherePRIVATE_KEY is the private portion of the public/privatekey pair:

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

Always store your service account keys in a secure location. If you don't store your keys securely,then bad actors can find the keys and use them to access the resources that the service account canaccess. We strongly recommend storing your keys in a hardware-based or software-based key store. Formore guidance on storing service account keys securely, seeProtectingagainst privilege escalation.

You can move and rename this file however you like.

You can use service account key files toauthenticate an application as a service account.

C++

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMC++ API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

namespaceiam=::google::cloud::iam_admin_v1;return[](std::stringconst&name){iam::IAMClientclient(iam::MakeIAMConnection());autoresponse=client.CreateServiceAccountKey(name,google::iam::admin::v1::ServiceAccountPrivateKeyType::TYPE_GOOGLE_CREDENTIALS_FILE,google::iam::admin::v1::ServiceAccountKeyAlgorithm::KEY_ALG_RSA_2048);if(!response)throwstd::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";returnresponse->name();}

C#

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMC# API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

usingSystem;usingSystem.Text;usingGoogle.Apis.Auth.OAuth2;usingGoogle.Apis.Iam.v1;usingGoogle.Apis.Iam.v1.Data;publicpartialclassServiceAccountKeys{publicstaticServiceAccountKeyCreateKey(stringserviceAccountEmail){varcredential=GoogleCredential.GetApplicationDefault().CreateScoped(IamService.Scope.CloudPlatform);varservice=newIamService(newIamService.Initializer{HttpClientInitializer=credential});varkey=service.Projects.ServiceAccounts.Keys.Create(newCreateServiceAccountKeyRequest(),"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);stringjsonKeyContent=Encoding.UTF8.GetString(valueBytes);Console.WriteLine("Key created successfully");returnkey;}}

Go

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMGo API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

import("context"// "encoding/base64""fmt""io"iam"google.golang.org/api/iam/v1")// createKey creates a service account key.funccreateKey(wio.Writer,serviceAccountEmailstring)(*iam.ServiceAccountKey,error){ctx:=context.Background()service,err:=iam.NewService(ctx)iferr!=nil{returnnil,fmt.Errorf("iam.NewService: %w",err)}resource:="projects/-/serviceAccounts/"+serviceAccountEmailrequest:=&iam.CreateServiceAccountKeyRequest{}key,err:=service.Projects.ServiceAccounts.Keys.Create(resource,request).Do()iferr!=nil{returnnil,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")returnkey,nil}

Java

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMJava API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

importcom.google.cloud.iam.admin.v1.IAMClient;importcom.google.gson.Gson;importcom.google.iam.admin.v1.CreateServiceAccountKeyRequest;importcom.google.iam.admin.v1.ServiceAccountKey;importjava.io.IOException;publicclassCreateServiceAccountKey{publicstaticvoidmain(String[]args)throwsIOException{// TODO(Developer): Replace the below variables before running.StringprojectId="your-project-id";StringserviceAccountName="your-service-account-name";ServiceAccountKeykey=createKey(projectId,serviceAccountName);Gsongson=newGson();// System.out.println("Service account key: " + gson.toJson(key));}// Creates a key for a service account.publicstaticServiceAccountKeycreateKey(StringprojectId,StringaccountName)throwsIOException{Stringemail=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(IAMClientiamClient=IAMClient.create()){CreateServiceAccountKeyRequestreq=CreateServiceAccountKeyRequest.newBuilder().setName(String.format("projects/%s/serviceAccounts/%s",projectId,email)).build();ServiceAccountKeycreatedKey=iamClient.createServiceAccountKey(req);System.out.println("Key created successfully");returncreatedKey;}}}

Python

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMPython API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

fromgoogle.cloudimportiam_admin_v1fromgoogle.cloud.iam_admin_v1importtypesdefcreate_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"]returnkey

REST

Theprojects.serviceAccounts.keys.create method creates a key for a service account.

Before using any of the request data, make the following replacements:

  • PROJECT_ID: Your Google Cloud projectID. Project IDs are alphanumeric strings, likemy-project.
  • SA_NAME: The name of the service account that you want to create a key for.
  • KEY_ALGORITHM: Optional. The key algorithm to use for the key. The default, which is subject to change, is a 2,048-bit RSA key. For a list of all possible values, see theServiceAccountKeyAlgorithm reference.

HTTP method and URL:

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

Request JSON body:

{  "keyAlgorithm": "KEY_ALGORITHM"}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys" | Select-Object -Expand Content

APIs Explorer (browser)

Copy the request body and open themethod reference page. The APIs Explorer panel opens on the right side of the page. You can interact with this tool to send requests. Paste the request body in this tool, complete any other required fields, and clickExecute.

The response contains a key for your service account. The returned key has the following format, whereENCODED_PRIVATE_KEY is the private portion of the public/private key pair, encoded in 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"}

To create a key file that you can use to authenticate as the service account,decode the private key data and save it in a file:

Linux

Run the following command:

echo'ENCODED_PRIVATE_KEY'|base64--decode>PATH

ReplacePATH with the path of the file that you wantto save the key to. Use the.json file extension.

macOS

Run the following command:

echo'ENCODED_PRIVATE_KEY'|base64--decode>PATH

ReplacePATH with the path of the file that you wantto save the key to. Use the.json file extension.

PowerShell

  1. Save the encoded private key data(ENCODED_PRIVATE_KEY) in a file.

  2. Usecertutil to decode the file:

    certutil-decodeENCODED_FILEDECODED_FILE

    Replace the following values:

    • ENCODED_FILE: the path to the file containingthe encoded private key data.
    • DECODED_FILE: the path of the file that you wantto save the key to. Use the.json file extension.

Always store your service account keys in a secure location. If you don't store your keys securely,then bad actors can find the keys and use them to access the resources that the service account canaccess. We strongly recommend storing your keys in a hardware-based or software-based key store. Formore guidance on storing service account keys securely, seeProtectingagainst privilege escalation.

You can use service account key files toauthenticate an application as a service account.

Delete a service account key

Deleting a service account key permanently prevents you from using the key toauthenticate with Google APIs.

You cannot undelete a deleted key. Before you delete a key, we recommend thatyoudisable the key, then wait until you are sure that the keyis no longer needed. You can then delete the key.

As a best practice, rotate your service account keys regularly. To learn more aboutrotating service account keys, seeService account key rotation.

Important: Deleting a service account key does not revoke short-livedcredentials that were issued based on the key. To revoke a compromisedshort-lived credential, you mustdisable or delete the service account that the credentialrepresents. If you do so, any workload that uses the service account willimmediately lose access to your resources.

Console

  1. In the Google Cloud console, go to theService accounts page.

    Go to Service accounts

    The remaining steps appear in the Google Cloud console.

  2. Select a project.
  3. On theService accounts page, click the email address of the service account whose key you want to delete.
  4. Click theKeys tab.
  5. From the list of keys, clickDelete for each key you'd like to delete.

gcloud

Execute thegcloud iam service-accounts keys deletecommand to delete service account keys.

Replace the following values:

  • KEY_ID: The ID of the key to delete. To find thekey's ID,list all keys for the service account, identify thekey that you want to delete, and then copy its ID.
  • SA_NAME: The name of the service account that the keybelongs to.
  • PROJECT_ID: Your Google Cloud project ID.
gcloud iam service-accounts keys deleteKEY_ID \    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

Output:

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

C++

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMC++ API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

namespaceiam=::google::cloud::iam_admin_v1;[](std::stringconst&name){iam::IAMClientclient(iam::MakeIAMConnection());autoresponse=client.DeleteServiceAccountKey(name);if(!response.ok())throwstd::runtime_error(response.message());std::cout <<"ServiceAccountKey successfully deleted.\n";}

C#

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMC# API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

usingSystem;usingGoogle.Apis.Auth.OAuth2;usingGoogle.Apis.Iam.v1;usingGoogle.Apis.Iam.v1.Data;publicpartialclassServiceAccountKeys{publicstaticvoidDeleteKey(stringfullKeyName){varcredential=GoogleCredential.GetApplicationDefault().CreateScoped(IamService.Scope.CloudPlatform);varservice=newIamService(newIamService.Initializer{HttpClientInitializer=credential});service.Projects.ServiceAccounts.Keys.Delete(fullKeyName).Execute();Console.WriteLine("Deleted key: "+fullKeyName);}}

Go

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMGo API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

import("context""fmt""io"iam"google.golang.org/api/iam/v1")// deleteKey deletes a service account key.funcdeleteKey(wio.Writer,fullKeyNamestring)error{ctx:=context.Background()service,err:=iam.NewService(ctx)iferr!=nil{returnfmt.Errorf("iam.NewService: %w",err)}_,err=service.Projects.ServiceAccounts.Keys.Delete(fullKeyName).Do()iferr!=nil{returnfmt.Errorf("Projects.ServiceAccounts.Keys.Delete: %w",err)}fmt.Fprintf(w,"Deleted key: %v",fullKeyName)returnnil}

Java

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMJava API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

importcom.google.cloud.iam.admin.v1.IAMClient;importcom.google.iam.admin.v1.DeleteServiceAccountKeyRequest;importcom.google.iam.admin.v1.KeyName;importjava.io.IOException;publicclassDeleteServiceAccountKey{publicstaticvoidmain(String[]args)throwsIOException{// TODO(developer): Replace the variables before running the sample.StringprojectId="your-project-id";StringserviceAccountName="my-service-account-name";StringserviceAccountKeyId="service-account-key-id";deleteKey(projectId,serviceAccountName,serviceAccountKeyId);}// Deletes a service account key.publicstaticvoiddeleteKey(StringprojectId,StringaccountName,StringserviceAccountKeyId)throwsIOException{//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(IAMClientiamClient=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#deletingStringaccountEmail=String.format("%s@%s.iam.gserviceaccount.com",accountName,projectId);Stringname=KeyName.of(projectId,accountEmail,serviceAccountKeyId).toString();DeleteServiceAccountKeyRequestrequest=DeleteServiceAccountKeyRequest.newBuilder().setName(name).build();// Then you can delete the keyiamClient.deleteServiceAccountKey(request);System.out.println("Deleted key: "+serviceAccountKeyId);}}}

Python

To learn how to install and use the client library for IAM, seeIAM client libraries. For more information, see theIAMPython API reference documentation.

To authenticate to IAM, set up Application Default Credentials. For more information, seeBefore you begin.

fromgoogle.cloudimportiam_admin_v1fromgoogle.cloud.iam_admin_v1importtypesdefdelete_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

Theprojects.serviceAccounts.keys.delete method deletes a service account key.

Before using any of the request data, make the following replacements:

  • PROJECT_ID: Your Google Cloud projectID. Project IDs are alphanumeric strings, likemy-project.
  • SA_NAME: The name of the service account whose key you want to delete.
  • KEY_ID: The ID of the key that you want to delete. To find the key's ID,list all keys for the service account, identify the key that you want to delete, and then copy its ID from the end of thename field. The key's ID is everything afterkeys/.

HTTP method and URL:

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

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Execute the following command:

curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/KEY_ID"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method DELETE `
-Headers $headers `
-Uri "https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/KEY_ID" | Select-Object -Expand Content

APIs Explorer (browser)

Open themethod reference page. The APIs Explorer panel opens on the right side of the page. You can interact with this tool to send requests. Complete any required fields and clickExecute.

You should receive a JSON response similar to the following:

{}

What's next

Try it for yourself

If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.

Get started for free

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-12-15 UTC.