This guide walks you through using the Security Command Center API to create a source to generate findings. When you add a source, Security Command Center creates appropriate sources and assigns them the relevant permissions.
The IAM roles for Security Command Center can be granted at the organization, folder, or project level. Your ability to view, edit, create, or update findings, assets, and security sources depends on the level for which you are granted access. To learn more about Security Command Center roles, see Access control .
Before you begin
Before you set up a source, you need to authenticate with the Security Command Center API .
Creating a source
This example shows how to create a source with a specific display name and description that is used in Security Command Center.
The server automatically assigns an ID to the source.
REST
In the API, make a request to the organizations.sources.create
method. The request body contains an instance of Source
.
POST https://securitycenter.googleapis.com/v2/organizations/ ORGANIZATION_ID /sources { "name": " SOURCE_NAME ", "description": " SOURCE_DESCRIPTION ", "displayName": " DISPLAY_NAME " }
Replace the following:
-
ORGANIZATION_ID
: your organization ID. -
SOURCE_NAME
: the name of the source. -
SOURCE_DESCRIPTION
: a description of the source (max: 1,024 characters). -
DISPLAY_NAME
: the display name of the source (between one and 64 characters).
Go
import
(
"context"
"fmt"
"io"
securitycenter
"cloud.google.com/go/securitycenter/apiv2"
"cloud.google.com/go/securitycenter/apiv2/securitycenterpb"
)
// createSource creates a new source for organization orgID. orgID is
// the numeric identifier of the organization
func
createSource
(
w
io
.
Writer
,
orgID
string
)
error
{
// orgID := "12321311"
// Instantiate a context and a security service client to make API calls.
ctx
:=
context
.
Background
()
client
,
err
:=
securitycenter
.
NewClient
(
ctx
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"securitycenter.NewClient: %w"
,
err
)
}
defer
client
.
Close
()
// Closing the client safely cleans up background resources.
req
:=
& securitycenterpb
.
CreateSourceRequest
{
Source
:
& securitycenterpb
.
Source
{
DisplayName
:
"Customized Display Name"
,
Description
:
"A new custom source that does X"
,
},
Parent
:
fmt
.
Sprintf
(
"organizations/%s"
,
orgID
),
}
source
,
err
:=
client
.
CreateSource
(
ctx
,
req
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"CreateSource: %w"
,
err
)
}
fmt
.
Fprintf
(
w
,
"New source created: %s\n"
,
source
.
Name
)
fmt
.
Fprintf
(
w
,
"Display Name: %s\n"
,
source
.
DisplayName
)
return
nil
}
Java
import
com.google.cloud.securitycenter.v2. CreateSourceRequest
;
import
com.google.cloud.securitycenter.v2. OrganizationName
;
import
com.google.cloud.securitycenter.v2. SecurityCenterClient
;
import
com.google.cloud.securitycenter.v2. Source
;
import
java.io.IOException
;
public
class
CreateSource
{
public
static
void
main
(
String
[]
args
)
throws
IOException
{
// TODO: Replace the sample resource name
// organizationId: Google Cloud Organization id.
String
organizationId
=
"{google-cloud-organization-id}"
;
createSource
(
organizationId
);
}
/**
* Creates a new "source" in the Security Command Center.
*/
public
static
Source
createSource
(
String
organizationId
)
throws
IOException
{
try
(
SecurityCenterClient
client
=
SecurityCenterClient
.
create
())
{
// Start setting up a request to create a source in an organization.
OrganizationName
organizationName
=
OrganizationName
.
of
(
organizationId
);
Source
source
=
Source
.
newBuilder
()
.
setDisplayName
(
"Custom display name"
)
.
setDescription
(
"A source that does X"
)
.
build
();
CreateSourceRequest
createSourceRequest
=
CreateSourceRequest
.
newBuilder
()
.
setParent
(
organizationName
.
toString
())
.
setSource
(
source
)
.
build
();
// The source is not visible in the Security Command Center dashboard
// until it generates findings.
Source
response
=
client
.
createSource
(
createSourceRequest
);
return
response
;
}
}
}
Node.js
// Import the Google Cloud client library.
const
{
SecurityCenterClient
}
=
require
(
' @google-cloud/security-center
'
).
v2
;
// Create a new Security Center client
const
client
=
new
SecurityCenterClient
();
// TODO(developer): Update for your own environment.
const
organizationId
=
'1081635000895'
;
// Resource name of the new source's parent. Format is:
// "organizations/[organization_id]".
const
parent
=
client
.
organizationPath
(
organizationId
);
// The source object.
const
source
=
{
displayName
:
'Customized Display Name V2'
,
description
:
'A new custom source that does X'
,
};
// Build the create source request.
const
createSourceRequest
=
{
parent
,
source
,
};
// The source is not visible in the Security Command Center dashboard
// until it generates findings.
// Call the API
async
function
createSource
()
{
const
[
source
]
=
await
client
.
createSource
(
createSourceRequest
);
console
.
log
(
'New Source created: %j'
,
source
);
}
await
createSource
();
Python
def
create_source
(
organization_id
)
-
> Dict
:
"""
Create a new findings source
Args:
organization_id: organization_id is the numeric ID of the organization. e.g.:organization_id = "111122222444"
Returns:
Dict: returns the created findings source details.
"""
from
google.cloud
import
securitycenter_v2
client
=
securitycenter_v2
.
SecurityCenterClient
()
org_name
=
f
"organizations/
{
organization_id
}
"
response
=
client
.
create_source
(
request
=
{
"parent"
:
org_name
,
"source"
:
{
"display_name"
:
"Customized Display Name"
,
"description"
:
"A new custom source that does X"
,
},
}
)
print
(
f
"Created Source:
{
response
.
name
}
"
)
return
response
The source is not visible in the Security Command Center console until it generates findings. You can verify it was created by following the instructions in Get a specific source .
Updating a source
You can update a source's display name and description after it's created. You can also use a field mask to update only one field. The following example uses a field mask to only update the display name, leaving the description unchanged.
REST
In the API, make a request to the organizations.sources.patch
method.
The request body contains an instance of Source
.
PATCH https://securitycenter.googleapis.com/v2/organizations/ ORGANIZATION_ID /sources/ SOURCE_ID ?updateMask= displayName -d { "description": " SOURCE_DESCRIPTION ", "displayName": " DISPLAY_NAME ", }
Replace the following:
-
ORGANIZATION_ID
: your organization ID. -
SOURCE_ID
: the source ID; to learn how to find a source ID, see Getting the source ID . -
SOURCE_DESCRIPTION
: a description of the source (max: 1024 characters). -
DISPLAY_NAME
: the display name of the source (between one and 64 characters).
Go
import
(
"context"
"fmt"
"io"
securitycenter
"cloud.google.com/go/securitycenter/apiv2"
"cloud.google.com/go/securitycenter/apiv2/securitycenterpb"
"google.golang.org/genproto/protobuf/field_mask"
)
// updateSource changes a sources display name to "New Display Name" for a
// specific source. sourceName is the full resource name of the source to be
// updated.
func
updateSource
(
w
io
.
Writer
,
sourceName
string
)
error
{
// sourceName := "organizations/111122222444/sources/1234"
// Instantiate a context and a security service client to make API calls.
ctx
:=
context
.
Background
()
client
,
err
:=
securitycenter
.
NewClient
(
ctx
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"securitycenter.NewClient: %w"
,
err
)
}
defer
client
.
Close
()
// Closing the client safely cleans up background resources.
req
:=
& securitycenterpb
.
UpdateSourceRequest
{
Source
:
& securitycenterpb
.
Source
{
Name
:
sourceName
,
DisplayName
:
"New Display Name"
,
},
// Only update the display name field (if not set all mutable
// fields of the source will be updated.
UpdateMask
:
& field_mask
.
FieldMask
{
Paths
:
[]
string
{
"display_name"
},
},
}
source
,
err
:=
client
.
UpdateSource
(
ctx
,
req
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"UpdateSource: %w"
,
err
)
}
fmt
.
Fprintf
(
w
,
"Source Name: %s, "
,
source
.
Name
)
fmt
.
Fprintf
(
w
,
"Display name: %s, "
,
source
.
DisplayName
)
fmt
.
Fprintf
(
w
,
"Description: %s\n"
,
source
.
Description
)
return
nil
}
Java
import
com.google.cloud.securitycenter.v2. SecurityCenterClient
;
import
com.google.cloud.securitycenter.v2. Source
;
import
com.google.cloud.securitycenter.v2. SourceName
;
import
com.google.cloud.securitycenter.v2. UpdateSourceRequest
;
import
com.google.protobuf. FieldMask
;
import
java.io.IOException
;
public
class
UpdateSource
{
public
static
void
main
(
String
[]
args
)
throws
IOException
{
// TODO: Replace the below variables.
// organizationId: Google Cloud Organization id.
String
organizationId
=
"{google-cloud-organization-id}"
;
// Specify the source-id.
String
sourceId
=
"{source-id}"
;
updateSource
(
organizationId
,
sourceId
);
}
// Demonstrates how to update a source.
public
static
Source
updateSource
(
String
organizationId
,
String
sourceId
)
throws
IOException
{
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests.
try
(
SecurityCenterClient
client
=
SecurityCenterClient
.
create
())
{
// Start setting up a request to get a source.
SourceName
sourceName
=
SourceName
.
ofOrganizationSourceName
(
organizationId
,
sourceId
);
Source
source
=
Source
.
newBuilder
()
.
setDisplayName
(
"Updated Display Name"
)
.
setName
(
sourceName
.
toString
())
.
build
();
// Set the update mask to specify which properties should be updated.
// If empty, all mutable fields will be updated.
// For more info on constructing field mask path, see the proto or:
// https://cloud.google.com/java/docs/reference/protobuf/latest/com.google.protobuf.FieldMask
FieldMask
updateMask
=
FieldMask
.
newBuilder
()
.
addPaths
(
"display_name"
)
.
build
();
UpdateSourceRequest
request
=
UpdateSourceRequest
.
newBuilder
()
.
setSource
(
source
)
.
setUpdateMask
(
updateMask
)
.
build
();
// Call the API.
Source
response
=
client
.
updateSource
(
request
);
System
.
out
.
println
(
"Updated Source: "
+
response
);
return
response
;
}
}
}
Node.js
// npm install '@google-cloud/security-center'
const
{
SecurityCenterClient
}
=
require
(
' @google-cloud/security-center
'
).
v2
;
const
client
=
new
SecurityCenterClient
();
// TODO(developer): Update the following for your own environment.
const
organizationId
=
'1081635000895'
;
const
location
=
'global'
;
async
function
createSampleFinding
()
{
const
uuid
=
require
(
'uuid'
);
const
[
source
]
=
await
client
.
createSource
({
source
:
{
displayName
:
'Customized Display Name V2'
,
description
:
'A new custom source that does X'
,
},
parent
:
client
.
organizationPath
(
organizationId
),
});
const
sourceId
=
source
.
name
.
split
(
'/'
)[
3
];
// Resource name of the new finding's parent. Examples:
// - `organizations/[organization_id]/sources/[source_id]`
// - `organizations/[organization_id]/sources/[source_id]/locations/[location_id]`
const
parent
=
`organizations/
${
organizationId
}
/sources/
${
sourceId
}
/locations/
${
location
}
`
;
// The resource this finding applied to. The Cloud Security Command Center UI can link the
// findings for a resource to the corresponding asset of a resource if there are matches.
const
resourceName
=
`//cloudresourcemanager.googleapis.com/organizations/
${
organizationId
}
`
;
// Unique identifier provided by the client within the parent scope.
// It must be alphanumeric and less than or equal to 32 characters and
// greater than 0 characters in length.
const
findingId
=
uuid
.
v4
().
replace
(
/-/g
,
''
);
// Get the current timestamp.
const
eventDate
=
new
Date
();
// Finding category.
const
category
=
'MEDIUM_RISK_ONE'
;
// Build the finding request object.
const
createFindingRequest
=
{
parent
:
parent
,
findingId
:
findingId
,
finding
:
{
resourceName
,
category
,
state
:
'ACTIVE'
,
// The time associated with discovering the issue.
eventTime
:
{
seconds
:
Math
.
floor
(
eventDate
.
getTime
()
/
1000
),
nanos
:
(
eventDate
.
getTime
()
%
1000
)
*
1e6
,
},
},
};
await
client
.
createFinding
(
createFindingRequest
);
return
sourceId
;
}
const
sourceId
=
await
createSampleFinding
();
/**
* Required. The source resource to update.
*/
const
sourceName
=
client
.
organizationSourcePath
(
organizationId
,
sourceId
);
// Set the update mask to specify which properties should be updated.
// If empty, all mutable fields will be updated.
// For more info on constructing field mask path, see the proto or:
// https://cloud.google.com/java/docs/reference/protobuf/latest/com.google.protobuf.FieldMask
const
updateMask
=
{
paths
:
[
'display_name'
],
};
// Build the request.
const
source
=
{
name
:
sourceName
,
displayName
:
'New Display Name'
,
};
async
function
updateSource
()
{
const
[
response
]
=
await
client
.
updateSource
({
updateMask
,
source
});
console
.
log
(
'Updated Source: %j'
,
response
);
}
await
updateSource
();
Python
def
update_source
(
source_name
)
-
> Dict
:
"""
Updates a source's display name.
Args:
source_name: is the resource path for a source that has been created
Returns:
Dict: returns the details of updated source.
"""
from
google.cloud
import
securitycenter_v2
from
google.protobuf
import
field_mask_pb2
client
=
securitycenter_v2
.
SecurityCenterClient
()
# Field mask to only update the display name.
field_mask
=
field_mask_pb2
.
FieldMask
(
paths
=
[
"display_name"
])
# 'source_name' is the resource path for a source that has been
# created previously (you can use list_sources to find a specific one).
# Its format is:
# source_name = "organizations/{organization_id}/sources/{source_id}"
# e.g.:
# source_name = "organizations/111122222444/sources/1234"
updated
=
client
.
update_source
(
request
=
{
"source"
:
{
"name"
:
source_name
,
"display_name"
:
"Updated Display Name"
},
"update_mask"
:
field_mask
,
}
)
print
(
f
"Updated Source:
{
updated
}
"
)
return
updated
Get a specific source
Verify that a source is created or updated appropriately by querying Security Command Center with the source's absolute resource name:
gcloud
gcloud scc sources describe ORGANIZATION_ID --source = SOURCE_ID
Replace the following:
-
ORGANIZATION_ID
: your organization ID. -
SOURCE_ID
: the source ID.
REST
In the API, make a request to the organizations.sources.get
method:
GET https://securitycenter.googleapis.com/v2/organizations/ ORGANIZATION_ID /sources/ SOURCE_ID
Replace the following:
-
ORGANIZATION_ID
: your organization ID. -
SOURCE_ID
: the source ID.
Go
import
(
"context"
"fmt"
"io"
securitycenter
"cloud.google.com/go/securitycenter/apiv2"
"cloud.google.com/go/securitycenter/apiv2/securitycenterpb"
)
// getSource retrieves a source by its resource name and print it to w.
// sourceName is the full resource name of the source to be updated.
func
getSource
(
w
io
.
Writer
,
sourceName
string
)
error
{
// sourceName := "organizations/111122222444/sources/1234"
// Instantiate a context and a security service client to make API calls.
ctx
:=
context
.
Background
()
client
,
err
:=
securitycenter
.
NewClient
(
ctx
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"securitycenter.NewClient: %w"
,
err
)
}
defer
client
.
Close
()
// Closing the client safely cleans up background resources.
req
:=
& securitycenterpb
.
GetSourceRequest
{
Name
:
sourceName
,
}
source
,
err
:=
client
.
GetSource
(
ctx
,
req
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"GetSource: %w"
,
err
)
}
fmt
.
Fprintf
(
w
,
"Source: %v\n"
,
source
.
Name
)
fmt
.
Fprintf
(
w
,
"Display Name: %v\n"
,
source
.
DisplayName
)
fmt
.
Fprintf
(
w
,
"Description: %v\n"
,
source
.
Description
)
return
nil
}
Java
import
com.google.cloud.securitycenter.v2. GetSourceRequest
;
import
com.google.cloud.securitycenter.v2. SecurityCenterClient
;
import
com.google.cloud.securitycenter.v2. Source
;
import
com.google.cloud.securitycenter.v2. SourceName
;
import
java.io.IOException
;
public
class
GetSource
{
public
static
void
main
(
String
[]
args
)
throws
IOException
{
// TODO: Replace the below variables.
// organizationId: Google Cloud Organization id.
String
organizationId
=
"{google-cloud-organization-id}"
;
// Specify the source-id.
String
sourceId
=
"{source-id}"
;
getSource
(
organizationId
,
sourceId
);
}
// Demonstrates how to retrieve a specific source.
public
static
Source
getSource
(
String
organizationId
,
String
sourceId
)
throws
IOException
{
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests.
try
(
SecurityCenterClient
client
=
SecurityCenterClient
.
create
())
{
// Start setting up a request to get a source.
SourceName
sourceName
=
SourceName
.
ofOrganizationSourceName
(
organizationId
,
sourceId
);
GetSourceRequest
request
=
GetSourceRequest
.
newBuilder
()
.
setName
(
sourceName
.
toString
())
.
build
();
// Call the API.
Source
response
=
client
.
getSource
(
request
);
System
.
out
.
println
(
"Source: "
+
response
);
return
response
;
}
}
}
Node.js
// Imports the Google Cloud client library.
const
{
SecurityCenterClient
}
=
require
(
' @google-cloud/security-center
'
).
v2
;
// Create a Security Center client
const
client
=
new
SecurityCenterClient
();
// TODO(developer): Update the following for your own environment.
const
organizationId
=
'1081635000895'
;
const
location
=
'global'
;
async
function
createSampleFinding
()
{
const
uuid
=
require
(
'uuid'
);
const
[
source
]
=
await
client
.
createSource
({
source
:
{
displayName
:
'Customized Display Name V2'
,
description
:
'A new custom source that does X'
,
},
parent
:
client
.
organizationPath
(
organizationId
),
});
const
sourceId
=
source
.
name
.
split
(
'/'
)[
3
];
// Resource name of the new finding's parent. Examples:
// - `organizations/[organization_id]/sources/[source_id]`
// - `organizations/[organization_id]/sources/[source_id]/locations/[location_id]`
const
parent
=
`organizations/
${
organizationId
}
/sources/
${
sourceId
}
/locations/
${
location
}
`
;
// The resource this finding applied to. The Cloud Security Command Center UI can link the
// findings for a resource to the corresponding asset of a resource if there are matches.
const
resourceName
=
`//cloudresourcemanager.googleapis.com/organizations/
${
organizationId
}
`
;
// Unique identifier provided by the client within the parent scope.
// It must be alphanumeric and less than or equal to 32 characters and
// greater than 0 characters in length.
const
findingId
=
uuid
.
v4
().
replace
(
/-/g
,
''
);
// Get the current timestamp.
const
eventDate
=
new
Date
();
// Finding category.
const
category
=
'MEDIUM_RISK_ONE'
;
// Build the finding request object.
const
createFindingRequest
=
{
parent
:
parent
,
findingId
:
findingId
,
finding
:
{
resourceName
,
category
,
state
:
'ACTIVE'
,
// The time associated with discovering the issue.
eventTime
:
{
seconds
:
Math
.
floor
(
eventDate
.
getTime
()
/
1000
),
nanos
:
(
eventDate
.
getTime
()
%
1000
)
*
1e6
,
},
},
};
await
client
.
createFinding
(
createFindingRequest
);
return
sourceId
;
}
const
sourceId
=
await
createSampleFinding
();
// Relative resource name of the source. Its format is
// "organizations/[organization_id]/source/[source_id]".
const
name
=
`organizations/
${
organizationId
}
/sources/
${
sourceId
}
`
;
// Build the request.
const
getSourceRequest
=
{
name
,
};
async
function
getSource
()
{
// Call the API.
const
[
source
]
=
await
client
.
getSource
(
getSourceRequest
);
console
.
log
(
'Source: %j'
,
source
);
}
await
getSource
();
Python
def
get_source
(
source_name
)
-
> Dict
:
"""
Gets the details of an existing source.
Args:
source_name: is the resource path for a source that has been created
Returns:
Dict: returns the details of existing source.
"""
from
google.cloud
import
securitycenter_v2
client
=
securitycenter_v2
.
SecurityCenterClient
()
# 'source_name' is the resource path for a source that has been
# created previously (you can use list_sources to find a specific one).
# Its format is:
# source_name = "organizations/{organization_id}/sources/{source_id}"
# e.g.:
# source_name = "organizations/111122222444/sources/1234"
source
=
client
.
get_source
(
request
=
{
"name"
:
source_name
})
print
(
f
"Source:
{
source
}
"
)
return
source
Listing sources
Security Command Center lets you list a specific source, or all sources available in an organization:
REST
In the API, make a request to the organizations.sources.list
method:
GET https://securitycenter.googleapis.com/v2/organizations/ ORGANIZATION_ID /sources
Replace the following:
-
ORGANIZATION_ID
: your organization ID.
Go
import
(
"context"
"fmt"
"io"
securitycenter
"cloud.google.com/go/securitycenter/apiv2"
"cloud.google.com/go/securitycenter/apiv2/securitycenterpb"
"google.golang.org/api/iterator"
)
// listSources prints all sources in orgID to w. orgID is the numeric
// identifier of the organization.
func
listSources
(
w
io
.
Writer
,
orgID
string
)
error
{
// orgID := "12321311"
// Instantiate a context and a security service client to make API calls.
ctx
:=
context
.
Background
()
client
,
err
:=
securitycenter
.
NewClient
(
ctx
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"securitycenter.NewClient: %w"
,
err
)
}
defer
client
.
Close
()
// Closing the client safely cleans up background resources.
req
:=
& securitycenterpb
.
ListSourcesRequest
{
// Parent must be in one of the following formats:
// "organizations/{orgId}"
// "projects/{projectId}"
// "folders/{folderId}"
Parent
:
fmt
.
Sprintf
(
"organizations/%s"
,
orgID
),
}
it
:=
client
.
ListSources
(
ctx
,
req
)
for
{
source
,
err
:=
it
.
Next
()
if
err
==
iterator
.
Done
{
break
}
if
err
!=
nil
{
return
fmt
.
Errorf
(
"it.Next: %w"
,
err
)
}
fmt
.
Fprintf
(
w
,
"Source Name: %s, "
,
source
.
Name
)
fmt
.
Fprintf
(
w
,
"Display name: %s, "
,
source
.
DisplayName
)
fmt
.
Fprintf
(
w
,
"Description: %s\n"
,
source
.
Description
)
}
return
nil
}
Java
import
com.google.cloud.securitycenter.v2. OrganizationLocationName
;
import
com.google.cloud.securitycenter.v2. OrganizationName
;
import
com.google.cloud.securitycenter.v2. SecurityCenterClient
;
import
com.google.cloud.securitycenter.v2. SecurityCenterClient
. ListSourcesPagedResponse
;
import
com.google.cloud.securitycenter.v2. Source
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
ListSources
{
public
static
void
main
(
String
[]
args
)
throws
IOException
{
// TODO: Replace the below variables.
// organizationId: Google Cloud Organization id.
String
organizationId
=
"{google-cloud-organization-id}"
;
listSources
(
organizationId
);
}
// Demonstrates how to list all security sources in an organization.
public
static
List<Source>
listSources
(
String
organizationId
)
throws
IOException
{
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests.
try
(
SecurityCenterClient
client
=
SecurityCenterClient
.
create
())
{
// Start setting up a request to get a source.
OrganizationName
parent
=
OrganizationName
.
of
(
organizationId
);
// Call the API.
List<Source>
sourcesList
=
new
ArrayList
<> ();
ListSourcesPagedResponse
response
=
client
.
listSources
(
parent
);
response
.
iterateAll
().
forEach
(
sourcesList
::
add
);
for
(
Source
source
:
sourcesList
)
{
System
.
out
.
println
(
"List sources: "
+
source
);
}
return
sourcesList
;
}
}
}
Node.js
// Imports the Google Cloud client library.
const
{
SecurityCenterClient
}
=
require
(
' @google-cloud/security-center
'
).
v2
;
const
client
=
new
SecurityCenterClient
();
// TODO(developer): Update the following for your own environment.
const
organizationId
=
'1081635000895'
;
// Required. Resource name of the parent of sources to list. Its format should
// be "organizations/[organization_id]", "folders/[folder_id]", or
// "projects/[project_id]".
const
parent
=
`organizations/
${
organizationId
}
`
;
// Build the request.
const
listSourcesRequest
=
{
parent
,
};
async
function
listAllSources
()
{
// Call the API.
const
iterable
=
client
.
listSourcesAsync
(
listSourcesRequest
);
let
count
=
0
;
console
.
log
(
'Sources:'
);
for
await
(
const
response
of
iterable
)
{
console
.
log
(
`
${
++
count
}
${
response
.
name
}
${
response
.
description
}
`
);
}
}
await
listAllSources
();
Python
def
list_source
(
organization_id
)
-
> int
:
"""
lists the findings source
Args:
organization_id: organization_id is the numeric ID of the organization. e.g.:organization_id = "111122222444"
Returns:
Dict: returns the count of the findings source
"""
count
=
-
1
from
google.cloud
import
securitycenter_v2
# Create a new client.
client
=
securitycenter_v2
.
SecurityCenterClient
()
# 'parent' must be in one of the following formats:
# "organizations/{organization_id}"
# "projects/{project_id}"
# "folders/{folder_id}"
parent
=
f
"organizations/
{
organization_id
}
"
# Call the API and print out each existing source.
for
count
,
source
in
enumerate
(
client
.
list_sources
(
request
=
{
"parent"
:
parent
})):
print
(
count
,
source
)
return
count
What's next
- Learn more about client libraries for Security Command Center .