security-policies/bundle/compliance/cis_gcp/rules/cis_1_5/data.yaml (114 lines of code) (raw):

metadata: id: c13f49ab-845e-5a89-a05e-6a7c7b23f628 name: Ensure That Service Account Has No Admin Privileges profile_applicability: '* Level 1' description: |- A service account is a special Google account that belongs to an application or a VM, instead of to an individual end-user. The application uses the service account to call the service's Google API so that users aren't directly involved. It's recommended not to use admin access for ServiceAccount. rationale: |- Service accounts represent service-level security of the Resources (application or a VM) which can be determined by the roles assigned to it. Enrolling ServiceAccount with Admin rights gives full access to an assigned application or a VM. A ServiceAccount Access holder can perform critical actions like delete, update change settings, etc. without user intervention. For this reason, it's recommended that service accounts not have Admin rights. audit: |- **From Google Cloud Console** 1. Go to `IAM & admin/IAM` using `https://console.cloud.google.com/iam-admin/iam` 2. Go to the `Members` 3. Ensure that there are no `User-Managed user created service account(s)` with roles containing `*Admin` or `*admin` or role matching `Editor` or role matching `Owner` **From Google Cloud CLI** 4. Get the policy that you want to modify, and write it to a JSON file: ``` gcloud projects get-iam-policy PROJECT_ID --format json > iam.json ``` 5. The contents of the JSON file will look similar to the following. Note that `role` of members group associated with each `serviceaccount` does not contain `*Admin` or `*admin` or does not match `roles/editor` or does not match `roles/owner`. This recommendation is only applicable to `User-Managed user-created` service accounts. These accounts have the nomenclature: `SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com`. Note that some Google-managed, Google-created service accounts have the same naming format, and should be excluded (e.g., `appsdev-apps-dev-script-auth@system.gserviceaccount.com` which needs the Owner role). **Sample Json output:** { "bindings": [ { "members": [ "serviceAccount:our-project-123@appspot.gserviceaccount.com", ], "role": "roles/appengine.appAdmin" }, { "members": [ "user:email1@gmail.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:our-project-123@appspot.gserviceaccount.com", "serviceAccount:123456789012-compute@developer.gserviceaccount.com" ], "role": "roles/editor" } ], "etag": "BwUjMhCsNvY=", "version": 1 } remediation: |- **From Google Cloud Console** 1. Go to `IAM & admin/IAM` using `https://console.cloud.google.com/iam-admin/iam` 2. Go to the `Members` 3. Identify `User-Managed user created` service account with roles containing `*Admin` or `*admin` or role matching `Editor` or role matching `Owner` 4. Click the `Delete bin` icon to remove the role from the member (service account in this case) **From Google Cloud CLI** ``` gcloud projects get-iam-policy PROJECT_ID --format json > iam.json ``` 5. Using a text editor, Remove `Role` which contains `roles/*Admin` or `roles/*admin` or matched `roles/editor` or matches 'roles/owner`. Add a role to the bindings array that defines the group members and the role for those members. For example, to grant the role roles/appengine.appViewer to the `ServiceAccount` which is roles/editor, you would change the example shown below as follows: { "bindings": [ { "members": [ "serviceAccount:our-project-123@appspot.gserviceaccount.com", ], "role": "roles/appengine.appViewer" }, { "members": [ "user:email1@gmail.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:our-project-123@appspot.gserviceaccount.com", "serviceAccount:123456789012-compute@developer.gserviceaccount.com" ], "role": "roles/editor" } ], "etag": "BwUjMhCsNvY=" } 6. Update the project's IAM policy: ``` gcloud projects set-iam-policy PROJECT_ID iam.json ``` impact: |- Removing `*Admin` or `*admin` or `Editor` or `Owner` role assignments from service accounts may break functionality that uses impacted service accounts. Required role(s) should be assigned to impacted service accounts in order to restore broken functionalities. default_value: '' references: |- 1. https://cloud.google.com/sdk/gcloud/reference/iam/service-accounts/ 2. https://cloud.google.com/iam/docs/understanding-roles 3. https://cloud.google.com/iam/docs/understanding-service-accounts section: Identity and Access Management version: '1.0' tags: - CIS - GCP - CIS 1.5 - Identity and Access Management benchmark: name: CIS Google Cloud Platform Foundation version: v2.0.0 id: cis_gcp rule_number: '1.5' posture_type: cspm