Cloud 애셋 인벤토리와 Google SecOps 통합
이 문서에서는 Cloud 애셋 인벤토리를 Google Security Operations (Google SecOps)와 통합하는 방법을 설명합니다.
통합 버전: 12.0
Google SecOps 플랫폼에서 Cloud 애셋 인벤토리 통합은 Google Cloud 애셋 인벤토리라고 합니다.
시작하기 전에
통합을 사용하려면 Identity and Access Management (IAM) 역할과Google Cloud 서비스 계정이 필요합니다.
커스텀 IAM 역할 만들기 및 구성
커스텀 IAM 역할을 만들고 이에 대한 특정 권한을 구성하려면 다음 단계를 완료하세요.
Google Cloud 콘솔에서 IAM 역할 페이지로 이동합니다.
역할 만들기를 클릭하여 통합에 필요한 권한이 있는 커스텀 역할을 만듭니다.
새 커스텀 역할의 경우 제목, 설명, 고유 ID를 제공합니다.
역할 출시 단계를 정식 버전으로 설정합니다.
생성된 역할에 다음 권한을 추가합니다.
cloudasset.assets.searchAllResources
서비스 계정 만들기 및 구성
Cloud Asset Inventory를 Google SecOps와 통합하려면 기존 서비스 계정을 사용하거나 새 계정을 만들면 됩니다. 서비스 계정을 만드는 방법에 대한 안내는 서비스 계정 만들기를 참고하세요.
Cloud 애셋 인벤토리 통합을 사용하려면 서비스 계정에 이전 섹션에서 만든 커스텀 역할과 Cloud Asset Viewer
역할을 부여해야 합니다.
워크로드 아이덴티티 이메일을 사용하여 통합을 구성하지 않는 경우 서비스 계정을 만든 후 JSON으로 서비스 계정 키를 만드세요. 통합 매개변수를 구성할 때 다운로드한 JSON 키 파일의 전체 콘텐츠를 제공해야 합니다.
보안상의 이유로 서비스 계정 JSON 키 대신 워크로드 아이덴티티 이메일 주소를 사용하는 것이 좋습니다. 워크로드 아이덴티티에 대한 자세한 내용은 워크로드의 아이덴티티를 참고하세요.
기존 주 구성원에 커스텀 역할 부여
새 커스텀 역할을 선택한 주 구성원에 부여한 후 조직 내 모든 사용자에 대해 권한을 변경할 수 있습니다.
기존 주 구성원에게 맞춤 역할을 부여하려면 다음 단계를 완료하세요.
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
필터 필드에 Cloud Asset Inventory 통합에 사용하는 워크로드 아이덴티티 이메일 값을 붙여넣고 기존 주 구성원을 검색합니다.
주 구성원 수정을 클릭합니다. "PROJECT"에 대한 액세스 권한 수정 대화상자가 열립니다.
역할 할당에서
다른 역할 추가를 클릭합니다.Cloud 애셋 인벤토리의 사전 정의된 역할을 선택합니다.
저장을 클릭합니다.
통합 매개변수
Cloud 애셋 인벤토리 통합에는 다음 매개변수가 필요합니다.
매개변수 | 설명 |
---|---|
API Root |
필수
Cloud 애셋 인벤토리 인스턴스의 API 루트입니다. 기본값은 |
Organization ID |
선택사항
Cloud 애셋 인벤토리 통합에 사용할 조직 ID입니다. |
Project ID |
선택사항 Cloud 애셋 인벤토리 통합에 사용할 프로젝트 ID입니다. 이 매개변수의 값을 설정하지 않으면 통합에서 |
User's Service Account |
필수
서비스 계정 키 JSON 파일의 콘텐츠입니다. 이 매개변수 또는 이 매개변수를 구성하려면 서비스 계정을 만들 때 다운로드한 서비스 계정 키 JSON 파일의 전체 콘텐츠를 제공하세요. |
Quota Project ID |
선택사항 Google Cloud API 및 결제에 사용하는 Google Cloud 프로젝트 ID입니다. 이 매개변수를 사용하려면 서비스 계정에 이 매개변수에 값을 설정하지 않으면 통합에서 Google Cloud 서비스 계정에서 프로젝트 ID를 가져옵니다. |
Workload Identity Email |
선택사항 서비스 계정의 클라이언트 이메일 주소입니다. 이 매개변수 또는 워크로드 아이덴티티 제휴를 사용하여 서비스 계정을 가장하려면 서비스 계정에 |
Verify SSL |
필수
선택하면 통합에서 Cloud 애셋 인벤토리 서버에 연결하는 데 사용되는 SSL 인증서가 유효한지 확인합니다. 기본적으로 선택되어 있습니다. |
Google SecOps에서 통합을 구성하는 방법에 대한 자세한 내용은 통합 구성을 참고하세요.
필요한 경우 이후 단계에서 변경할 수 있습니다. 통합 인스턴스를 구성한 후 플레이북에서 사용할 수 있습니다. 여러 인스턴스 구성 및 지원에 대한 자세한 내용은 다중 인스턴스 지원을 참고하세요.
작업
작업에 관한 자세한 내용은 Workdesk에서 대기 중인 작업에 응답 및 수동 작업 실행을 참고하세요.
리소스 보강
리소스 보강 작업을 사용하여 Cloud 애셋 인벤토리를 통해 Google Cloud리소스에 관한 정보를 보강합니다.
이 작업은 Google SecOps 항목에서 실행되지 않습니다.
작업 입력
리소스 보강 작업을 구성하려면 다음 매개변수를 사용하세요.
매개변수 | 설명 |
---|---|
Resource Names |
필수
세부정보를 가져올 리소스의 리소스 이름을 포함하는 쉼표로 구분된 목록입니다. 이 매개변수를 구성하려면 다음과 같은 형식으로 전체 메타데이터 리소스 이름을 입력합니다.
|
Fields To Return |
선택사항
반환할 필드의 쉼표로 구분된 목록입니다. 기본값은 값의 예는 다음과 같습니다.
작업은 항상 고급 필터를 구성하는 옵션도 있습니다. 예를 들어 |
작업 출력
리소스 보강 작업은 다음 출력을 제공합니다.
작업 출력 유형 | 가용성 |
---|---|
케이스 월 연결 | 사용할 수 없음 |
케이스 월 링크 | 사용할 수 없음 |
케이스 월 테이블 | 사용할 수 없음 |
보강 테이블 | 사용할 수 없음 |
JSON 결과 | 사용 가능 |
출력 메시지 | 사용 가능 |
스크립트 결과 | 사용 가능 |
JSON 결과
다음 예는 리소스 보강 작업을 사용할 때 수신되는 JSON 결과 출력을 보여줍니다.
[
{
"Entity": "//iam.googleapis.com/projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT/keys/KEY_ID",
"EntityResult": {
"additionalAttributes": {
"email": "email@example.iam.gserviceaccount.com",
"uniqueId": 123456789
},
"name": "//iam.googleapis.com/projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT/keys/KEY_ID",
"assetType": "iam.googleapis.com/ServiceAccountKey",
"project": "projects/PROJECT",
"displayName": "projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT@PROJECT.iam.gserviceaccount.com/keys/KEY_ID",
"createTime": "2022-05-26T17:35:07Z",
"versionedResources": [
{
"version": "v1",
"resource": {
"keyAlgorithm": "KEY_ALG_RSA_2048",
"keyOrigin": "GOOGLE_PROVIDED",
"keyType": "USER_MANAGED",
"name": "projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT@PROJECT.iam.gserviceaccount.com/keys/KEY_ID",
"validAfterTime": "2022-05-26T17:35:07Z",
"validBeforeTime": "9999-12-31T23:59:59Z"
}
}
],
"organization": "organizations/ORGANIZATION",
"parentFullResourceName": "//iam.googleapis.com/projects/PROJECT/serviceAccounts/SERVICE_ACCOUNT@PROJECT.iam.gserviceaccount.com",
"parentAssetType": "iam.googleapis.com/ServiceAccount"
}
}
]
출력 메시지
리소스 보강 작업은 다음 출력 메시지를 반환할 수 있습니다.
출력 메시지 | 메시지 설명 |
---|---|
|
작업이 완료되었습니다. |
Error executing action "Enrich resources". Reason:
ERROR_REASON |
작업이 실패했습니다. 서버, 입력 매개변수 또는 사용자 인증 정보에 대한 연결을 확인합니다. |
스크립트 결과
다음 표에는 리소스 보강 작업을 사용할 때 스크립트 결과 출력의 값이 나와 있습니다.
스크립트 결과 이름 | 값 |
---|---|
is_success |
True 또는 False |
리소스 스냅샷 가져오기
리소스 스냅샷 가져오기 작업을 사용하여 Cloud 애셋 인벤토리를 통해 리소스에 관한 정보를 가져옵니다.
이 작업은 Google SecOps 항목에서 실행되지 않습니다.
작업 입력
리소스 스냅샷 가져오기 작업을 구성하려면 다음 매개변수를 사용하세요.
매개변수 | 설명 |
---|---|
Resource Names |
필수 세부정보를 가져올 리소스의 쉼표로 구분된 목록입니다. 이 매개변수를 구성하려면 다음과 같은 형식으로 전체 메타데이터 리소스 이름을 입력합니다.
|
Fields To Return |
선택사항 반환할 필드의 쉼표로 구분된 목록입니다. 다음 형식으로 모든 필드를 입력합니다. assets.FIELD
값의 예는 작업은 항상 기본값은 |
작업 출력
Get Resource Snapshot 작업은 다음 출력을 제공합니다.
작업 출력 유형 | 가용성 |
---|---|
케이스 월 연결 | 사용할 수 없음 |
케이스 월 링크 | 사용할 수 없음 |
케이스 월 테이블 | 사용할 수 없음 |
보강 테이블 | 사용할 수 없음 |
JSON 결과 | 사용 가능 |
출력 메시지 | 사용 가능 |
스크립트 결과 | 사용 가능 |
JSON 결과
다음 예는 리소스 스냅샷 가져오기 작업을 사용할 때 수신되는 JSON 결과 출력을 보여줍니다.
Google Cloud의 JSON 결과
[ { "Entity": "//compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/example-instance", "EntityResult": { "window": { "startTime": "2023-08-14T19:43:41.805828Z", "endTime": "2262-04-11T23:47:16.854775807Z" }, "asset": { "name": "//compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/example-instance", "assetType": "compute.googleapis.com/Instance", "resource": { "version": "v1", "discoveryDocumentUri": "https://www.googleapis.com/discovery/v1/apis/compute/v1/rest", "discoveryName": "Instance", "parent": "//cloudresourcemanager.googleapis.com/projects/example-project-id", "data": { "description": "", "serviceAccounts": [ { "email": "user@example.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "lastStartTimestamp": "2022-05-26T01:44:52.756-07:00", "deletionProtection": false, "name": "example-name", "keyRevocationActionType": "NONE_ON_KEY_REVOCATION", "canIpForward": false, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "zone": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a", "resourceStatus": {}, "scheduling": { "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD", "automaticRestart": true }, "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/machineTypes/e2-micro", "confidentialInstanceConfig": { "enableConfidentialCompute": false }, "selfLink": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance", "id": "example-id", "fingerprint": "example-fingerprint", "startRestricted": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/example-project/global/networks/example-network", "stackType": "IPV4_ONLY", "name": "example", "subnetwork": "https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/subnetworks/example-network-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "External NAT", "natIP": "192.0.2.1", "networkTier": "PREMIUM" } ], "fingerprint": "example-fingerprint", "networkIP": "203.0.113.2" } ], "allocationAffinity": { "consumeAllocationType": "ANY_ALLOCATION" }, "labelFingerprint": "example-label", "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-05-26T01:44:40.323-07:00", "status": "RUNNING", "disks": [ { "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "interface": "SCSI", "shieldedInstanceInitialState": { "dbxs": [ { "content": "2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndK", "fileType": "BIN" } ], "dbx": [ { "fileType": "BIN", "content": "2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndK" } ] }, "diskSizeGb": "10", "deviceName": "example-device-name", "type": "PERSISTENT", "source": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/example-instance", "boot": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/example-project/global/licenses" ], "index": 0, "autoDelete": true, "mode": "READ_WRITE" } ], "tags": { "items": [ "http-server" ], "fingerprint": "example-fingerprint" }, "displayDevice": { "enableDisplay": false }, "reservationAffinity": { "consumeReservationType": "ANY_ALLOCATION" } }, "location": "us-central1-a" }, "ancestors": [ "projects/example-project-id", "organizations/example-org-id" ], "updateTime": "2023-08-14T19:43:41.805828Z" } } }, { "Entity": "//iam.googleapis.com/projects/example-project/serviceAccounts/example-account-id", "EntityResult": { "window": { "startTime": "2023-12-22T13:37:50Z", "endTime": "2262-04-11T23:47:16.854775807Z" }, "asset": { "name": "//iam.googleapis.com/projects/example-project/serviceAccounts/example-account-id", "assetType": "iam.googleapis.com/ServiceAccount", "resource": { "version": "v1", "discoveryDocumentUri": "https://iam.googleapis.com/$discovery/rest", "discoveryName": "ServiceAccount", "parent": "//cloudresourcemanager.googleapis.com/projects/example-project-id", "data": { "name": "projects/example-project/serviceAccounts/cloud-asset-inventory-auto@example-project.iam.gserviceaccount.com", "projectId": "example-project", "email": "cloud-asset-inventory-auto@example-project.iam.gserviceaccount.com", "uniqueId": "example-account-id", "displayName": "Cloud Asset Inventory Automation", "oauth2ClientId": "example-account-id" } }, "ancestors": [ "projects/example-project-id", "organizations/example-org-id" ], "updateTime": "2023-12-22T13:37:50Z" } } } ]
AWS의 JSON 결과
[ { "Entity": "//cloudasset.googleapis.com/organizations/example-org-id/otherCloudConnections/aws/arn:aws:s3:::aps-max-test-bucket", "EntityResult": { "assets": [ { "window": { "startTime": "2024-01-24T17:51:03.412233028Z", "endTime": "2262-04-11T23:47:16.854775807Z" }, "asset": { "name": "//cloudasset.googleapis.com/organizations/example-org-id/otherCloudConnections/aws/arn:aws:s3:::aps-max-test-bucket", "assetType": "cloudasset.googleapis.com/AWS::S3::Bucket", "resource": { "version": "v1", "discoveryDocumentUri": "n/a", "discoveryName": "n/a", "data": { "dataSourceProvider": "AMAZON_WEB_SERVICES", "supplementaryConfigurations": { "PublicAccessBlockConfiguration": { "BlockPublicPolicy": true, "RestrictPublicBuckets": true, "BlockPublicAcls": true, "IgnorePublicAcls": true }, "TagSet": [ { "Key": "my-key2", "Value": "my-value2" }, { "Key": "my-key1", "Value": "my-value1" } ], "ServerSideEncryptionConfiguration": { "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" }, "BucketKeyEnabled": true } ] }, "AccessControlPolicy": { "Grants": [ { "Grantee": { "DisplayName": "example", "ID": "example-id", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" } ], "Owner": { "DisplayName": "example", "ID": "example-id" } } }, "configuration": { "Name": "aps-max-test-bucket", "CreationDate": "2023-12-04T15:29:50+00:00" }, "tags": { "my-key2": "my-value2", "my-key1": "my-value1" }, "originalResourceName": "arn:aws:s3:::aps-max-test-bucket", "awsAccount": "arn:aws:organizations::example-id:account/example-account/example-account-id" }, "location": "global" }, "ancestors": [ "organizations/example-org-id" ], "updateTime": "2024-01-24T17:51:03.412233028Z" } } ] } } ]
출력 메시지
리소스 스냅샷 가져오기 작업은 다음 출력 메시지를 반환할 수 있습니다.
출력 메시지 | 메시지 설명 |
---|---|
Successfully returned information about the following resources
using Google Cloud Asset Inventory:
ASSET_IDENTIFIER
|
작업이 완료되었습니다. |
Error executing action "Get Resource Snapshot". Reason:
ERROR_REASON |
작업이 실패했습니다. 서버, 입력 매개변수 또는 사용자 인증 정보에 대한 연결을 확인합니다. |
스크립트 결과
다음 표에는 리소스 스냅샷 가져오기 작업을 사용할 때 스크립트 결과 출력 값이 나와 있습니다.
스크립트 결과 이름 | 값 |
---|---|
is_success |
True 또는 False |
서비스 계정 역할 나열
서비스 계정 역할 나열 작업을 사용하여 Cloud 애셋 인벤토리를 통해 Google Cloud 서비스 계정과 관련된 역할을 나열합니다.
이 작업은 Google SecOps 항목에서 실행되지 않습니다.
작업 입력
서비스 계정 역할 나열 작업을 구성하려면 다음 매개변수를 사용하세요.
매개변수 | 설명 |
---|---|
Service Accounts |
필수 세부정보를 가져올 서비스 계정의 쉼표로 구분된 목록입니다. |
Check Roles |
선택사항 서비스 계정(예: |
Check Permissions |
선택사항 서비스 계정과 관련된 확인할 권한의 쉼표로 구분된 목록입니다(예: |
Expand Permissions |
선택사항 선택하면 작업에서 리소스와 관련된 모든 고유 권한에 관한 정보를 반환합니다. 기본적으로 선택되지 않습니다. |
Max Roles To Return |
필수 반환할 서비스 계정과 관련된 역할 수입니다. 기본값은 100입니다. |
Max Permissions To Return |
필수 반환할 서비스 계정과 관련된 권한 수입니다. |
작업 출력
서비스 계정 역할 나열 작업은 다음 출력을 제공합니다.
작업 출력 유형 | 가용성 |
---|---|
케이스 월 연결 | 사용할 수 없음 |
케이스 월 링크 | 사용할 수 없음 |
케이스 월 테이블 | 사용할 수 없음 |
보강 테이블 | 사용할 수 없음 |
JSON 결과 | 사용 가능 |
출력 메시지 | 사용 가능 |
스크립트 결과 | 사용 가능 |
JSON 결과
다음 예는 서비스 계정 역할 나열 작업을 사용할 때 수신되는 JSON 결과 출력을 보여줍니다.
{
"roles": ["role1", "role2"],
"unique_permissions": ["permission1", "permission2"]
}
출력 메시지
서비스 계정 역할 나열 작업은 다음 출력 메시지를 반환할 수 있습니다.
출력 메시지 | 메시지 설명 |
---|---|
|
작업이 완료되었습니다. |
Error executing action "List Service Account Roles". Reason:
ERROR_REASON |
작업이 실패했습니다. 서버, 입력 매개변수 또는 사용자 인증 정보에 대한 연결을 확인합니다. |
핑
Ping 작업을 사용하여 Cloud 애셋 인벤토리와의 연결을 테스트합니다.
이 작업은 Google SecOps 항목에서 실행되지 않습니다.
작업 입력
없음
작업 출력
Ping 작업은 다음 출력을 제공합니다.
작업 출력 유형 | 가용성 |
---|---|
케이스 월 연결 | 사용할 수 없음 |
케이스 월 링크 | 사용할 수 없음 |
케이스 월 테이블 | 사용할 수 없음 |
보강 테이블 | 사용할 수 없음 |
JSON 결과 | 사용할 수 없음 |
출력 메시지 | 사용 가능 |
스크립트 결과 | 사용 가능 |
출력 메시지
Ping 작업은 다음 출력 메시지를 반환할 수 있습니다.
출력 메시지 | 메시지 설명 |
---|---|
Successfully connected to the Google Cloud Asset Inventory
server with the provided connection parameters! |
작업이 완료되었습니다. |
Failed to connect to the Google Cloud Asset Inventory server!
|
작업이 실패했습니다. |
스크립트 결과
다음 표에는 Ping 작업을 사용할 때 스크립트 결과 출력 값이 나와 있습니다.
스크립트 결과 이름 | 값 |
---|---|
is_success |
True 또는 False |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.