Trang này giải thích cách tạo và quản lý tài khoản dịch vụ bằng cách sử dụng API quản lý truy cập và nhận dạng (IAM), bảng điều khiển Google Cloud và lệnh gcloud- công cụ dòng Theo mặc định, mỗi dự án có thể có tối đa 100 tài khoản dịch vụ kiểm soát quyền truy cập vào tài nguyên của bạn. Bạn có thể yêu cầu tăng hạn ngạch nếu cần thiết. Tìm hiểu thêm về hạn ngạch và giới hạn ## Trước khi bắt đầu Bật API IAM Hiểu tài khoản dịch vụ IAM Cài đặt Google Cloud CLI Vai trò bắt buộc Để nhận các quyền mà bạn cần để quản lý tài khoản dịch vụ, hãy yêu cầu quản trị viên cấp cho bạn các vai trò IAM sau trong dự án: - Để xem tài khoản dịch vụ và siêu dữ liệu tài khoản dịch vụ: Xem tài khoản dịch vụ ( vai trò/iam.serviceAccountViewer) - Để xem và tạo tài khoản dịch vụ: Tạo tài khoản dịch vụ ( vai trò/iam.serviceAccountCreator) - Để xem và xóa tài khoản dịch vụ: Xóa tài khoản dịch vụ ( vai trò/iam.serviceAccountDeleter) - Để quản lý đầy đủ (xem, tạo, cập nhật, vô hiệu hóa, bật, xóa, phục hồi và quản lý quyền truy cập vào) tài khoản dịch vụ: Quản trị tài khoản dịch vụ ( vai trò/iam.serviceAccountAdmin) Để biết thêm thông tin về việc cấp vai trò, hãy xem Quản lý quyền truy cập Để tìm hiểu thêm về các vai trò này, hãy xem Vai trò của Tài khoản dịch vụ Các vai trò cơ bản của IAM cũng có các quyền để quản lý tài khoản dịch vụ. Bạn không nên cấp các vai trò cơ bản trong môi trường sản xuất, nhưng bạn có thể cấp cho chúng trong môi trường phát triển hoặc thử nghiệm ## Tạo tài khoản dịch vụ Khi tạo tài khoản dịch vụ, bạn phải cung cấp ID gồm chữ và số ( trong các mẫu dưới đây), chẳng hạn như `SA_NAME` tài khoản dịch vụ của tôi. ID phải có từ 6 đến 30 ký tự và có thể chứa các ký tự chữ và số viết thường và dấu gạch ngang. Sau khi bạn tạo một dịch vụ tài khoản, bạn không thể thay đổi tên của nó Tên của tài khoản dịch vụ xuất hiện trong địa chỉ email được cung cấp trong quá trình tạo, ở định dạng `SA_NAME`@ `PROJECT_ID`.iam.gserviceaccount.com Mỗi tài khoản dịch vụ cũng có một ID số duy nhất, vĩnh viễn, được tạo tự động Bạn cũng cung cấp các thông tin sau khi tạo tài khoản dịch vụ: là một mô tả tùy chọn cho tài khoản dịch vụ SA_DESCRIPTION là một tên thân thiện cho tài khoản dịch vụ SA_DISPLAY_NAME là ID của dự án Google Cloud của bạn DỰ ÁN_ID Sau khi tạo tài khoản dịch vụ, bạn có thể phải đợi 60 giây trở lên trước khi sử dụng tài khoản dịch vụ. Hiện tượng này xảy ra do hoạt động đọc cuối cùng nhất quán; có thể mất thời gian để tài khoản dịch vụ mới hiển thị. Nếu bạn cố gắng đọc hoặc sử dụng tài khoản dịch vụ ngay sau khi tạo tài khoản đó và gặp lỗi, bạn có thể thử lại yêu cầu với dự phòng theo cấp số nhân Bảng điều khiển Trong bảng điều khiển Google Cloud, hãy chuyển đến Tạo trang tài khoản dịch vụ Chuyển đến Tạo tài khoản dịch vụ Chọn một dự án Đám mây Nhập tên tài khoản dịch vụ để hiển thị trong bảng điều khiển Google Cloud Bảng điều khiển Google Cloud tạo ID tài khoản dịch vụ dựa trên tên này. Chỉnh sửa ID nếu cần. Bạn không thể thay đổi ID sau này Tùy chọn: Nhập mô tả về tài khoản dịch vụ Nếu bạn không muốn đặt kiểm soát truy cập ngay bây giờ, hãy nhấp vào Doneto kết thúc việc tạo tài khoản dịch vụ Để đặt kiểm soát truy cập ngay bây giờ, hãy nhấp vào Tạo và tiếp tụcvà tiếp tục sang bước tiếp theo Tùy chọn: Chọn một hoặc nhiều vai trò IAM để cấp cho tài khoản dịch vụ trong dự án Khi bạn hoàn tất việc thêm vai trò, hãy nhấp vào Tiếp tục Tùy chọn: Trong Trường vai trò người dùng tài khoản dịch vụ, thêm thành viên có thể mạo danh tài khoản dịch vụ Tùy chọn: Trong Trường vai trò quản trị tài khoản dịch vụ, thêm thành viên có thể quản lý tài khoản dịch vụ Nhấp chuột Doneto kết thúc việc tạo tài khoản dịch vụ gcloud CLI Để tạo tài khoản dịch vụ, hãy chạy lệnh tạo tài khoản dịch vụ gcloud iam: tạo tài khoản dịch vụ gcloud iam SA_NAME\ --description="MÔ TẢ"\ --display-name="HIỂN THỊ_NAME"Thay thế các giá trị sau: : tên tài khoản dịch vụ SA_NAME : một mô tả tùy chọn của tài khoản dịch vụ SỰ MIÊU TẢ : tên tài khoản dịch vụ để hiển thị trong bảng điều khiển Google Cloud TÊN HIỂN THỊ - Tùy chọn: Để cấp cho tài khoản dịch vụ của bạn một vai trò IAM trong dự án của bạn, hãy chạy lệnh dự án gcloud add-iam-policy-bindingcommand: dự án gcloud add-iam-policy-binding PROJECT_ID\ --member="serviceAccount: SA_NAME@ PROJECT_ID.iam.gserviceaccount.com"\ --role="ROLE_NAME"Thay thế các giá trị sau: : ID dự án DỰ ÁN_ID : tên tài khoản dịch vụ SA_NAME : một tên vai trò, chẳng hạn như ROLE_NAME vai trò/compute.osĐăng nhập - Tùy chọn: Để cho phép người dùng mạo danh tài khoản dịch vụ, hãy chạy gcloud iam service-accounts add-iam-policy-bindingcommand để cấp cho người dùng vai trò Người dùng tài khoản dịch vụ ( role/iam.serviceAccountUser) trên tài khoản dịch vụ: gcloud iam service-accounts add-iam-policy-binding SA_NAME@ PROJECT_ID.iam.gserviceaccount.com \ --member="user: USER_EMAIL"\ --role="roles/iam.serviceAccountUser"Thay thế các giá trị sau: : ID dự án DỰ ÁN_ID : tên tài khoản dịch vụ SA_NAME : địa chỉ email của người dùng EMAIL NGƯỜI DÙNG - NGHỈ NGƠI Các serviceAccounts.create phương thức tạo tài khoản dịch vụ Trước khi sử dụng bất kỳ dữ liệu yêu cầu nào, hãy thực hiện các thay thế sau: : ID dự án Google Cloud của bạn. ID dự án là các chuỗi chữ và số, chẳng hạn như DỰ ÁN_ID dự án của tôi : ID chữ và số của tài khoản dịch vụ của bạn. Tên này phải có từ 6 đến 30 ký tự và có thể chứa các ký tự chữ và số viết thường và dấu gạch ngang SA_NAME : Không bắt buộc. Mô tả cho tài khoản dịch vụ SA_DESCRIPTION : Tên mà con người có thể đọc được cho tài khoản dịch vụ SA_DISPLAY_NAME Phương thức HTTP và URL: ĐĂNG httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts Yêu cầu nội dung JSON: { "accountId": "SA_NAME", "serviceAccount": { "description": "SA_DESCRIPTION", "displayName": "SA_DISPLAY_NAME"} } Để gửi yêu cầu của bạn, hãy mở rộng một trong các tùy chọn sau: cuộn tròn (Linux, macOS hoặc Cloud Shell) Lưu nội dung yêu cầu trong một tệp có tên yêu cầu.json, và thực hiện lệnh sau: curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"-H "Content-Type: application/json; charset=utf-8"-d @request.json "httpsiam.googleapis.com /v1/dự án/ PROJECT_ID/serviceAccounts"PowerShell (Windows) Lưu nội dung yêu cầu trong một tệp có tên yêu cầu.json, và thực hiện lệnh sau: $cred = gcloud auth print-access-token $headers = @{ "Authorization"= "Bearer $cred"} Gọi-WebRequest ` -Phương thức POST ` -Tiêu đề $headers ` -ContentType: "application/json; charset=utf-8"` -InFile request.json ` -Uri "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts"| Chọn-Đối tượng -Mở rộng Nội dung API Explorer (trình duyệt) Sao chép nội dung yêu cầu và mở trang tham khảo phương pháp Bảng API Explorer mở ở phía bên phải của trang Bạn có thể tương tác với công cụ này để gửi yêu cầu Dán nội dung yêu cầu vào công cụ này, hoàn thành bất kỳ trường bắt buộc nào khác và nhấp vào **Hành hình** Bạn sẽ nhận được phản hồi JSON tương tự như sau: { "name": "projects/my-project/serviceAccounts/[email protected]", "projectId": "my-project", "uniqueId": "123456789012345678901", "email": "[email protected]", "displayName": "Tài khoản dịch vụ của tôi", "etag": "BwUp3rVlzes "description": "Tài khoản dịch vụ để chạy các công việc trong dự án", "oauth2ClientId": "987654321098765432109"} C++ Để tìm hiểu cách cài đặt và sử dụng thư viện máy khách cho IAM, hãy xem thư viện máy khách IAM. Để biết thêm thông tin, hãy xem tài liệu tham khảo IAM C++ API không gian tên iam = ::google::cloud::iam; std::string const& project_id, std::string const& account_id, std::string const& display_name, std::string const& description) { iam::IAMClient client(iam::MakeIAMConnection google::iam::admin::v1::ServiceAccount service_account; service_account.set_display_name(display_name); service_account.set_description(description); phản hồi tự động = client.CreateServiceAccount("projects/ "+ project_id, account_id, service_account); if (!response) throw std::runtime_error(response.statusmessage std::cout<< "Tài khoản dịch vụ được tạo thành công: "<< response->DebugString()<< ""; } C# Để tìm hiểu cách cài đặt và sử dụng thư viện máy khách cho IAM, hãy xem thư viện máy khách IAM. Để biết thêm thông tin, hãy xem tài liệu tham khảo IAM C# API sử dụng Hệ thống; sử dụng Google.Apis.Auth.OAuth2; sử dụng Google.Apis.Iam.v1; sử dụng Google.Apis.Iam.v1.Data; lớp một phần công khai ServiceAccounts { public static ServiceAccount CreateServiceAccount(string projectId, string name, string displayName) { var credential = GoogleCredential.GetApplicationDefault() .CreateScoped(IamService.Scope.CloudPlatform); var service = new IamService(new IamService.Initializer { HttpClientInitializer = credentialvar request = new CreateServiceAccountRequest { AccountId = name, ServiceAccount = new ServiceAccount { DisplayName = displayName } }; var serviceAccount = service.Projects.ServiceAccounts.Create( request, "projects/ "+ projectId).Execute Console.WriteLine("Tài khoản dịch vụ đã tạo: "+ serviceAccount.Email); return serviceAccount; } } Đi Để tìm hiểu cách cài đặt và sử dụng thư viện máy khách cho IAM, hãy xem thư viện máy khách IAM. Để biết thêm thông tin, hãy xem tài liệu tham khảo IAM Go API nhập ( "context""fmt""io"iam "google.golang.org/api/iam/v1") // createServiceAccount tạo một tài khoản dịch vụ. func createServiceAccount(w io.Writer, projectID, name, displayName string) (*iam.ServiceAccount, error) { Dịch vụ ctx := context.Background(), err := iam.NewService(ctx) if err != nil { return nil, fmt.Errorf("iam.NewService: %v", err) } request :=&iam.CreateServiceAccountRequest{ AccountId: name, ServiceAccount:&iam.ServiceAccount{ DisplayName: displayName, }, } account, err := service.Projects.ServiceAccounts.Create("projectsprojectID, request).Do() if err != nil { return nil, fmt.Errorf("Projects.ServiceAccounts.Create: %v", err) } fmt.Fprintf(w, "Tài khoản dịch vụ đã tạo: %v", tài khoản) trả về tài khoản, nil } Java Để tìm hiểu cách cài đặt và sử dụng thư viện máy khách cho IAM, hãy xem thư viện máy khách IAM. Để biết thêm thông tin, hãy xem tài liệu tham khảo IAM Java API nhập com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; nhập com.google.api.client.json.jackson2.JacksonFactory; nhập com.google.api.services.iam.v1.Iam; nhập com.google.api.services.iam.v1.IamScopes; nhập com.google.api.services.iam.v1.model.CreateServiceAccountRequest; nhập com.google.api.services.iam.v1.model.ServiceAccount; nhập com.google.auth.http.HttpCredentialsAdapter; nhập com.google.auth.oauth2.GoogleCredentials; nhập java.io.IOException; nhập java.security.GeneralSecurityException; nhập java.util.Collections; public class CreateServiceAccount { // Tạo tài khoản dịch vụ. public static void createServiceAccount(String projectId, String serviceAccountName) { // String projectId = "my-project-id"; // String serviceAccountName = "my-service-account-name"; Dịch vụ của tôi = null; try { service = initService } catch (IOException | GeneralSecurityException e) { System.out.println("Không thể khởi chạy dịch vụ: "+ e.toString return; } try { ServiceAccount serviceAccount = new ServiceAccount serviceAccount.setDisplayName("your-display-name CreateServiceAccountRequest request = new CreateServiceAccountRequest request.setAccountId(serviceAccountName); request.setServiceAccount(serviceAccount); serviceAccount = service.projectsserviceAccountscreate( "projects/"+ projectId, request).execute System.out.println("Tài khoản dịch vụ đã tạo: "+ serviceAccount.getEmail } catch (IOException e) { System.out.println("Không thể tạo tài khoản dịch vụ: "+ e.toString } } private static Iam initService() ném GeneralSecurityException, IOException { // Sử dụng chiến lược Thông tin xác thực mặc định của ứng dụng để xác thực. Để biết thêm thông tin, hãy xem: // httpscloud.google.com/docs/authentication/production#finding_credentials_automatically GoogleCredentials credential = GoogleCredentials.getApplicationDefault() .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM // Khởi tạo dịch vụ IAM, dịch vụ này có thể được sử dụng để gửi yêu cầu tới API IAM. Dịch vụ Iam = new Iam.Builder( GoogleNetHttpTransport.newTrustedTransport JacksonFactory. getDefaultInstance new HttpCredentialsAdapter(credential)) .setApplicationName("service-accounts") .build dịch vụ hoàn trả; } } con trăn Để tìm hiểu cách cài đặt và sử dụng thư viện máy khách cho IAM, hãy xem thư viện máy khách IAM. Để biết thêm thông tin, hãy xem tài liệu tham khảo IAM Python API nhập os từ google.oauth2 nhập service_account nhập googleapiclient.Discovery def create_service_account(project_id, name, display_name): Tạo thông tin đăng nhập tài khoản dịch vụ = service_account.Credentials.from_service_account_file( tên tệp=os.environ['GOOGLE_APPLICATION_CREDENTIALS phạm vihttpswww.googleapis.com/auth/ dịch vụ nền tảng đám mây = googleapclient.Discovery.build( 'iam', 'v1', credentials=credentials) my_service_account = service.projectsserviceAccountscreate( name='projects/'+ project_id, body={ 'accountId': name, 'serviceAccount': { 'displayName': display_name } thực thi() print('Tài khoản dịch vụ đã tạo: '+ my_service_account['email return my_service_account Sau khi bạn tạo tài khoản dịch vụ, hãy cấp một hoặc nhiều vai trò cho tài khoản dịch vụ để tài khoản đó có thể thay mặt bạn thực hiện Ngoài ra, nếu tài khoản dịch vụ cần truy cập tài nguyên trong các dự án khác, bạn thường phải bật API cho các tài nguyên đó trong dự án mà bạn đã tạo tài khoản dịch vụ ## Niêm yết tài khoản dịch vụ Bạn có thể liệt kê các tài khoản dịch vụ của mình để giúp bạn kiểm tra các khóa và tài khoản dịch vụ hoặc là một phần của công cụ tùy chỉnh để quản lý tài khoản dịch vụ Bảng điều khiển Trong bảng điều khiển Google Cloud, hãy chuyển đến trang tài khoản dịch vụ Chọn một dự án Các Trang tài khoản dịch vụ liệt kê tất cả các tài khoản dịch vụ do người dùng quản lý trong dự án bạn đã chọn. Trang không liệt kê các tài khoản dịch vụ do Google quản lý gcloud CLI thực hiện danh sách tài khoản dịch vụ gcloud iam lệnh liệt kê tất cả các tài khoản dịch vụ trong một dự án Yêu cầu: danh sách tài khoản dịch vụ gcloud iam Đầu ra là danh sách tất cả các tài khoản dịch vụ trong dự án: TÊN EMAIL SA_DISPLAY_NAME_1 SA_NAME_1@ PROJECT_ID.iam.gserviceaccount.com SA_DISPLAY_NAME_2 SA_NAME_2@ PROJECT_ID.iam.gserviceaccount.com NGHỈ NGƠI Các serviceAccounts.list phương thức liệt kê mọi tài khoản dịch vụ trong dự án của bạn Trước khi sử dụng bất kỳ dữ liệu yêu cầu nào, hãy thực hiện các thay thế sau: : ID dự án Google Cloud của bạn. ID dự án là các chuỗi chữ và số, chẳng hạn như DỰ ÁN_ID dự án của tôi Phương thức HTTP và URL: NHẬN httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts Để gửi yêu cầu của bạn, hãy mở rộng một trong các tùy chọn sau: cuộn tròn (Linux, macOS hoặc Cloud Shell) Thực hiện lệnh sau: curl -X GET -H "Ủy quyền: Bearer $(gcloud auth print-access-token)""httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts"PowerShell (Windows) Thực hiện lệnh sau: $cred = gcloud auth print-access-token $headers = @{ "Authorization"= "Bearer $cred"} Gọi-WebRequest ` -Phương thức NHẬN ` -Tiêu đề $headers ` -Uri "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts"| Chọn-Đối tượng -Mở rộng Nội dung API Explorer (trình duyệt) Mở trang tham khảo phương pháp Bảng API Explorer mở ở phía bên phải của trang Bạn có thể tương tác với công cụ này để gửi yêu cầu Hoàn thành bất kỳ trường bắt buộc nào và nhấp vào **Hành hình** Bạn sẽ nhận được phản hồi JSON tương tự như sau: { "accounts": [ { "name": "projects/my-project/serviceAccounts/[email protected]", "projectId": "my-project", "uniqueId": "123456789012345678901", "email": "[email protected]", "description": "Tài khoản dịch vụ đầu tiên của tôi", "displayName": "Tài khoản dịch vụ 1", "etag": "BwUpTsLVUkQ "oauth2ClientId": "987654321098765432109"}, { "name": "projects/my-project/serviceAccounts/[email protected]", "projectId": "my-project", "uniqueId ": "234567890123456789012", "email": "[email protected]", "description": "Tài khoản dịch vụ thứ hai của tôi", "displayName": "Tài khoản dịch vụ 2", "etag": "UkQpTwBVUsL "oauth2ClientId": "876543210987654321098"} ] } C++ Để tìm hiểu cách cài đặt và sử dụng thư viện máy khách cho IAM, hãy xem thư viện máy khách IAM. Để biết thêm thông tin, hãy xem tài liệu tham khảo IAM C++ API không gian tên iam = ::google::cloud::iam; std::string const& project_id) { iam::IAMClient client(iam::MakeIAMConnection int count = 0; for (auto const& sa : client.ListServiceAccounts("projects/"+ project_id)) { if (!sa) throw std::runtime_error(sa.statusmessage std::cout<< "Đã lấy thành công ServiceAccount: "<< sa->name()<< ""; ++count; } if (count == 0) { std::cout<< "Không tìm thấy tài khoản dịch vụ nào trong dự án: "<< project_id<< ""; } } C# Để tìm hiểu cách cài đặt và sử dụng thư viện máy khách cho IAM, hãy xem thư viện máy khách IAM. Để biết thêm thông tin, hãy xem tài liệu tham khảo IAM C# API sử dụng Hệ thống; sử dụng System.Collections.Generic; sử dụng Google.Apis.Auth.OAuth2; sử dụng Google.Apis.Iam.v1; sử dụng Google.Apis.Iam.v1.Data; lớp một phần công khai ServiceAccounts { public static IList ListServiceAccounts(string projectId) { var credential = GoogleCredential.GetApplicationDefault() .CreateScoped(IamService.Scope.CloudPlatform); var service = new IamService(new IamService.Initializer { HttpClientInitializer = credentialvar response = service.Projects.ServiceAccounts.List( "projects/" + projectId).Execute foreach (ServiceAccount account in response.Accounts) { Console.WriteLine("Name: " + account.Name); Console.WriteLine("Display Name: " + account.DisplayName); Console.WriteLine("Email: " + account.Email); Console.WriteLine } return response.Accounts; } } Go To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Go API reference documentation import ( "context" "fmt" "io" iam "google.golang.org/api/iam/v1" ) // listServiceAccounts lists a project's service accounts. func listServiceAccounts(w io.Writer, projectID string) iam.ServiceAccount, error) { ctx := context.Background() service, err := iam.NewService(ctx) if err != nil { return nil, fmt.Errorf("iam.NewService: %v", err) } response, err := service.Projects.ServiceAccounts.List("projects/" + projectID).Do() if err != nil { return nil, fmt.Errorf("Projects.ServiceAccounts.List: %v", err) } for _, account := range response.Accounts { fmt.Fprintf(w, "Listing service account: %v ", account.Name) } return response.Accounts, nil } Java To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Java API reference documentation import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.iam.v1.Iam; import com.google.api.services.iam.v1.IamScopes; import com.google.api.services.iam.v1.model.ListServiceAccountsResponse; import com.google.api.services.iam.v1.model.ServiceAccount; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.Collections; import java.util.List; public class ListServiceAccounts { // Lists all service accounts for the current project. public static void listServiceAccounts(String projectId) { // String projectId = "my-project-id" Iam service = null; try { service = initService } catch (IOException | GeneralSecurityException e) { System.out.println("Unable to initialize service: " + e.toString return; } try { ListServiceAccountsResponse response = service.projectsserviceAccountslist("projects/" + projectId).execute List serviceAccounts = response.getAccounts for (ServiceAccount account : serviceAccounts) { System.out.println("Name: " + account.getName System.out.println("Display Name: " + account.getDisplayName System.out.println("Email: " + account.getEmail System.out.println } } catch (IOException e) { System.out.println("Unable to list service accounts: " + e.toString } } private static Iam initService() throws GeneralSecurityException, IOException { // Use the Application Default Credentials strategy for authentication. For more info, see: // httpscloud.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 JacksonFactory.getDefaultInstance new HttpCredentialsAdapter(credential)) .setApplicationName("service-accounts") .build return service; } } Python To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Python API reference documentation import os from google.oauth2 import service_account import googleapiclient.discovery def list_service_accounts(project_id): Lists all service accounts for the current project credentials = service_account.Credentials.from_service_account_file( filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS scopeshttpswww.googleapis.com/auth/cloud-platform service = googleapiclient.discovery.build( 'iam', 'v1', credentials=credentials) service_accounts = service.projectsserviceAccountslist( name='projects/' + project_id).execute() for account in service_accounts['accounts print('Name: ' + account['name print('Email: ' + account['email print(' ') return service_accounts ## Updating a service account The display name (friendly name) and description of a service account are commonly used to capture additional information about the service account, such as the purpose of the service account or a contact person for the account Console In the Google Cloud console, go to the Service accountspage Select a project Click the email address of the service account that you want to rename Enter the new name in the Namebox, then click Save gcloud CLI Execute the gcloud iam service-accounts update command to update a service account Command: gcloud iam service-accounts update SA_NAME@ PROJECT_ID.iam.gserviceaccount.com \ --description=" UPDATED_SA_DESCRIPTION" \ --display-name=" UPDATED_DISPLAY_NAME" The output is the renamed service account: description: UPDATED_SA_DESCRIPTIONdisplayName: UPDATED_DISPLAY_NAMEname: projects/ PROJECT_ID/serviceAccounts/ SA_NAME@ PROJECT_ID.iam.gserviceaccount.com REST The serviceAccounts.patch method updates a service account Before using any of the request data, make the following replacements: : Your Google Cloud project ID. Project IDs are alphanumeric strings, like PROJECT_ID my-project : The ID of your service account. This can either be the service account's email address in the form SA_ID , or the service account's unique numeric ID SA_NAME@ PROJECT_ID.iam.gserviceaccount.com : The alphanumeric ID of your service account. This name must be between 6 and 30 characters, and can contain lowercase alphanumeric characters and dashes SA_NAME - Replace at least one of the following: : A new display name for your service account UPDATED_DISPLAY_NAME : A new description for your service account UPDATED_DESCRIPTION HTTP method and URL: PATCH httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID Request JSON body: { "serviceAccount": { "email": " SA_NAME@ PROJECT_ID.iam.gserviceaccount.com", "displayName": " UPDATED_DISPLAY_NAME", "description": " UPDATED_DESCRIPTION" }, "updateMask": "displayName,description" } To send your request, expand one of these options: curl (Linux, macOS, or Cloud Shell) Save the request body in a file called request.json, and execute the following command: curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json; charset=utf-8" -d @request.json "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID" PowerShell (Windows) Save the request body in a file called request.json, and execute the following command: $cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method PATCH ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID" | Select-Object -Expand Content API Explorer (browser) Copy the request body and open the method reference page The API 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 click **Execute** You should receive a JSON response similar to the following: { "name": "projects/my-project/serviceAccounts/[email protected]", "displayName": "My updated service account", "description": "An updated description of my service account" } C++ To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM C++ API reference documentation namespace iam = ::google::cloud::iam; std::string const& name, std::string const& display_name) { iam::IAMClient client(iam::MakeIAMConnection google::iam::admin::v1::PatchServiceAccountRequest request; google::iam::admin::v1::ServiceAccount service_account; service_account.set_name(name); service_account.set_display_name(display_name); google::protobuf::FieldMask update_mask; *update_mask.add_paths() = "display_name"; *request.mutable_service_account() = service_account; *request.mutable_update_mask() = update_mask; auto response = client.PatchServiceAccount(request); if (!response) throw std::runtime_error(response.statusmessage std::cout << "ServiceAccount successfully updated: " << response->DebugString() << " "; } C# To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM C# API reference documentation using System; using Google.Apis.Auth.OAuth2; using Google.Apis.Iam.v1; using Google.Apis.Iam.v1.Data; public partial class ServiceAccounts { public static ServiceAccount RenameServiceAccount(string email, string newDisplayName) { var credential = GoogleCredential.GetApplicationDefault() .CreateScoped(IamService.Scope.CloudPlatform); var service = new IamService(new IamService.Initializer { HttpClientInitializer = credential// First, get a ServiceAccount using List() or Get string resource = "projectsserviceAccounts/" + email; var serviceAccount = service.Projects.ServiceAccounts.Get(resource) .Execute // Then you can update the display name. serviceAccount.DisplayName = newDisplayName; serviceAccount = service.Projects.ServiceAccounts.Update( serviceAccount, resource).Execute Console.WriteLineUpdated display name for {serviceAccount.Email} " + "to: " + serviceAccount.DisplayName); return serviceAccount; } } Go To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Go API reference documentation import ( "context" "fmt" "io" iam "google.golang.org/api/iam/v1" ) // renameServiceAccount renames a service account. func renameServiceAccount(w io.Writer, email, newDisplayName string) (*iam.ServiceAccount, error) { ctx := context.Background() service, err := iam.NewService(ctx) if err != nil { return nil, fmt.Errorf("iam.NewService: %v", err) } // First, get a ServiceAccount using List() or Get resource := "projectsserviceAccounts/" + email serviceAccount, err := service.Projects.ServiceAccounts.Get(resource).Do() if err != nil { return nil, fmt.Errorf("Projects.ServiceAccounts.Get: %v", err) } // Then you can update the display name. serviceAccount.DisplayName = newDisplayName serviceAccount, err = service.Projects.ServiceAccounts.Update(resource, serviceAccount).Do() if err != nil { return nil, fmt.Errorf("Projects.ServiceAccounts.Update: %v", err) } fmt.Fprintf(w, "Updated service account: %v", serviceAccount.Email) return serviceAccount, nil } Java To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Java API reference documentation import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.iam.v1.Iam; import com.google.api.services.iam.v1.IamScopes; import com.google.api.services.iam.v1.model.ServiceAccount; 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 RenameServiceAccount { // Changes a service account's display name. public static void renameServiceAccount(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: " + e.toString return; } String serviceAccountEmail = serviceAccountName ++ projectId + ".iam.gserviceaccount.com"; try { // First, get a service account using List() or Get() ServiceAccount serviceAccount = service .projects() .serviceAccounts() .get("projectsserviceAccounts/" + serviceAccountEmail) .execute // Then you can update the display name serviceAccount.setDisplayName("your-new-display-name serviceAccount = service .projects() .serviceAccounts() .update(serviceAccount.getName serviceAccount) .execute System.out.println( "Updated display name for " + serviceAccount.getName() + " to: " + serviceAccount.getDisplayName } catch (IOException e) { System.out.println("Unable to rename service account: " + e.toString } } private static Iam initService() throws GeneralSecurityException, IOException { // Use the Application Default Credentials strategy for authentication. For more info, see: // httpscloud.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 JacksonFactory.getDefaultInstance new HttpCredentialsAdapter(credential)) .setApplicationName("service-accounts") .build return service; } } Python To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Python API reference documentation import os from google.oauth2 import service_account import googleapiclient.discovery def rename_service_account(email, new_display_name): Changes a service account's display name # First, get a service account using List() or Get() credentials = service_account.Credentials.from_service_account_file( filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS scopeshttpswww.googleapis.com/auth/cloud-platform service = googleapiclient.discovery.build( 'iam', 'v1', credentials=credentials) resource = 'projectsserviceAccounts/' + email my_service_account = service.projectsserviceAccountsget( name=resource).execute() # Then you can update the display name my_service_account['displayName'] = new_display_name my_service_account = service.projectsserviceAccountsupdate( name=resource, body=my_service_account).execute() print('Updated display name for {} to: format( my_service_account['email my_service_account['displayName return my_service_account ## Disabling a service account Similar to deleting a service account, when you disable a service account, applications will no longer have access to Google Cloud resources through that service account. If you disable the default App Engine and Compute Engine service accounts, the instances will no longer have access to resources in the project. If you attempt to disable an already disabled service account, it will have no effect Unlike deleting a service account, disabled service accounts can easily be re-enabled as necessary. We recommend disabling a service account before deleting it to make sure no critical applications are using the service account Console In the Google Cloud console, go to the Service accountspage Select a project Click the name of the service account that you want to disable Under Service account status, click Disable service account, then click Disableto confirm the change gcloud CLI Execute the gcloud iam service-accounts disable command to disable a service account Command: gcloud iam service-accounts disable SA_NAME@ PROJECT_ID.iam.gserviceaccount.com Output: Disabled service account SA_NAME@ PROJECT_ID.iam.gserviceaccount.com REST The serviceAccounts.disable method immediately disables a service account Before using any of the request data, make the following replacements: : Your Google Cloud project ID. Project IDs are alphanumeric strings, like PROJECT_ID my-project : The ID of your service account. This can either be the service account's email address in the form SA_ID , or the service account's unique numeric ID SA_NAME@ PROJECT_ID.iam.gserviceaccount.com HTTP method and URL: POST httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID:disable To send your request, expand one of these options: curl (Linux, macOS, or Cloud Shell) Execute the following command: curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json; charset=utf-8" -d "" "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID:disable" PowerShell (Windows) Execute the following command: $cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -Uri "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID:disable" | Select-Object -Expand Content API Explorer (browser) Open the method reference page The API Explorer panel opens on the right side of the page You can interact with this tool to send requests Complete any required fields and click **Execute** If successful, the response body will be empty C++ To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM C++ API reference documentation namespace iam = ::google::cloud::iam; std::string const& name) { iam::IAMClient client(iam::MakeIAMConnection google::iam::admin::v1::DisableServiceAccountRequest request; request.set_name(name); auto response = client.DisableServiceAccount(request); if (!response.ok throw std::runtime_error(response.message std::cout << "ServiceAccount successfully disabled. "; } C# To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM C# API reference documentation using System; using Google.Apis.Auth.OAuth2; using Google.Apis.Iam.v1; using Google.Apis.Iam.v1.Data; public partial class ServiceAccounts { public static void DisableServiceAccount(string email) { var credential = GoogleCredential.GetApplicationDefault() .CreateScoped(IamService.Scope.CloudPlatform); var service = new IamService(new IamService.Initializer { HttpClientInitializer = credentialvar request = new DisableServiceAccountRequest string resource = "projectsserviceAccounts/" + email; service.Projects.ServiceAccounts.Disable(request, resource).Execute Console.WriteLine("Disabled service account: " + email); } } Go To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Go API reference documentation import ( "context" "fmt" "io" iam "google.golang.org/api/iam/v1" ) // disableServiceAccount disables a service account. func disableServiceAccount(w io.Writer, email string) error { // email:= [email protected] ctx := context.Background() service, err := iam.NewService(ctx) if err != nil { return fmt.Errorf("iam.NewService: %v", err) } request := &iam.DisableServiceAccountRequest{} _, err = service.Projects.ServiceAccounts.Disable("projectsserviceAccountsemail, request).Do() if err != nil { return fmt.Errorf("Projects.ServiceAccounts.Disable: %v", err) } fmt.Fprintf(w, "Disabled service account: %v", email) return nil } Java To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Java API reference documentation import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.iam.v1.Iam; import com.google.api.services.iam.v1.IamScopes; import com.google.api.services.iam.v1.model.DisableServiceAccountRequest; 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 DisableServiceAccount { // Disables a service account. public static void disableServiceAccount(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: " + e.toString return; } String serviceAccountEmail = serviceAccountName ++ projectId + ".iam.gserviceaccount.com"; try { DisableServiceAccountRequest request = new DisableServiceAccountRequest service .projects() .serviceAccounts() .disable("projectsserviceAccounts/" + serviceAccountEmail, request) .execute System.out.println("Disabled service account: " + serviceAccountEmail); } catch (IOException e) { System.out.println("Unable to disable service account: " + e.toString } } private static Iam initService() throws GeneralSecurityException, IOException { // Use the Application Default Credentials strategy for authentication. For more info, see: // httpscloud.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 JacksonFactory.getDefaultInstance new HttpCredentialsAdapter(credential)) .setApplicationName("service-accounts") .build return service; } } Python To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Python API reference documentation import os from google.oauth2 import service_account import googleapiclient.discovery def disable_service_account(email): Disables a service account credentials = service_account.Credentials.from_service_account_file( filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS scopeshttpswww.googleapis.com/auth/cloud-platform service = googleapiclient.discovery.build( 'iam', 'v1', credentials=credentials) service.projectsserviceAccountsdisable( name='projectsserviceAccounts/' + email).execute() print("Disabled service account :" + email) ## Enabling a service account After enabling a disabled service account, applications will regain access to Google Cloud resources through that service account You can enable a disabled service account whenever you need to. If you attempt to enable an already enabled service account, it will have no effect Console In the Google Cloud console, go to the Service accountspage Select a project Click the name of the service account that you want to enable Under Service account status, click Enable service account, then click Enableto confirm the change gcloud CLI Execute the gcloud iam service-accounts enable command to enable a service account Command: gcloud iam service-accounts enable SA_NAME@ PROJECT_ID.iam.gserviceaccount.com Output: Enabled service account SA_NAME@ PROJECT_ID.iam.gserviceaccount.com REST The serviceAccounts.enable method enables a previously disabled service account Before using any of the request data, make the following replacements: : Your Google Cloud project ID. Project IDs are alphanumeric strings, like PROJECT_ID my-project : The ID of your service account. This can either be the service account's email address in the form SA_ID , or the service account's unique numeric ID SA_NAME@ PROJECT_ID.iam.gserviceaccount.com HTTP method and URL: POST httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID:enable To send your request, expand one of these options: curl (Linux, macOS, or Cloud Shell) Execute the following command: curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json; charset=utf-8" -d "" "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID:enable" PowerShell (Windows) Execute the following command: $cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -Uri "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID:enable" | Select-Object -Expand Content API Explorer (browser) Open the method reference page The API Explorer panel opens on the right side of the page You can interact with this tool to send requests Complete any required fields and click **Execute** If successful, the response body will be empty C++ To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM C++ API reference documentation namespace iam = ::google::cloud::iam; std::string const& name) { iam::IAMClient client(iam::MakeIAMConnection google::iam::admin::v1::EnableServiceAccountRequest request; request.set_name(name); auto response = client.EnableServiceAccount(request); if (!response.ok throw std::runtime_error(response.message std::cout << "ServiceAccount successfully enabled. "; } C# To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM C# API reference documentation using System; using Google.Apis.Auth.OAuth2; using Google.Apis.Iam.v1; using Google.Apis.Iam.v1.Data; public partial class ServiceAccounts { public static void EnableServiceAccount(string email) { var credential = GoogleCredential.GetApplicationDefault() .CreateScoped(IamService.Scope.CloudPlatform); var service = new IamService(new IamService.Initializer { HttpClientInitializer = credentialvar request = new EnableServiceAccountRequest string resource = "projectsserviceAccounts/" + email; service.Projects.ServiceAccounts.Enable(request, resource).Execute Console.WriteLine("Enabled service account: " + email); } } Go To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Go API reference documentation import ( "context" "fmt" "io" iam "google.golang.org/api/iam/v1" ) // enableServiceAccount enables a service account. func enableServiceAccount(w io.Writer, email string) error { // email:= [email protected] ctx := context.Background() service, err := iam.NewService(ctx) if err != nil { return fmt.Errorf("iam.NewService: %v", err) } request := &iam.EnableServiceAccountRequest{} _, err = service.Projects.ServiceAccounts.Enable("projectsserviceAccountsemail, request).Do() if err != nil { return fmt.Errorf("Projects.ServiceAccounts.Enable: %v", err) } fmt.Fprintf(w, "Enabled service account: %v", email) return nil } Java To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Java API reference documentation import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.iam.v1.Iam; import com.google.api.services.iam.v1.IamScopes; import com.google.api.services.iam.v1.model.EnableServiceAccountRequest; 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 EnableServiceAccount { // Enables a service account. public static void enableServiceAccount(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: " + e.toString return; } String serviceAccountEmail = serviceAccountName ++ projectId + ".iam.gserviceaccount.com"; try { EnableServiceAccountRequest request = new EnableServiceAccountRequest service .projects() .serviceAccounts() .enable("projectsserviceAccounts/" + serviceAccountEmail, request) .execute System.out.println("Enabled service account: " + serviceAccountEmail); } catch (IOException e) { System.out.println("Unable to enable service account: " + e.toString } } private static Iam initService() throws GeneralSecurityException, IOException { // Use the Application Default Credentials strategy for authentication. For more info, see: // httpscloud.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 JacksonFactory.getDefaultInstance new HttpCredentialsAdapter(credential)) .setApplicationName("service-accounts") .build return service; } } Python To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Python API reference documentation import os from google.oauth2 import service_account import googleapiclient.discovery def enable_service_account(email): Enables a service account credentials = service_account.Credentials.from_service_account_file( filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS scopeshttpswww.googleapis.com/auth/cloud-platform service = googleapiclient.discovery.build( 'iam', 'v1', credentials=credentials) service.projectsserviceAccountsenable( name='projectsserviceAccounts/' + email).execute() print("Enabled service account :" + email) ## Deleting a service account When you delete a service account, applications will no longer have access to Google Cloud resources through that service account. If you delete the default App Engine and Compute Engine service accounts, the instances will no longer have access to resources in the project Delete with caution; make sure your critical applications are no longer using a service account before deleting it. If you're not sure whether a service account is being used, we recommend disabling the service account before deleting it. Disabled service accounts can be easily re-enabled if they are still in use If you delete a service account, then create a new service account with the same name, the new service account is treated as a separate identity; it does not inherit the roles granted to the deleted service account. In contrast, when you delete a service account, then undelete it, the service account's identity does not change, and the service account retains its roles When a service account is deleted, its role bindings are not immediately removed; they are automatically purged from the system after a maximum of 60 days. Until that time, the service account appears in role bindings with a deleted: prefix and a ?uid= suffix, where `NUMERIC_ID` is a unique numeric ID for the service account `NUMERIC_ID` Deleted service accounts do not count towards your service account quota Console In the Google Cloud console, go to the Service accountspage Select a project Select the service account you want to delete, and then click Delete gcloud CLI Execute the gcloud iam service-accounts delete command to delete a service account Command: gcloud iam service-accounts delete SA_NAME@ PROJECT_ID.iam.gserviceaccount.com Output: Deleted service account SA_NAME@ PROJECT_ID.iam.gserviceaccount.com REST The serviceAccounts.delete method deletes a service account Before using any of the request data, make the following replacements: : Your Google Cloud project ID. Project IDs are alphanumeric strings, like PROJECT_ID my-project : The ID of your service account. This can either be the service account's email address in the form SA_ID , or the service account's unique numeric ID SA_NAME@ PROJECT_ID.iam.gserviceaccount.com HTTP method and URL: DELETE httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID To send your request, expand one of these options: curl (Linux, macOS, or Cloud Shell) Execute the following command: curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID" PowerShell (Windows) Execute the following command: $cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method DELETE ` -Headers $headers ` -Uri "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_ID" | Select-Object -Expand Content API Explorer (browser) Open the method reference page The API Explorer panel opens on the right side of the page You can interact with this tool to send requests Complete any required fields and click **Execute** If successful, the response body will be empty C++ To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM C++ API reference documentation namespace iam = ::google::cloud::iam; 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. "; } C# To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM C# API reference documentation 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 = credentialstring resource = "projectsserviceAccounts/" + email; service.Projects.ServiceAccounts.Delete(resource).Execute Console.WriteLine("Deleted service account: " + email); } } Go To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Go API reference documentation 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: %v", err) } _, err = service.Projects.ServiceAccounts.Delete("projectsserviceAccounts/" + email).Do() if err != nil { return fmt.Errorf("Projects.ServiceAccounts.Delete: %v", err) } fmt.Fprintf(w, "Deleted service account: %v", email) return nil } Java To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Java API reference documentation import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; 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: " + e.toString return; } String serviceAccountEmail = serviceAccountName ++ projectId + ".iam.gserviceaccount.com"; try { service .projects() .serviceAccounts() .delete("projectsserviceAccounts/" + serviceAccountEmail) .execute System.out.println("Deleted service account: " + serviceAccountEmail); } catch (IOException e) { System.out.println("Unable to delete service account: " + e.toString } } private static Iam initService() throws GeneralSecurityException, IOException { // Use the Application Default Credentials strategy for authentication. For more info, see: // httpscloud.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 JacksonFactory.getDefaultInstance new HttpCredentialsAdapter(credential)) .setApplicationName("service-accounts") .build return service; } } Python To learn how to install and use the client library for IAM, see IAM client libraries. For more information, see the IAM Python API reference documentation import os from google.oauth2 import service_account import googleapiclient.discovery def delete_service_account(email): Deletes a service account credentials = service_account.Credentials.from_service_account_file( filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS scopeshttpswww.googleapis.com/auth/cloud-platform service = googleapiclient.discovery.build( 'iam', 'v1', credentials=credentials) service.projectsserviceAccountsdelete( name='projectsserviceAccounts/' + email).execute() print('Deleted service account: ' + email) ## Undeleting a service account In some cases, you can use the undelete command to undelete a deleted service account. You can usually undelete a deleted service account if it meets these criteria: The service account was deleted less than 30 days ago After 30 days, IAM permanently removes the service account. Google Cloud cannot recover the service account after it is permanently removed, even if you file a support request There is no existing service account with the same name as the deleted service account For example, suppose that you accidentally delete the service account [email protected]. You still need a service account with that name, so you create a new service account with the same name, [email protected] The new service account does not inherit the permissions of the deleted service account. In effect, it is completely separate from the deleted service account. However, you cannot undelete the original service account, because the new service account has the same name To address this issue, delete the new service account, then try to undelete the original service account If you are not able to undelete the service account, you can create a new service account with the same name; revoke all of the roles from the deleted service account; and grant the same roles to the new service account. For details, see Policies with deleted principals Finding a deleted service account's numeric ID When you undelete a service account, you must provide its numeric ID. The numeric ID is a 21-digit number, such as 123456789012345678901, that uniquely identifies the service account. For example, if you delete a service account, then create a new service account with the same name, the original service account and the new service account will have different numeric IDs If you know that a binding in an allow policy includes the deleted service account, you can get the allow policy, then find the numeric ID in the allow policy. The numeric ID is appended to the name of the deleted service account. For example, in this allow policy, the numeric ID for the deleted service account is 123456789012345678901: { "version": 1, "etag": "BwUjMhCsNvY "bindings": [ { "members": [ "deleted:serviceAccount:[email protected]?uid=123456789012345678901 "role": "roles/iam.serviceAccountUser" }, ] } Numeric IDs are only appended to the names of deleted principals Alternatively, you can search your audit logs for the DeleteServiceAccount operation that deleted the service account: In the Google Cloud console, go to the Logs explorerpage In the query editor, enter the following query, replacing with the email address of your service account (for example, SERVICE_ACCOUNT_EMAIL [email protected]): resource.type="service_account" resource.labels.email_id=" SERVICE_ACCOUNT_EMAIL" "DeleteServiceAccount" If the service account was deleted more than an hour ago, click Last 1 hour, select a longer period of time from the drop-down list, then click Apply Click Run query. The Logs Explorer displays the DeleteServiceAccountoperations that affected service accounts with the name you specified Find and note the numeric ID of the deleted service account by doing one of the following: If the search results include only one DeleteServiceAccountoperation, find the numeric ID in the Unique IDfield of the Log fieldspane If the search results show more than one log, do the following: Find the correct log entry. To find the correct log entry, click theexpander arrow next to a log entry. Review the details of the log entry and determine whether the log entry shows the operation that you want to undo. Repeat this process until you find the correct log entry In the correct log entry, locate the service account's numeric ID. To locate the numeric ID, expand the log entry's protoPayloadfield, then find the resourceNamefield The numeric ID is everything after serviceAccountsin the resourceNamefield - - Undeleting the service account by numeric ID After you find the numeric ID for the deleted service account, you can try to undelete the service account gcloud CLI Execute the gcloud beta iam service-accounts undelete command to undelete a service account Command: 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_IDuniqueId: ' ACCOUNT_ID' REST The serviceAccounts.undelete method restores a deleted service account Before using any of the request data, make the following replacements: : Your Google Cloud project ID. Project IDs are alphanumeric strings, like PROJECT_ID my-project : The unique numeric ID of the service account SA_NUMERIC_ID HTTP method and URL: POST httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_NUMERIC_ID:undelete To send your request, expand one of these options: curl (Linux, macOS, or Cloud Shell) Execute the following command: curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json; charset=utf-8" -d "" "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_NUMERIC_ID:undelete" PowerShell (Windows) Execute the following command: $cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -Uri "httpsiam.googleapis.com/v1/projects/ PROJECT_ID/serviceAccounts/ SA_NUMERIC_ID:undelete" | Select-Object -Expand Content API Explorer (browser) Open the method reference page The API Explorer panel opens on the right side of the page You can interact with this tool to send requests Complete any required fields and click **Execute** If the account can be undeleted, you receive a 200 OK response code with details about the restored service account, like the following: { "restoredAccount": { "name": "projects/my-project/serviceAccounts/[email protected]", "projectId": "my-project", "uniqueId": "123456789012345678901", "email": "[email protected]", "displayName": "My service account", "etag": "BwUp3rVlzes "description": "A service account for running jobs in my project", "oauth2ClientId": "987654321098765432109" } } ## What's next - Learn how to create and manage service account keys - Review the process for granting IAM roles to all types of principals, including service accounts - Explore how you can use role recommendations to downscope permissions for all principals, including service accounts - Understand how to allow principals to impersonate service accounts ## 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