Adding and deleting security marks
Stay organized with collections
Save and categorize content based on your preferences.
Demonstrates adding and deleting security marks in the same request
Code sample
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],[],[],[],null,["# Adding and deleting security marks\n\nDemonstrates adding and deleting security marks in the same request\n\nCode sample\n-----------\n\n### Go\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\n \tsecuritycenter \"cloud.google.com/go/securitycenter/apiv1\"\n \t\"cloud.google.com/go/securitycenter/apiv1/securitycenterpb\"\n \t\"google.golang.org/genproto/protobuf/field_mask\"\n )\n\n // addDeleteSecurityMarks adds/updates \"key_a\" and deletes \"key_b\" from\n // assetName's securityMarks. assetName is the resource path for an asset.\n func addDeleteSecurityMarks(w io.Writer, assetName string) error {\n \t// Specify the value of 'assetName' in one of the following formats:\n \t// \t\tassetName := \"organizations/{org_id}/assets/{asset_id}\"\n \t//\t\tassetName := \"projects/{project_id}/assets/{asset_id}\"\n \t//\t\tassetName := \"folders/{folder_id}/assets/{asset_id}\"\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\n \treq := &securitycenterpb.UpdateSecurityMarksRequest{\n \t\t// If not set or empty, all marks would be cleared.\n \t\tUpdateMask: &field_mask.FieldMask{\n \t\t\tPaths: []string{\"marks.key_a\", \"marks.key_b\"},\n \t\t},\n \t\tSecurityMarks: &securitycenterpb.SecurityMarks{\n \t\t\tName: fmt.Sprintf(\"%s/securityMarks\", assetName),\n \t\t\t// Intentionally not setting marks for key_b to\n \t\t\t// delete it.\n \t\t\tMarks: map[string]string{\"key_a\": \"new_value_a\"},\n \t\t},\n \t}\n\n \tupdatedMarks, err := client.UpdateSecurityMarks(ctx, req)\n \tif err != nil {\n \t\treturn fmt.Errorf(\"UpdateSecurityMarks: %w\", err)\n \t}\n\n \tfmt.Fprintf(w, \"Updated marks: %s\\n\", updatedMarks.Name)\n \tfor k, v := range updatedMarks.Marks {\n \t\tfmt.Fprintf(w, \"%s = %s\\n\", k, v)\n \t}\n \treturn nil\n }\n\n### Java\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 SecurityMarks deleteAndUpdateMarks(String assetName) {\n try (SecurityCenterClient client = SecurityCenterClient.create()) {\n // Specify the value of 'assetName' in one of the following formats:\n // String assetName = \"organizations/{org-id}/assets/{asset-id}\";\n // String assetName = \"projects/{project-id}/assets/{asset-id}\";\n // String assetName = \"folders/{folder-id}/assets/{asset-id}\";\n // Start setting up a request to clear and update security marks for an asset.\n // Create security mark and field mask for clearing security marks.\n SecurityMarks securityMarks =\n SecurityMarks.newBuilder()\n .setName(assetName + \"/securityMarks\")\n .putMarks(\"key_a\", \"new_value_for_a\")\n .build();\n FieldMask updateMask =\n FieldMask.newBuilder().addPaths(\"marks.key_a\").addPaths(\"marks.key_b\").build();\n\n UpdateSecurityMarksRequest request =\n UpdateSecurityMarksRequest.newBuilder()\n .setSecurityMarks(securityMarks)\n .setUpdateMask(updateMask)\n .build();\n\n // Call the API.\n SecurityMarks response = client.updateSecurityMarks(request);\n\n System.out.println(\"Security Marks updated and cleared:\");\n System.out.println(response);\n return response;\n } catch (IOException e) {\n throw new RuntimeException(\"Couldn't create client.\", e);\n }\n }\n\n### Node.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\n async function addDeleteSecurityMarks() {\n // assetName is the full resource path for the asset to update.\n // Specify the value of 'assetName' in one of the following formats:\n // `organizations/${org-id}/assets/${asset-id}`;\n // `projects/${project-id}/assets/${asset-id}`;\n // `folders/${folder-id}/assets/${asset-id}`;\n const [newMarks] = await client.updateSecurityMarks({\n securityMarks: {\n name: `${assetName}/securityMarks`,\n marks: {key_a: 'new_value_a'},\n },\n // Only update the enableAssetDiscovery field.\n updateMask: {paths: ['marks.key_a', 'marks.key_b']},\n });\n\n console.log('New marks: %j', newMarks);\n }\n addDeleteSecurityMarks();\n\n### Python\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 google.cloud import securitycenter\n from google.protobuf import field_mask_pb2\n\n client = securitycenter.SecurityCenterClient()\n # 'asset_name' is the resource path for an asset that exists in SCC.\n # Specify the value of 'asset_name' in one of the following formats:\n # f\"organizations/{org_id}/assets/{asset_id}\"\n # f\"projects/{project_id}/assets/{asset_id}\"\n # f\"folders/{folder_id}/assets/{asset_id}\"\n # asset_name = organizations/123123342/assets/12312321\n marks_name = f\"{asset_name}/securityMarks\"\n\n field_mask = field_mask_pb2.FieldMask(paths=[\"marks.key_a\", \"marks.key_b\"])\n marks = {\"key_a\": \"new_value_for_a\"}\n\n updated_marks = 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_update_security_marks(\n request={\n \"security_marks\": {\"name\": marks_name, \"marks\": marks},\n \"update_mask\": field_mask,\n }\n )\n print(updated_marks)\n\nWhat's next\n-----------\n\n\nTo search and filter code samples for other Google Cloud products, see the\n[Google Cloud sample browser](/docs/samples?product=securitycenter)."]]