Skip to main content

Google Security Command Center

Google's Security Command Center service provides visibility and insights into your Google Cloud environment. You can bring bucket, compute instance, firewall, and security data from Google Cloud into Brinqa to construct a unified view of your attack surface and enhance your ability to mitigate potential risks.

This document details the information you must provide for the connector to authenticate with Google Cloud and how to obtain that information from Google Cloud. See create a data integration for step-by-step instructions on setting up the integration.

Required connection settings

When setting up a data integration, select Security Command Center from the Connector drop-down. If you cannot find the connector in the drop-down, make sure that you have installed it first. You must provide the following information to authenticate Google Cloud with Brinqa:

  • Scope: The relative name of the root asset in your Google Cloud environment. Only the following formats are supported:

    • An organization number, e.g.: "organizations/123".

    • A project ID, e.g.: "projects/my-project-id".

    • A project number, e.g.: "projects/12345".

      note

      Providing an organization number enables collecting assets from all associated projects, including any new projects added after you have set up the integration. But the credentials you provide must have organization level permissions. Follow the rest of this document for instructions.

  • Credentials: The full content of the JSON file that contains your service account key.

Enable the Cloud Asset API

The Security Command Center connector requires that you enable the Cloud Asset API on the specified scope.

Create a custom role for Brinqa

Google Cloud uses service accounts to authenticate and authorize API calls, but you can only create service accounts within a project. For the Security Command Center connector to collect assets from multiple projects, you must grant the service account organization level permissions through a custom Identity and Access Management (IAM) role.

To create a custom role with organization level permissions, follow these steps:

  1. Log in to the Google Cloud Console.

  2. Select the organization where you want the connector to collect assets.

  3. In the Navigation menu, select IAM & Admin > Roles.

  4. Click Create Role.

  5. Enter a name and description for your role.

  6. Click Add Permissions and add the following read-only permissions required by the connector:

    • cloudasset.viewer

    • securitycenter.findingsViewer

  7. Click Create.

Create a service account and grant organization level permissions

Since the service account must have organization level permissions for the Security Command Center connector to collect assets from all the projects within the organization, Brinqa recommends that you create a service account specifically for the connector.

To create a service account and grant the appropriate permissions, follow these steps:

  1. Log in to the Google Cloud Console.

  2. Select the project where you want to create the service account.

  3. In the Navigation menu, select IAM & Admin > Service Accounts.

  4. Click Create Service Account.

  5. Enter a name and description for the service account.

  6. Skip the optional steps and click Done.

  7. View the service account details and save the email address for later use.

  8. Select the organization where you have created the custom role.

  9. In the Navigation menu, select IAM & Admin.

  10. Click Grant Access.

  11. Click New principals and paste in the email taken from the service account details page.

  12. Click Select a role and select the custom role created previously.

    gcp grant access

  13. Click Save.

Obtain your service account key

If you have completed the previous steps successfully, your service account should have the minimum permissions that the Security Command Center connector needs to collect assets from all the projects within your organization.

To obtain the service account key, follow these steps:

  1. Log in to the Google Cloud Console.

  2. Select your project where the service account resides.

  3. In the Navigation menu, select IAM & Admin > Service Accounts.

  4. Select the service account and click the Keys tab.

  5. Click Add Key > Create new key.

  6. Keep JSON as key type and click Create.

    The generated private key file is saved to your computer automatically.

Additional settings

The Security Command Center connector contains an additional option for specific configuration:

  • Page size: The maximum number of records to get per API request. The default setting is 1000. It is not recommended to go over 1000.

Types of data to retrieve

The Security Command Center connector can retrieve the following types of data from Google Cloud:

Table 1: Data retrieved from Google Cloud

Connector ObjectRequiredMaps to Data Model
BucketYesCloud Resource
Compute InstanceYesHost
FindingYesViolation
Finding DefinitionYesViolation Definition
FirewallYesCloud Resource
info

For detailed steps on how to view the data retrieved from Google Cloud in the Brinqa Platform, see How to view your data.

Attribute mappings

