使用來源屬性建立發現項目
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
示範如何透過 sourceProperties 建立包含額外中繼資料的新安全發現項目
程式碼範例
Go
如要向 Security Command Center 進行驗證,請設定應用程式預設憑證。
詳情請參閱「為本機開發環境設定驗證」。
Java
如要向 Security Command Center 進行驗證,請設定應用程式預設憑證。
詳情請參閱「為本機開發環境設定驗證」。
Node.js
如要向 Security Command Center 進行驗證,請設定應用程式預設憑證。
詳情請參閱「為本機開發環境設定驗證」。
Python
如要向 Security Command Center 進行驗證,請設定應用程式預設憑證。
詳情請參閱「為本機開發環境設定驗證」。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["難以理解","hardToUnderstand","thumb-down"],["資訊或程式碼範例有誤","incorrectInformationOrSampleCode","thumb-down"],["缺少我需要的資訊/範例","missingTheInformationSamplesINeed","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["其他","otherDown","thumb-down"]],[],[],[],null,["Demonstrates how to create a new security finding that includes additional metadata via sourceProperties\n\nCode sample \n\nGo\n\n\nTo authenticate to Security Command Center, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n import (\n \t\"context\"\n \t\"fmt\"\n \t\"io\"\n \t\"time\"\n\n \tsecuritycenter \"cloud.google.com/go/securitycenter/apiv1\"\n \t\"cloud.google.com/go/securitycenter/apiv1/securitycenterpb\"\n \t\"github.com/golang/protobuf/ptypes\"\n \tstructpb \"github.com/golang/protobuf/ptypes/struct\"\n )\n\n // createFindingWithProperties demonstrates how to create a new security\n // finding in CSCC that includes additional metadata via sourceProperties.\n // sourceName is the full resource name of the source the finding should be\n // associated with.\n func createFindingWithProperties(w io.Writer, sourceName string) error {\n \t// sourceName := \"organizations/111122222444/sources/1234\"\n \t// Instantiate a context and a security service client to make API calls.\n \tctx := context.Background()\n \tclient, err := securitycenter.https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv1.html#cloud_google_com_go_securitycenter_apiv1_Client_NewClient(ctx)\n \tif err != nil {\n \t\treturn fmt.Errorf(\"securitycenter.NewClient: %w\", err)\n \t}\n \tdefer client.https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv1.html#cloud_google_com_go_securitycenter_apiv1_Client_Close() // Closing the client safely cleans up background resources.\n \t// Use now as the eventTime for the security finding.\n \teventTime, err := ptypes.TimestampProto(time.Now())\n \tif err != nil {\n \t\treturn fmt.Errorf(\"TimestampProto: %w\", err)\n \t}\n\n \treq := &securitycenterpb.CreateFindingRequest{\n \t\tParent: sourceName,\n \t\tFindingId: \"samplefindingprops\",\n \t\tFinding: &securitycenterpb.Finding{\n \t\t\tState: securitycenterpb.https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv1/securitycenterpb.html#cloud_google_com_go_securitycenter_apiv1_securitycenterpb_Finding_STATE_UNSPECIFIED_Finding_ACTIVE_Finding_INACTIVE,\n \t\t\t// Resource the finding is associated with. This is an\n \t\t\t// example any resource identifier can be used.\n \t\t\tResourceName: \"//cloudresourcemanager.googleapis.com/organizations/11232\",\n \t\t\t// A free-form category.Error converting now\n \t\t\tCategory: \"MEDIUM_RISK_ONE\",\n \t\t\t// The time associated with discovering the issue.\n \t\t\tEventTime: eventTime,\n \t\t\t// Define key-value pair metadata to include with the finding.\n \t\t\tSourceProperties: map[string]*structpb.Value{\n \t\t\t\t\"s_value\": {\n \t\t\t\t\tKind: &structpb.Value_StringValue{StringValue: \"string_example\"},\n \t\t\t\t},\n \t\t\t\t\"n_value\": {\n \t\t\t\t\tKind: &structpb.Value_NumberValue{NumberValue: 1234},\n \t\t\t\t},\n \t\t\t},\n \t\t},\n \t}\n\n \tfinding, err := client.CreateFinding(ctx, req)\n \tif err != nil {\n \t\treturn fmt.Errorf(\"CreateFinding: %w\", err)\n \t}\n \tfmt.Fprintf(w, \"New finding created: %s\\n\", finding.Name)\n \tfmt.Fprintf(w, \"Event time (Epoch Seconds): %d\\n\", eventTime.Seconds)\n \tfmt.Fprintf(w, \"Source Properties:\\n\")\n \tfor k, v := range finding.SourceProperties {\n \t\tfmt.Fprintf(w, \"%s = %v\\n\", k, v)\n \t}\n\n \treturn nil\n }\n\nJava\n\n\nTo authenticate to Security Command Center, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n static Finding createFindingWithSourceProperties(SourceName sourceName) {\n try (SecurityCenterClient client = SecurityCenterClient.create()) {\n // SourceName sourceName = SourceName.of(/*organization=*/\"123234324\",/*source=*/\n // \"423432321\");\n\n // Use the current time as the finding \"event time\".\n Instant eventTime = Instant.now();\n\n // Controlled by caller.\n String findingId = \"samplefindingid2\";\n\n // The resource this finding applies to. The CSCC UI can link\n // the findings for a resource to the corresponding Asset of a resource\n // if there are matches.\n String resourceName = \"//cloudresourcemanager.googleapis.com/organizations/11232\";\n\n // Define source properties values as protobuf \"Value\" objects.\n Value stringValue = Value.newBuilder().setStringValue(\"stringExample\").build();\n Value numValue = Value.newBuilder().setNumberValue(1234).build();\n ImmutableMap\u003cString, Value\u003e sourceProperties =\n ImmutableMap.of(\"stringKey\", stringValue, \"numKey\", numValue);\n\n // Start setting up a request to create a finding in a source.\n Finding finding =\n Finding.newBuilder()\n .setParent(sourceName.toString())\n .setState(State.ACTIVE)\n .setResourceName(resourceName)\n .setEventTime(\n Timestamp.newBuilder()\n .setSeconds(eventTime.getEpochSecond())\n .setNanos(eventTime.getNano()))\n .putAllSourceProperties(sourceProperties)\n .build();\n\n // Call the API.\n Finding response = client.createFinding(sourceName, findingId, finding);\n\n System.out.println(\"Created Finding with Source Properties: \" + response);\n return response;\n } catch (IOException e) {\n throw new RuntimeException(\"Couldn't create client.\", e);\n }\n }\n\nNode.js\n\n\nTo authenticate to Security Command Center, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n // Imports the Google Cloud client library.\n const {SecurityCenterClient} = require('https://cloud.google.com/nodejs/docs/reference/security-center/latest/overview.html');\n\n // Creates a new client.\n const client = new https://cloud.google.com/nodejs/docs/reference/security-center/latest/overview.html();\n // sourceName is the full resource name of the source the finding should\n // be associated with.\n /*\n * TODO(developer): Uncomment the following lines\n */\n // const sourceName = \"organizations/111122222444/sources/1234\";\n\n // Use now as the eventTime for the security finding.\n const eventTime = new Date();\n async function createFinding() {\n const [newFinding] = await client.createFinding({\n parent: sourceName,\n findingId: 'findingwithprops',\n finding: {\n state: 'ACTIVE',\n // Resource the finding is associated with. This is an\n // example any resource identifier can be used.\n resourceName:\n '//cloudresourcemanager.googleapis.com/organizations/11232',\n // A free-form category.\n category: 'MEDIUM_RISK_ONE',\n // The time associated with discovering the issue.\n eventTime: {\n seconds: Math.floor(eventTime.getTime() / 1000),\n nanos: (eventTime.getTime() % 1000) * 1e6,\n },\n sourceProperties: {\n s_value: {stringValue: 'string_example'},\n n_value: {numberValue: 1234},\n },\n },\n });\n console.log('New finding created: %j', newFinding);\n }\n createFinding();\n\nPython\n\n\nTo authenticate to Security Command Center, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n from datetime import datetime, timezone\n\n from google.cloud import securitycenter_v1\n from google.cloud.securitycenter_v1 import Finding\n from google.protobuf.struct_pb2 import Value\n\n # Create a new client.\n client = securitycenter_v1.SecurityCenterClient()\n\n # 'source_name' is the resource path for a source that has been\n # created previously (you can use list_sources to find a specific one).\n # Its format is:\n # source_name = \"organizations/{organization_id}/sources/{source_id}\"\n # e.g.:\n # source_name = \"organizations/111122222444/sources/1234\"\n\n # Controlled by caller.\n finding_id = \"samplefindingid2\"\n\n # The resource this finding applies to. The CSCC UI can link\n # the findings for a resource to the corresponding Asset of a resource\n # if there are matches.\n resource_name = \"//cloudresourcemanager.googleapis.com/organizations/11232\"\n\n # Define source properties values as protobuf \"Value\" objects.\n str_value = Value()\n str_value.string_value = \"string_example\"\n num_value = Value()\n num_value.number_value = 1234\n\n # Use the current time as the finding \"event time\".\n event_time = datetime.now(tz=timezone.utc)\n\n finding = Finding(\n state=Finding.State.ACTIVE,\n resource_name=resource_name,\n category=\"MEDIUM_RISK_ONE\",\n source_properties={\"s_value\": \"string_example\", \"n_value\": 1234},\n event_time=event_time,\n )\n\n created_finding = client.https://cloud.google.com/python/docs/reference/securitycenter/latest/google.cloud.securitycenter_v1.services.security_center.SecurityCenterClient.html#google_cloud_securitycenter_v1_services_security_center_SecurityCenterClient_create_finding(\n request={\"parent\": source_name, \"finding_id\": finding_id, \"finding\": finding}\n )\n print(created_finding)\n\nWhat's next\n\n\nTo search and filter code samples for other Google Cloud products, see the\n[Google Cloud sample browser](/docs/samples?product=securitycenter)."]]