Click the tabs below to view the mappings between the source and the Brinqa data model attributes.

Bucket

Table 2: Bucket attribute mappings

Source Field NameMaps to Attribute
ACLLocal variable
ancestorsLocal variable
BILLINGLocal variable
DEFAULT_OBJECT_ACLLocal variable
ENCRYPTIONLocal variable
ETAGtags, Local variable
iamConfiguration.bucketPolicyOnlyLocal variable
iamConfiguration.publicAccessPreventionLocal variable
iamConfiguration.uniformBucketLevelAccessLocal variable
KINDcategories
LABELStags, Local variable
LAST_MODIFIEDsourceLastModified
LIFESTYLELocal variable
LOCATIONlocation
LOCATION_TYPELocal variable
LOGGINGLocal variable
NAMEname
OWNERLocal variable
RETENTION_POLICYLocal variable
STORAGE_CLASSLocal variable
SYS_IDuid
timeCreatedfirstSeen
VERSIONINGLocal variable
versioncurrentVersion
WEBSITEreferences, name
ZONE_AFFINITYLocal variable
info

Local variable indicates that the field is processed within a specific context, such as a particular workflow or calculation. Unlike other attributes, local variables aren't mapped to the unified data models. They only exist on the source data model.

Compute Instance

Table 3: Compute Instance attribute mappings

Source Field NameMaps to Attribute
ancestorsLocal variable
assetTypecategories
AUTO_RESTARTLocal variable
CAN_IP_FORWARDLocal variable
confidentialInstanceConfigLocal variable
consumeReservationTypeLocal variable
CPU_PLATFORMLocal variable
creationTimestampfirstSeen
DELETE_PROTECTIONLocal variable
deletionProtectionLocal variable
DESCRIPTIONdescription
disksLocal variable
enableDisplayLocal variable
enableIntegrityMonitoringLocal variable
enableSecureBootLocal variable
enableVtpmLocal variable
INSTANCE_IDinstanceId
lastStartTimestampLocal variable
lastStopTimestampLocal variable
MACHINE_TYPELocal variable
NAMEname
NAT_IPLocal variable
networkInterfaces.fingerprintLocal variable
networkInterfaces.stackTypeLocal variable
NETWORKLocal variable
NETWORK_IPipAddresses, publicIpAddresses, privateIpAddresses
NETWORK_TAGStags, Local variable
NETWORK_TIERLocal variable
onHostMaintenanceLocal variable
PREEMPTIBLELocal variable
provisioningModelLocal variable
selfLinkurl
serviceAccounts.emailLocal variable
startRestrictedLocal variable
STATUSstatus, sourceStatus
SUBNETLocal variable
SYS_IDuid
versioncurrentVersion
ZONELocal variable
info

Local variable indicates that the field is processed within a specific context, such as a particular workflow or calculation. Unlike other attributes, local variables aren't mapped to the unified data models. They only exist on the source data model.

Finding

Table 4: Finding attribute mappings

Source Field NameMaps to Attribute
ACTIVATION_TRIGGERLocal variable
AFFECTED_ASSETtargets, Local variable
CATEGORYtype
CREATED_ATsourceCreatedDate
EVENT_TIMELocal variable
PROJECTprojects
RESOURCE_PATHpath
STATEstatus, sourceStatus, statusCategory
SYS_IDuid
info

Local variable indicates that the field is processed within a specific context, such as a particular workflow or calculation. Unlike other attributes, local variables aren't mapped to the unified data models. They only exist on the source data model.

Finding Definition

Table 5: Finding Definition attribute mappings

Source Field NameMaps to Attribute
CATEGORYuid
DESCRIPTIONdescription
EXCEPTION_INSTRUCTIONSLocal variable
REMEDIATIONrecommendation
SCANNER_NAMELocal variable
SEVERITYseverity, sourceSeverity, severityScore
TITLEname
info

Local variable indicates that the field is processed within a specific context, such as a particular workflow or calculation. Unlike other attributes, local variables aren't mapped to the unified data models. They only exist on the source data model.

Firewall

Table 6: Firewall attribute mappings

Source Field NameMaps to Attribute
allowed.portsLocal variable
allowed.IPProtocolprotocol
ancestorsLocal variable
assetTypecategories
creationTimestampfirstSeen
DESCRIPTIONdescription
DISABLEDLocal variable
DIRECTIONLocal variable
LAST_MODIFIEDsourceLastModified
LOG_CONFIGLocal variable
NAMEname
NETWORKLocal variable
PRIORITYLocal variable
selfLinkurl
SOURCE_RANGESLocal variable
SYS_IDuid
targetTagstags
versioncurrentVersion
info

Local variable indicates that the field is processed within a specific context, such as a particular workflow or calculation. Unlike other attributes, local variables aren't mapped to the unified data models. They only exist on the source data model.

Operation options

The Security Command Center connector supports the following operation options. See connector operation options for information about how to apply them.

Table 7: Security Command Center connector operation options

Connector ObjectOptionAll Possible valuesDescriptionExample
FindingcategoryFinding class unspecified, Misconfiguration, Observation, SCC Error, Threat, VulnerabilityRetrieve findings based on the specified category, as determined by Google.Key: category Value: Threat. This key and value combination only retrieves findings that are threats.
severityUnspecified, Low, Medium, High, CriticalA comma-separated list of finding severities. Retrieve findings based on the specified severity, as determined by Google.Key: severity Value: Critical. This key and value combination only retrieves critical findings.
stateActive, InactiveA comma-separated list of finding states. Retrieve findings based on the specified state, as determined by Google.Key: state Value: Active. This key and value combination only retrieves active findings.
note

The option keys and values are case-sensitive as they are shown in this documentation.

APIs

The Security Command Center connector uses the Cloud Asset Inventory client libraries and Security Command Center API to interact with Google Security Command Center. Specifically, it uses the following client libraries:

Bucket
AssetServiceClient client = createAssetServiceClient();
ListAssetsRequest.Builder bld = ListAssetsRequest.newBuilder()
.setParent(scope)
.setPageSize(pageSize)
.setContentType(ContentType.RESOURCE)
.addAssetTypes(assetType);
// Add asset type "storage.googleapis.com/Bucket" to filter
// Call listAssets API with assetType filter
ListAssetsPagedResponse response = client.listAssets(bld.build());
Computer Instance
AssetServiceClient client = createAssetServiceClient();
ListAssetsRequest.Builder bld = ListAssetsRequest.newBuilder()
.setParent(scope)
.setPageSize(pageSize)
.setContentType(ContentType.RESOURCE)
.addAssetTypes(assetType);
// Add asset type "compute.googleapis.com/Instance" to filter
// Call listAssets API with assetType filter
ListAssetsPagedResponse response = client.listAssets(bld.build());
Finding
SecurityCenterClient client = SecurityCenterClient.create();
ListFindingsRequest.Builder request =
ListFindingsRequest.newBuilder().setParent(sourceName.toString()).setFilter(filter);
// Call the listFindings API.
ListFindingsPagedResponse response = client.listFindings(request.build());
Finding Definition
SecurityCenterClient client = SecurityCenterClient.create();
GroupFindingsRequest.Builder bld =
GroupFindingsRequest.newBuilder().setParent(sourceName.toString()).setGroupBy("category").setPageSize(1000);
// Call the GroupFinding API.
GroupFindingsPagedResponse response = client.groupFindings(bld.build());
// Categories are listed from GroupFindingsPagedResponse.
// Then set category as filter on listFindings API
ListFindingsPagedResponse response = client.listFindings(request.build());
Firewall
AssetServiceClient client = createAssetServiceClient();
ListAssetsRequest.Builder bld = ListAssetsRequest.newBuilder()
.setParent(scope)
.setPageSize(pageSize)
.setContentType(ContentType.RESOURCE)
.addAssetTypes(assetType);
// Add asset type "compute.googleapis.com/Firewall" to filter
// Call listAssets API with assetType filter
ListAssetsPagedResponse response = client.listAssets(bld.build());

Changelog

The Security Command Center connector has undergone the following changes:

3.1.0