보안 상황 관리

이 페이지에서는 Security Command Center를 활성화한 후 보안 상황 서비스를 구성하고 사용하는 방법을 설명합니다. 시작하려면 정책 집합으로 구성된 정책 포함 상황을 만들고 상황 배포를 사용해서 상황을 배포해야 합니다. 상황 배포 후에는 드리프트를 모니터링하고 시간별 상황을 더 세분화할 수 있습니다.

시작하기 전에

이 페이지의 남은 태스크를 수행하기 전에 먼저 다음 태스크를 수행하세요.

Security Command Center 프리미엄 또는 Enterprise 등급 활성화

Security Command Center 프리미엄 등급 또는 Enterprise 등급이 조직 수준에서 활성화되었는지 확인합니다.

Security Health Analytics 감지기를 정책으로 사용하려는 경우 활성화 프로세스 중 Security Health Analytics 서비스를 선택합니다.

권한 설정

상황을 사용하는 데 필요한 권한을 얻으려면 관리자에게 Security Posture 관리자(roles/securityposture.admin) IAM 역할의 부여를 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

보안 상황 역할 및 보안 상황 권한에 대한 자세한 내용은 조직 수준 활성화를 위한 IAM을 참조하세요.

Google Cloud CLI 설정

Google Cloud CLI 버전 461.0.0 이상을 사용해야 합니다.

In the Google Cloud console, activate Cloud Shell.

Activate Cloud Shell

At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

서비스 계정 가장 기능을 사용하여 사용자 인증 정보 대신 Google API에 인증하도록 gcloud CLI를 설정하려면 다음 명령어를 실행합니다.

gcloud config set auth/impersonate_service_account SERVICE_ACCT_EMAIL

자세한 내용은 서비스 계정 가장을 참조하세요.

API 사용 설정

조직 정책 서비스 및 보안 상황 서비스 API를 사용 설정합니다.

gcloud services enable orgpolicy.googleapis.com  securityposture.googleapis.com

AWS 연결 구성

AWS와 관련된 기본 제공되는 Security Health Analytics 감지기를 사용하려면 Security Command Center Enterprise를 활성화하고 취약점 감지를 위해 AWS에 연결해야 합니다.

상황 만들기 및 배포

보안 상황을 사용하려면 먼저 다음을 완료해야 합니다.

  • 보안 상황에 적용되는 정책을 정의하는 상황 YAML 파일을 만듭니다.
  • Google Cloud에서 상황 YAML 파일을 기반으로 하는 상황을 만듭니다.
  • 상황을 배포합니다.

다음 섹션에서는 이에 대해 자세히 설명합니다.

상황 YAML 파일 만들기

상황은 함께 배포하는 하나 이상의 정책 집합으로 구성됩니다. 이러한 정책 집합에는 상황에 포함하려는 모든 예방 정책과 감지 정책이 포함됩니다.

상황을 만들려면 다음 중 하나를 수행합니다.

상황에서 사용할 수 있는 필드에 대한 자세한 내용은 Posture 참조PolicySet 참조를 참고하세요.

사전 정의된 상황 템플릿에서 상황 파일 만들기

사전 정의된 상황 템플릿을 사용하여 상황 파일을 만들 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 페이지로 이동합니다.

    상황 관리로 이동

  2. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다.

  3. 템플릿 탭에서 사용할 템플릿을 클릭합니다.

  4. 템플릿 세부정보 페이지에서 상황 만들기를 클릭합니다.

  5. 상황의 고유한 이름을 제공하고 만들기를 클릭합니다. 상황 세부정보 페이지가 열립니다.

  6. 다음 작업 중 하나를 완료합니다.

    • 아무것도 변경하지 않고 상황을 사용할 수 있는 경우(예: _essentials 템플릿 중 하나를 사용한 경우) 상황을 배포할 수 있습니다. 자세한 내용은 상황 배포를 참조하세요.
    • 정책 세트 또는 정책을 수정해야 하는 경우(예: _enhanced 템플릿 중 하나를 사용한 경우) 상황 YAML 파일 수정상황 상태를 ACTIVE로 설정을 완료합니다.

gcloud

  1. 사전 정의된 상황 템플릿을 검토하여 환경에 적용되는 정책을 확인합니다. 일부 템플릿은 변경하지 않고 적용할 수 있지만 다른 템플릿은 환경에 맞게 정책을 맞춤설정해야 합니다.
  2. 다음 방법 중 하나를 사용하여 YAML 파일을 자신의 텍스트 편집기에 복사합니다.

    • 사전 정의된 상황 템플릿의 참조 콘텐츠에서 YAML 파일을 복사합니다.
    • gcloud scc posture-templates describe 명령어를 실행하여 YAML 파일을 복사합니다.
    gcloud scc posture-templates describe \
        organizations/ORGANIZATION_ID/locations/LOCATION/postureTemplates/POSTURE_TEMPLATE \
        --revision-id=REVISION_ID
    
    gcloud scc posture-templates describe \
    organizations/ORGANIZATION_ID/locations/global/postureTemplates/POSTURE_TEMPLATE \
    --revision-id=REVISION_ID

    다음 값을 바꿉니다.

    • ORGANIZATION_ID는 Security Command Center 프리미엄 또는 엔터프라이즈 등급을 활성화한 조직입니다.
    • LOCATION은 상황을 배포 및 저장하려는 위치입니다. 지원되는 유일한 위치는 global입니다.
    • POSTURE_TEMPLATE사전 정의된 상황 템플릿에 설명된 것처럼 사전 정의된 상황의 템플릿 이름입니다.
    • REVISION_ID는 사전 정의된 상황의 버전입니다. 버전 ID를 포함하지 않으면 사전 정의된 상황의 최신 버전이 표시됩니다.

    예를 들어 3589215982 조직 아래의 필수 사전 정의된 상황인 보안 AI를 보려면 다음을 수행합니다.

    gcloud scc posture-templates describe \
        organizations/3589215982/locations/global/postureTemplates/secure_ai_essential \
        --revision-id=v.1.0
    
  3. 다음 작업 중 하나를 완료합니다.

    • 아무것도 변경하지 않고 상황을 사용할 수 있는 경우(예: _essentials 템플릿 중 하나를 사용한 경우) 상황을 만들 수 있습니다. 자세한 내용은 상황 만들기를 참조하세요.
    • 정책 세트 또는 정책을 수정해야 하는 경우 상황 YAML 파일 수정을 완료합니다.

기존 환경에서 정책을 추출하여 상황 파일 만들기

기존 프로젝트, 폴더, 또는 조직에서 구성한 정책(커스텀 정책을 포함한 조직 정책, 커스텀 감자기를 포함한 모든 Security Health Analytics 감지기)을 추출하여 상태 파일을 만들 수 있습니다. 이미 상황이 적용된 조직, 폴더, 프로젝트에서는 정책을 추출할 수 없습니다.

이 명령어는 이전에 조직, 폴더 또는 프로젝트에 대해 구성한 정책만 추출하며 상위 폴더 또는 조직에서는 정책을 추출하지 않습니다.

Security Command Center Enterprise를 AWS에 연결한 경우 이 명령어는 AWS와 관련된 감지기도 추출합니다(프리뷰).

  1. gcloud scc postures extract 명령어를 실행하여 환경에서 기존 조직 정책 및 Security Health Analytics 감지기를 추출합니다.

    gcloud scc postures extract POSTURE_NAME \
      --workload=WORKLOAD
    

    다음 값을 바꿉니다.

    • POSTURE_NAME은 상황의 상대적 리소스 이름입니다. 예를 들면 organizations/ORGANIZATION_ID/locations/global/postures/POSTURE_ID입니다.

      • POSTURE_ID는 조직에 고유한 상황의 영숫자 이름입니다. POSTURE_ID는 63자로 제한됩니다.
    • WORKLOAD는 정책을 추출하려는 프로젝트, 폴더, 조직입니다. 워크로드는 다음 중 하나입니다.

    • projects/PROJECT_NUMBER

    • folder/FOLDER_ID

    • organizations/ORGANIZATION_ID

    예를 들어 6589215984 조직 아래의 3589215982 폴더에서 정책을 추출하려면 다음을 실행합니다.

    gcloud scc postures extract \
      organizations/6589215984/locations/global/postures/myStagingPosture \
      workload=folder/3589215982 > posture.yaml
    
  2. 수정할 결과 posture.yaml 파일을 엽니다.

  3. 다음 작업 중 하나를 완료합니다.

    • 아무것도 변경하지 않고 상황을 사용할 수 있는 경우(예: _essentials 템플릿 중 하나를 사용한 경우) 상황을 만들 수 있습니다. 자세한 내용은 상황 만들기를 참조하세요.
    • 정책 세트 또는 정책을 수정해야 하는 경우 상황 YAML 파일 수정을 완료합니다.

정책 정의로 Terraform 리소스 만들기

Terraform 구성을 만들어서 상황 리소스를 만들 수 있습니다.

예를 들어 기본 제공 및 커스텀 조직 정책 제약조건과 기본 제공 및 커스텀 Security Health Analytics 감지기를 포함하는 상황 리소스를 만들 수 있습니다. AWS와 관련된 기본 제공되는 Security Health Analytics 감지기에 대한 상황 관리 지원은 프리뷰 상태입니다.

resource "google_securityposture_posture" "posture_example" {
  posture_id  = "<POSTURE_ID>"
  parent      = "organizations/<ORGANIZATION_ID>"
  location    = "global"
  state       = "ACTIVE"
  description = "a new posture"
  policy_sets {
    policy_set_id = "org_policy_set"
    description   = "set of org policies"
    policies {
      policy_id = "canned_org_policy"
      constraint {
        org_policy_constraint {
          canned_constraint_id = "storage.uniformBucketLevelAccess"
          policy_rules {
            enforce = true
          }
        }
      }
    }
    policies {
      policy_id = "canned_org_policy_for_service"
      constraint {
        org_policy_constraint {
          canned_constraint_id = "run.allowedVPCEgress"
          policy_rules {
            allow_all: true
            condition {
              expression: "!(parameters.denyAll or resource.location in parameters.deniedLocations) && (parameters.allowAll or resource.location in parameters.allowedLocations)"
            }
            parameters {
              fields {
                key: "denyAll"
                value {
                  bool_value: false
                }
              }
              fields {
                key: "allowAll"
                value {
                  bool_value: false
                }
              }
              fields {
                key: "deniedLocations"
                value {
                  null_value: NULL_VALUE
                }
              }
              fields {
                key: "allowedLocations"
                value {
                  string_value: "allowedLocations.all(location, location in [\342\200\230US\342\200\231, \342\200\230EU\342\200\231])"
                }
              }
            }
            resource_types {
              included: "run.googleapis.com/Service"
            }
          }
        }
      }
    }
  }
  policy_sets {
    policy_set_id = "sha_policy_set"
    description   = "set of sha policies"
    policies {
      policy_id = "sha_builtin_module"
      constraint {
        security_health_analytics_module {
          module_name             = "BIGQUERY_TABLE_CMEK_DISABLED"
          module_enablement_state = "ENABLED"
        }
      }
      description = "enable BIGQUERY_TABLE_CMEK_DISABLED"
    }
    policies {
      policy_id = "aws_sha_builtin_module"
      constraint {
        security_health_analytics_module {
          module_name             = "S3_BUCKET_LOGGING_ENABLED"
          module_enablement_state = "ENABLED"
        }
      }
      description = "enable S3_BUCKET_LOGGING_ENABLED"
    }
    policies {
      policy_id = "sha_custom_module"
      constraint {
        security_health_analytics_custom_module {
          display_name = "custom_SHA_policy"
          config {
            predicate {
              expression = "resource.rotationPeriod > duration('2592000s')"
            }
            custom_output {
              properties {
                name = "duration"
                value_expression {
                  expression = "resource.rotationPeriod"
                }
              }
            }
            resource_selector {
              resource_types = ["cloudkms.googleapis.com/CryptoKey"]
            }
            severity       = "LOW"
            description    = "Custom Module"
            recommendation = "Testing custom modules"
          }
          module_enablement_state = "ENABLED"
        }
      }
    }
  }
}

자세한 내용은 google_securityposture_posture를 참조하세요.

상황 YAML 파일 수정

상황 YAML 파일을 수정하려면 다음 단계를 완료하세요.

  1. 텍스트 편집기에서 상황 YAML 파일을 엽니다.
  2. 파일 시작 부분에서 name, description, state를 확인합니다.

  3. 파일 시작 부분에서 name, description, state를 확인합니다.

    name: organizations/ORGANIZATION_ID/locations/global/posture/POSTURE_ID
    description: DESCRIPTION
    state: STATE
    

    이러한 필드에 대한 자세한 내용은 Posture 참조를 확인하세요.

    예를 들면 다음과 같습니다.

    name: organizations/3589215982/locations/global/posture/stagingAIPosture
    description: This posture applies to staging environments for Vertex AI.
    state: ACTIVE
    
  4. 요구사항에 맞게 파일 내에서 정책을 맞춤설정합니다.

    사용할 수 있는 필드에 대한 자세한 내용은 PolicySet 참조를 참고하세요.

    1. 기존 정책 및 해당 값을 검토합니다. 환경에 맞는 정보가 필요한 정책의 경우 값을 적절하게 설정합니다. 예를 들어 사전 정의된 상황이 확장된 보안 AI에 있는 ainotebooks.accessMode 정책의 경우 policy_rules 아래에 허용 액세스 모드를 추가합니다.

      - policy_id: Define access mode for Vertex AI Workbench notebooks and instances
        compliance_standards:
        - standard: NIST SP 800-53
          control: AC-3(3)
        - standard: NIST SP 800-53
          control: AC-6(1)
        constraint:
          org_policy_constraint:
            canned_constraint_id: ainotebooks.accessMode
            policy_rules:
            - values:
                allowed_values: service-account
        description: This list constraint defines the modes of access allowed to Vertex AI Workbench notebooks and instances where enforced. The allow or deny list can specify multiple users with the service-account mode or single-user access with the single-user mode. The access mode to be allowed or denied must be listed explicitly.
      
    2. 조직 정책 제약조건에 설명된 대로 조직 정책 제약조건을 더 추가합니다. 맞춤 조직 정책을 정의하는 경우 YAML 파일에 맞춤 제약 조건 정의가 포함되어 있는지 확인합니다. 다른 방법(예: Google Cloud 콘솔 사용)으로 만든 커스텀 제약조건은 사용할 수 없습니다.

      예를 들어 이미지 스토리지 및 디스크 인스턴스화에 사용할 수 있는 프로젝트를 정의하도록 compute.trustedImageProjects 제약조건을 설정해야 할 수 있습니다. 이 예시를 복사하는 경우 allowed_values를 적절한 프로젝트 목록으로 바꿔야 합니다.

      - policy_id: Define projects with trusted images.
        compliance_standards:
        - standard:
          control:
        constraint:
          org_policy_constraint:
            canned_constraint_id: compute.trustedImageProjects
            policy_rules:
            - values:
                allowed_values:
                - project1
                - project2
                - projectN
        description: This is a complete list of projects from which images can be used.
      
    3. Security Health Analytics 발견 항목에 설명된 것과 같이 Security Health Analytics 감지기를 더 추가합니다. 예를 들어 프로젝트에서 인증에 API 키를 사용하지 않는 경우 발견 항목을 만들도록 Security Health Analytics 감지기를 추가합니다.

      - policy_id: API Key Exists
        constraint:
          securityHealthAnalyticsModule:
            moduleEnablementState: ENABLED
            moduleName: API_KEY_EXISTS
      

      또 다른 예시로, Vertex AI 데이터 세트가 암호화되었는지 여부를 확인하기 위해 Security Health Analytics 커스텀 모듈을 추가할 수 있습니다.

      - policy_id: CMEK key is use for Vertex AI DataSet
        compliance_standards:
        - standard: NIST SP 800-53
          control: SC-12
        - standard: NIST SP 800-53
          control: SC-13
        constraint:
          security_health_analytics_custom_module:
            display_name: "vertexAIDatasetCMEKDisabled"
            config:
              customOutput: {}
              predicate:
                expression: "!has(resource.encryptionSpec)"
              resource_selector:
                resource_types:
                - aiplatform.googleapis.com/Dataset
              severity: CRITICAL
              description: "When enforced, this detector finds whether a dataset is not encrypted using CMEK."
              recommendation: "Restore the SHA module. See https://cloud.google.com/security-command-center/docs/custom-modules-sha-overview."
            module_enablement_state: ENABLED
      

      또 다른 예시로 Security Command Center Enterprise에 대해 AWS와 관련된 Security Health Analytics 감지기를 추가합니다(프리뷰).

      - policy_set_id: AWS policy set
        description:  Policy set containing AWS built-in SHA modules for securing S3 buckets.
        policies:
        - policy_id: S3 bucket replication enabled
          compliance_standards:
          - standard: NIST 800-53 R5
            control: SI-13(5)
          constraint:
            securityHealthAnalyticsModule:
              moduleEnablementState: ENABLED
              moduleName: S3_BUCKET_REPLICATION_ENABLED
          description: This control checks whether an Amazon S3 bucket has Cross-Region Replication enabled. The control fails if the bucket does not have Cross-Region Replication enabled or if Same-Region Replication is also enabled.
      
        - policy_id: S3 bucket logging enabled
          compliance_standards:
          - standard: NIST 800-53 R5
            control: SI-7(8)
          - standard: PCI DSS 3.2.1
            control: 10.3.1
          constraint:
            securityHealthAnalyticsModule:
              moduleEnablementState: ENABLED
              moduleName: S3_BUCKET_LOGGING_ENABLED
          description: AWS S3 Server Access Logging feature records access requests to storage buckets which is useful for security audits. By default, server access logging is not enabled for S3 buckets.
      

      AWS와 관련된 감지기를 추가하는 경우 조직 수준에서 상황을 배포해야 합니다.

  5. 시간 경과에 따라 수행되는 변경사항을 추적할 수 있도록 버전 제어 소스 저장소에 상황 파일을 업로드합니다.

상황 만들기

이 태스크를 완료하여 배포할 수 있는 Security Command Center에서 상황 리소스를 만듭니다. Google Cloud 콘솔을 사용하여 사전 정의된 상황 템플릿에서 상황을 만든 경우 상황 리소스가 자동으로 만들어집니다.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 페이지로 이동합니다.

    상황 관리로 이동

  2. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다.

  3. 상황 만들기를 클릭합니다. 기존 상황 또는 템플릿으로 시작하거나 리소스에 적용된 정책을 사용하여 상황을 만들 수 있습니다.

    기존 상황 또는 템플릿을 사용하여 상황 만들기

    1. 기존 상황 또는 템플릿으로 시작(상황 찾아보기)을 선택합니다.
    2. 자세 이름, 설명과 같은 상황 세부정보를 지정합니다.
    3. 상황 선택을 클릭합니다. 기존 상황 또는 템플릿을 기반으로 상황을 만들 수 있습니다.
      • 상황을 선택하여 기존 상황으로 상황을 만듭니다. 표시된 상황 목록에서 상황을 선택한 다음 선택한 상황에 사용할 수 있는 버전 목록에서 버전을 하나 이상 선택합니다.
      • 템플릿을 선택하여 템플릿을 사용하여 상황을 만든 다음 표시된 템플릿 목록에서 하나 이상의 템플릿을 선택합니다.
    4. 저장을 클릭합니다. 정책 세트 섹션에서 선택한 상황과 연결된 정책 세트 목록을 볼 수 있습니다.
    5. 정책 세트 목록에서 정책을 선택합니다. 이 페이지에서 정책을 수정하고 정책을 다른 정책 세트로 이동할 수도 있습니다. 동일한 정책 세트 내에 이름이 동일한 두 정책으로 상태를 만들 수 없습니다.
    6. 만들기를 클릭합니다.

    리소스에 적용된 정책을 사용하여 상황 만들기

    1. 리소스에 적용된 상황으로 시작(리소스 찾아보기)을 선택합니다.
    2. 자세 이름, 설명과 같은 상황 세부정보를 지정합니다.
    3. 리소스 선택을 클릭합니다.
    4. 표시된 리소스 목록에서 리소스를 선택하고 만들기를 클릭합니다.

    내가 만든 상황의 정보를 보여주는 상황 세부정보 페이지로 리디렉션됩니다. 해당 상황과 연결된 정책 세트를 볼 수 있습니다.

gcloud

  1. gcloud scc postures create 명령어를 실행하여 posture.yaml 파일을 사용해서 상황을 만듭니다.

    gcloud scc postures create POSTURE_NAME \
        --posture-from-file=POSTURE_FROM_FILE
    

    다음 값을 바꿉니다.

    • POSTURE_NAME은 상황의 상대적 리소스 이름입니다. 예를 들면 organizations/ORGANIZATION_ID/locations/global/postures/POSTURE_ID입니다.

      • POSTURE_ID는 조직에 고유한 상황의 영숫자 이름입니다. POSTURE_ID는 63자로 제한됩니다.

    예를 들어 organizations/3589215982 조직 아래에 posture-example-1 ID를 사용해서 상황을 만들려면 다음을 실행합니다.

    gcloud scc postures create \
        organizations/3589215982/locations/global/postures/posture-example-1 \
        --posture-from-file=posture.yaml
    

    상황 만들기 프로세스가 실패하면 상황을 삭제하고, 오류를 문제 해결한 후 다시 시도합니다.

  2. 상황이 성공적으로 생성되었는지 확인하려면 상황 보기를 참조하세요.

이 상황을 환경에 적용하려면 상황을 배포해야 합니다.

Terraform

상황 리소스에 대해 Terraform 구성을 만든 경우에는 코드형 인프라 파이프라인을 사용해서 이를 프로비저닝해야 합니다.

자세한 내용은 Google Cloud의 Terraform을 참조하세요.

상황 배포

상황을 만든 후 조직의 특정 리소스에 정책 및 정책의 정의를 적용하고 드리프트를 모니터링할 수 있도록 프로젝트, 폴더, 조직에 상황을 배포합니다. 프로젝트, 폴더, 조직에 상황을 하나만 배포할 수 있습니다.

상황 상태가 ACTIVE인지 확인합니다.

상황을 배포하면 다음 작업이 수행됩니다.

  • 조직 정책 및 Security Health Analytics 감지기의 정의가 적용됩니다.
  • 커스텀 조직 정책의 커스텀 제약조건은 제약조건 ID와 함께 생성되어 상황에서 정의한 제약조건 ID의 서픽스로 상황 버전 ID를 포함합니다.
  • 맞춤 모듈의 기본 상태는 사용 설정됨으로 설정됩니다.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 페이지로 이동합니다.

    상황 관리로 이동

  2. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다.

  3. 상황 탭에서 배포하려는 상황을 클릭합니다.

  4. 상황 세부정보 페이지에서 상황 버전을 선택합니다. 선택한 상황 버전이 활성 상태여야 합니다.

  5. 리소스에 적용을 클릭합니다.

  6. 선택을 클릭하여 상황을 배포하려는 조직, 폴더 또는 프로젝트를 선택합니다.

  7. 상황 적용을 클릭합니다.

gcloud

gcloud scc posture-deployments create 명령어를 실행하여 프로젝트, 폴더, 조직에 상황을 배포합니다.

gcloud scc posture-deployments create POSTURE_DEPLOYMENT_NAME \
    --posture-name=POSTURE_NAME \
    --posture-revision-id=POSTURE_REVISION_ID \
    --target-resource=TARGET_RESOURCE

다음 값을 바꿉니다.

  • POSTURE_DEPLOYMENT_NAME은 상황 배포에 대한 상대 리소스 이름입니다. 형식은 organizations/ORGANIZATION_ID/locations/global/postureDeployments/POSTURE_DEPLOYMENT_ID입니다.

  • LOCATIONglobal입니다.

  • POSTURE_ID는 조직에 고유한 상황의 영숫자 이름입니다.

  • --posture-name=POSTURE_NAME은 배포하려는 상황의 이름입니다. 형식은 organizations/ORGANIZATION_ID/locations/global/postures/POSTURE_ID입니다.

상황에 AWS와 관련된 감지기가 포함된 경우 조직 수준(미리보기)에서 상황을 배포해야 합니다.

예를 들어 상황을 배포하려면 다음 명령어를 실행합니다.

gcloud scc posture-deployments create \
  organizations/3589215982/locations/global/postureDeployments/postureDeployment123 \
  --posture-name=organizations/3589215982/locations/global/postures/StagingAIPosture \
  --posture-revision-id=version1 \
  --target-resource=projects/4589215982

명령어가 완료되면 상태 정보를 볼 수 있습니다. 상황 배포 만들기 프로세스가 실패하면 배포를 삭제하고, 오류 문제를 해결한 후 다시 시도합니다.

Terraform

Terraform 리소스를 만들어서 상황을 배포할 수 있습니다.

resource "google_securityposture_posture_deployment" "posture_deployment_example" {
  posture_deployment_id          = "<POSTURE_DEPLOYMENT_ID>"
  parent = "organizations/<ORGANIZATION_ID>"
  location = "global"
  description = "a new posture deployment"
  target_resource = "<TARGET_RESOURCE>"
  posture_id = "<POSTURE_NAME>"
  posture_revision_id = "<POSTURE_REVISION_ID>"
}

자세한 내용은 google_securityposture_posture_deployment를 참조하세요.

Terraform 리소스를 만든 후 코드형 인프라 파이프라인을 사용하여 이를 프로비저닝합니다.

상황 및 상황 배포 정보 보기

상황 및 상황 배포 정보를 확인하여 다음과 같은 정보를 참조할 수 있습니다.

  • 배포된 상황 및 상황이 적용된 리소스 계층 구조에서의 위치(조직, 프로젝트, 폴더)
  • 상황의 버전 및 상태
  • 상황 배포의 운영 세부정보

상황 보기

상태 및 정책 정의와 같은 상황에 대한 정보를 볼 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 페이지로 이동합니다.

    상황 관리로 이동

  2. Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직을 선택합니다.

  3. 상황 탭에서 확인하려는 상황을 클릭합니다. 상황 세부정보가 표시됩니다.

gcloud

gcloud scc postures describe 명령어를 실행하여 사용자가 만든 상황을 확인합니다.

gcloud scc postures describe POSTURE_NAME \
    --revision-id=REVISION_ID

다음 값을 바꿉니다.

  • POSTURE_NAME은 상황의 상대적 리소스 이름입니다. 예를 들면 organizations/ORGANIZATION_ID/locations/global/postures/POSTURE_ID입니다.

  • LOCATIONglobal입니다.

  • POSTURE_ID는 조직에 고유한 상황의 영숫자 이름입니다.

  • revision-id=REVISION_ID는 확인하려는 상황의 버전을 지정하는 선택적인 플래그입니다. 플래그를 포함하지 않으면 최신 버전이 반환됩니다.

예를 들어 이름이 organizations/3589215982/locations/global/postures/posture-example-1이고 버전 ID가 abcdefgh인 상황을 보려면 다음을 수행합니다.

gcloud scc postures describe \
    organizations/3589215982/locations/global/postures/posture-example-1 \
    --revision-id=abcdefgh

상황 배포 작업 관련 정보 보기

gcloud scc posture-operations describe 명령어를 실행하여 상황 배포 작업에 대한 작업 세부정보를 확인합니다.

gcloud scc posture-operations describe OPERATION_NAME

여기서 OPERATION_NAME은 작업의 상대 리소스 이름입니다. 형식은 organizations/ORGANIZATION_ID/locations/global/operations/OPERATION_ID입니다. OPERATION_ID는 상황 명령어를 실행할 때 --async 인수를 사용하여 얻을 수 있습니다.

예를 들어 이름이 organizations/3589215982/locations/global/operations/operation-1694515698847-605272e4bcd7c-f93dade6-067467ae인 스캔 작업을 보려면 다음을 실행합니다.

gcloud scc posture-operations describe \
    organizations/3589215982/locations/global/operations/operation-1694515698847-605272e4bcd7c-f93dade6-067467ae

상황 배포 정보 보기

상황이 배포된 위치 및 배포 상태를 볼 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 페이지로 이동합니다.

    상황 관리로 이동

  2. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다.

  3. 상황 탭에서 배포한 상황을 클릭합니다.

  4. 리소스 탭으로 이동하여 상황이 배포된 프로젝트, 폴더, 조직과 배포 상태를 확인합니다.

gcloud

gcloud scc posture-deployments describe 명령어를 실행하여 배포된 상황 관련 정보를 확인합니다.

gcloud scc posture-deployments describe
POSTURE_DEPLOYMENT_NAME

여기서 POSTURE_DEPLOYMENT_NAME은 상황 배포에 대한 상대 리소스 이름입니다. 형식은 organizations/ORGANIZATION_ID/locations/global/postureDeployments/POSTURE_DEPLOYMENT_ID입니다.

  • LOCATIONglobal입니다.
  • POSTURE_DEPLOYMENT_ID는 상황 배포의 고유 이름입니다.

예를 들어 이름이 organizations/3589215982/locations/global/postureDeployments/Posture-deployment-example-1인 상황 배포의 세부정보를 보려면 다음을 실행합니다.

gcloud scc posture-deployments describe \
    organizations/3589215982/locations/global/postureDeployments/Posture-deployment-example-1

상황 및 상황 배포 업데이트

다음을 업데이트할 수 있습니다.

  • 상황의 상태입니다.
  • 상황의 정책 정의입니다.
  • 상황이 배포된 조직, 폴더, 프로젝트입니다.

상황의 정책 정의 업데이트

Google Cloud 서비스를 추가로 사용 설정하거나, 리소스를 추가로 배포하거나, 신규 또는 변경되는 규정 준수 요구사항에 따라 추가 정책 요구되는 경우 상황 업데이트가 필요할 수 있습니다. 배포된 상황 버전을 업데이트하는 경우 이 태스크에서 새 상황 버전을 만듭니다. 그렇지 않으면 업데이트 명령어를 실행할 때 지정한 상황 버전이 업데이트됩니다.

  1. 텍스트 편집기에서 YAML 파일을 엽니다. 업데이트할 필드를 해당 값과 함께 추가합니다. 정책 집합을 업데이트하는 경우 이미 존재하는 정책 집합을 포함하여 상황에 포함할 모든 정책 집합이 파일에 포함되어 있는지 확인합니다. 자세한 내용은 상황 YAML 파일 수정을 참조하세요.
  2. gcloud scc postures update 명령어를 실행하여 상황을 업데이트합니다.

    gcloud scc postures update POSTURE_NAME \
        --posture-from-file=POSTURE_FROM_FILE \
        --revision-id=POSTURE_REVISION_ID \
        --update-mask=UPDATE_MASK
    

    다음 값을 바꿉니다.

    • POSTURE_NAME은 상황의 상대적 리소스 이름입니다. 예를 들면 organizations/ORGANIZATION_ID/locations/global/postures/POSTURE_ID입니다.

      • POSTURE_ID는 조직에 고유한 상황의 영숫자 이름입니다.
    • POSTURE_FROM_FILE은 변경사항이 포함된 posture.yaml 파일의 상대 또는 절대 경로입니다.

      • LOCATIONglobal입니다.
      • POSTURE_ID는 조직에 고유한 상황의 영숫자 이름입니다.
    • POSTURE_FROM_FILE은 변경사항이 포함된 posture.yaml 파일의 상대 또는 절대 경로입니다.

    • --revision-id=REVISION_ID는 배포하려는 상황 버전입니다. 상황이 이미 배포되었으면 보안 상황 서비스가 다른 버전 ID의 새로운 상황 버전을 자동으로 만들고 출력에 해당 버전 ID를 포함합니다.

    • --update-mask=UPDATE_MASK는 쉼표로 구분된 형식의 업데이트하려는 필드 목록입니다. 이 인수는 선택사항입니다. UPDATE_MASK를 다음 값 중 하나로 설정할 수 있습니다.

      • * 또는 지정되지 않음: 정책 집합 및 상황 설명에 수행한 변경사항을 적용합니다.
      • policy_sets: 정책 집합에 수행한 변경사항만 적용합니다.
      • description: 상황 설명에 수행한 변경사항만 적용합니다.
      • policy_sets, description: 정책 집합 및 상황 설명에 수행한 변경사항을 적용합니다.
      • state: 상황 변경사항만 적용합니다.

    organizations/3589215982/locations/global 조직 아래에서 이름이 posture-example-1이고 버전 ID가 abcd1234로 설정된 상황을 업데이트하려면 다음을 실행합니다.

    gcloud scc postures update \
        organizations/3589215982/locations/global/posture-example-1 \
        --posture-from-file=posture.yaml --revision-id=abcd1234 --update-mask=policy_sets
    

    상황 업데이트 프로세스가 실패하면 오류 문제를 해결한 후 다시 시도합니다.

  3. 상황이 성공적으로 업데이트되었는지 확인하려면 상황 보기를 참조하세요.

상황의 상태 변경

상황의 상태에 따라 프로젝트, 폴더, 조직에 대한 배포가 가능한지 여부가 결정됩니다.

상황의 상태는 다음과 같습니다.

  • DRAFT: 상황 버전 배포가 준비되지 않았습니다. DRAFT 상태인 상황 버전은 배포할 수 없습니다.
  • ACTIVE: 상황 버전을 배포할 수 있습니다. 상태를 ACTIVE에서 DRAFT 또는 DEPRECATED.로 변경할 수 있습니다.
  • DEPRECATED: DEPRECATED 상황 버전을 리소스에 배포할 수 없습니다. 상황 버전을 지원 중단하려면 먼저 상황의 모든 기존 상황 배포를 삭제해야 합니다. 지원 중단된 상황 버전을 다시 배포하려면 상태를 ACTIVE로 변경해야 합니다.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 페이지로 이동합니다.

    상황 관리로 이동

  2. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다.

  3. 상황 탭에서 업데이트할 상황을 클릭합니다.

  4. 상황 세부정보 페이지에서 수정을 클릭합니다.

  5. 상황 상태를 선택하고 저장을 클릭합니다.

gcloud

상황의 상태를 변경하려면 gcloud scc postures update 명령어를 실행합니다. 다른 필드를 업데이트하는 것과 동시에 상황 상태를 업데이트할 수 없습니다. gcloud scc postures update 명령어 실행에 대한 안내는 상황 YAML 파일 수정을 참조하세요.

상황 배포 업데이트

새 상황을 배포하거나 상황의 새 버전을 배포하려면 프로젝트, 폴더 또는 조직에서 상황 배포를 업데이트합니다.

업데이트하려는 상황 버전에 Google Cloud 콘솔을 사용하여 삭제된 커스텀 조직 제약조건이 포함된 경우 동일한 상황 ID를 사용하여 상황 배포를 업데이트할 수 없습니다. 조직 정책 서비스로 인해 이름이 동일한 커스텀 조직 제약조건을 만들 수 없습니다. 대신 새 버전의 상황을 만들거나 다른 상황 ID를 사용해야 합니다.

또한 업데이트 프로세스의 일환으로 삭제된 정책 배포의 발견사항은 비활성화됩니다.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 페이지로 이동합니다.

    상황 관리로 이동

  2. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다.

  3. 상황 탭에서 업데이트하려는 상황을 클릭합니다.

  4. 상황 세부정보 페이지에서 상황 버전을 선택합니다.

  5. 리소스에 적용을 클릭합니다.

  6. 선택을 클릭하여 상황을 배포하려는 조직, 폴더 또는 프로젝트를 선택합니다. 배포가 이미 있다는 메시지가 표시되면 다시 시도하기 전에 배포를 삭제합니다.

gcloud

gcloud scc posture-deployments update 명령어를 실행하여 상황을 배포합니다.

gcloud scc posture-deployments update POSTURE_DEPLOYMENT_NAME \
    --description=DESCRIPTION \
    --update-mask=UPDATE_MASK \
    --posture-id=POSTURE_ID \
    --posture-revision-id=POSTURE_REVISION_ID

다음 값을 바꿉니다.

  • POSTURE_DEPLOYMENT_NAME은 상황 배포에 대한 상대 리소스 이름입니다. 형식은 organizations/ORGANIZATION_ID/locations/global/postureDeployments/POSTURE_DEPLOYMENT_ID입니다.

    • POSTURE_DEPLOYMENT_ID는 상황 배포의 고유 이름입니다.
  • --description=DESCRIPTION은 배포된 상황에 대한 선택적인 설명입니다.

  • --posture-id=POSTURE_ID는 조직에 고유한 상황의 이름입니다. 형식은 organizations/ORGANIZATION_ID/locations/global/postures/POSTURE_NAME입니다.

  • --posture-revision-id=POSTURE_REVISION_ID는 배포하려는 상황 버전입니다. 이 버전은 상황 만들기 또는 상황 보기 시에 수신되는 응답으로부터 얻을 수 있습니다.

  • --update-mask=UPDATE_MASK는 쉼표로 구분된 형식의 업데이트하려는 필드 목록입니다. 이 인수는 선택사항입니다.

예를 들어 다음 기준에 따라 상황 배포를 업데이트합니다.

  • 조직: organizations/3589215982/locations/global
  • 상황 배포 ID: postureDeploymentexample
  • 상황 ID: StagingAIPosture
  • 버전: version2

다음 명령어를 실행합니다.

gcloud scc posture-deployments update \
    organizations/3589215982/locations/global/postureDeployments/postureDeploymentexample \
    --posture-id=organizations/3589215982/locations/global/postures/StagingAIPosture \
    --posture-revision-id=version2

명령어가 완료되면 상태 정보를 볼 수 있습니다. 상황 배포 업데이트 프로세스가 실패하면 배포를 삭제하고, 오류 문제를 해결한 후 다시 시도합니다.

상황 드리프트 모니터링

보안 상황 내에서 정의된 정책으로부터 배포된 상황의 드리프트를 모니터링할 수 있습니다. 드리프트는 상황 외부에서 발생하는 정책에 대한 변경사항입니다. 예를 들어 드리프트는 관리자가 상황 배포를 업데이트하는 대신 콘솔에서 정책 정의를 변경할 때 발생합니다.

보안 상황 서비스는 드리프트가 발생할 때마다 Google Cloud 콘솔 또는 gcloud CLI에서 볼 수 있는 발견 항목을 만듭니다.

콘솔

Vertex AI 워크로드에 적용되는 상태를 만든 경우 발견 항목 페이지 및 개요 페이지의 두 가지 방법으로 드리프트를 모니터링할 수 있습니다. 다른 모든 상황의 경우 발견 항목 페이지에서 드리프트를 모니터링할 수 있습니다.

발견 항목 페이지에서 드리프트를 모니터링하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 발견 항목 페이지로 이동합니다.

    발견 항목으로 이동

  2. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다.

  3. 빠른 필터 창에서 상황 위반 발견 항목을 선택합니다. 쿼리 미리보기에 다음 필터를 입력할 수도 있습니다.

    state="ACTIVE" AND NOT mute="MUTED" AND finding_class="POSTURE_VIOLATION"
    
  4. 발견 항목의 세부정보를 보려면 발견 항목을 클릭합니다.

개요 페이지에서 드리프트를 모니터링하려면 다음 안내를 따르세요(Vertex AI 워크로드만 해당). 1 Google Cloud 콘솔에서 개요 페이지로 이동합니다.

개요로 이동

1. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다. 1. AI 워크로드 발견 항목 창을 검토합니다.

  • 취약점 탭에는 Vertex AI 워크로드에 특별히 적용되는 Security Health Analytics 커스텀 모듈과 관련된 모든 취약점이 표시됩니다.
  • 정책 드리프트 탭에는 상황에 적용한 Vertex AI 조직 정책과 관련된 모든 드리프트가 표시됩니다.
  • 발견 항목의 세부정보를 보려면 발견 항목을 클릭합니다.

gcloud

gcloud CLI에서 드리프트 발견 항목을 보려면 다음을 실행합니다.

gcloud scc findings list ORGANIZATION_ID \
    --filter="category=\"SECURITY_POSTURE_DRIFT\""

여기서 ORGANIZATION_ID는 조직의 ID입니다.

이러한 발견 항목에 대한 자세한 내용은 보안 상황 서비스 발견 항목을 참조하세요. 이러한 발견 항목은 Security Command Center에서 기타 발견 항목을 내보내는 것과 동일한 방식으로 내보낼 수 있습니다. 자세한 내용은 통합 옵션Security Command Center 데이터 내보내기를 참조하세요.

드리프트 발견 항목을 비활성화하려면 동일한 상황 ID 및 상황 버전으로 상황 배포를 업데이트할 수 있습니다.

테스트 목적으로 드리프트 발견 항목 생성

상황을 배포한 후 정책에서 드리프트를 모니터링할 수 있습니다. 테스트 환경에서 드리프트 발견 항목이 어떻게 작동하는지 확인하려면 다음을 수행합니다.

  1. 콘솔에서 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  2. 배포된 상황에 정의한 정책 중 하나를 수정합니다. 예를 들어 사전 정의된 보안 AI 상황을 사용하는 경우 새 Vertex AI Workbench 노트북 및 인스턴스에서 공개 IP 액세스 제한 정책을 수정할 수 있습니다.

  3. 정책을 변경한 후 정책 설정을 클릭합니다.

  4. 발견 항목 페이지로 이동합니다.

    발견 항목으로 이동

  5. 빠른 필터 창의 소스 표시 이름 섹션에서 보안 상황을 선택합니다. 변경사항 관련 발견 항목이 5분 내에 표시됩니다.

  6. 발견 항목의 세부정보를 보려면 발견 항목을 클릭합니다.

상황 배포 삭제

상황이 올바르게 배포되지 않았거나, 특정 상황이 더 이상 필요하지 않거나, 특정 상황을 더 이상 프로젝트, 폴더, 조직에 할당하지 않으려는 경우 상황 배포를 삭제할 수 있습니다. 상황 배포를 삭제하려면 상황 배포가 다음 상태 중 하나여야 합니다.

  • ACTIVE
  • CREATE_FAILED
  • UPDATE_FAILED
  • DELETE_FAILED

상황 배포 상태를 확인하려면 상황 배포 관련 정보 보기를 참조하세요.

상황 배포를 삭제하면 이를 할당한 리소스(조직, 폴더, 프로젝트)에서 상황이 삭제됩니다. 또한 연결된 발견 항목도 비활성화됩니다.

다양한 유형의 정책에 대한 출력은 다음과 같습니다.

  • 맞춤 조직 정책이 포함된 상태 프로필 배포를 삭제하면 맞춤 조직 정책이 삭제됩니다. 하지만 커스텀 제약조건은 계속 존재합니다.
  • 기본 제공되는 Security Health Analytics 감지기가 포함된 상황 배포를 삭제할 경우 Security Health Analytics 모듈의 최종 상태는 배포가 존재하는 조직, 폴더 또는 프로젝트에 따라 달라집니다.

    • 폴더 또는 프로젝트에 상황을 배포한 경우 기본 제공 Security Health Analytics 감지기는 상위 조직 또는 폴더에서 상태를 상속합니다.
    • 조직 수준에서 상황을 배포한 경우 기본 제공 Security Health Analytics 감지기가 기본 상태로 되돌아갑니다. 기본 상태에 대한 설명은 감지기 사용 설정 및 중지를 참조하세요.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 페이지로 이동합니다.

    상황 관리로 이동

  2. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다.

  3. 상황 탭에서 할당된 리소스에서 삭제하려는 상황을 클릭합니다.

  4. 상황 세부정보 페이지에서 상황 버전을 선택하고 리소스로 이동합니다.

  5. 현재 활성 상태 버전이 배포된 리소스 목록에서 삭제를 클릭합니다.

gcloud

gcloud scc posture-deployments delete 명령어를 실행하여 상황 배포를 삭제합니다.

gcloud scc posture-deployments deletePOSTURE_DEPLOYMENT_NAME

POSTURE_DEPLOYMENT_NAME은 상황 배포에 대한 상대 리소스 이름입니다. 형식은 organizations/ORGANIZATION_ID/locations/global/postureDeployments/POSTURE_DEPLOYMENT_ID입니다.

  • POSTURE_DEPLOYMENT_ID는 상황 배포의 고유 이름입니다.

예를 들어 이름이 organizations/3589215982/locations/global/postureDeployments/posture-deployment-example-1인 상황 배포를 삭제하려면 다음을 실행합니다.

gcloud scc posture-deployments delete \
    organizations/3589215982/locations/global/postureDeployments/posture-deployment-example-1

상황 삭제

상황을 삭제하면 모든 버전도 삭제됩니다. 버전이 배포된 경우 상황을 삭제할 수 없습니다. 이 태스크를 완료하려면 먼저 모든 상황 배포를 삭제해야 합니다.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 페이지로 이동합니다.

    상황 관리로 이동

  2. 표시된 조직이 Security Command Center 프리미엄 또는 Enterprise 등급을 활성화한 조직인지 확인합니다.

  3. 상황 탭에서 삭제하려는 상황을 클릭합니다.

  4. 상황 세부정보 페이지에서 삭제를 클릭합니다.

gcloud

gcloud scc postures delete 명령어를 실행하여 상황을 삭제합니다.

gcloud scc postures delete POSTURE_NAME

POSTURE_NAME는 상황의 상대적 리소스 이름입니다. 예를 들면 organizations/ORGANIZATION_ID/locations/global/postures/POSTURE_ID입니다. 상황 ID는 조직에 고유한 상황의 영숫자 이름입니다.

예를 들어 이름이 organizations/3589215982/locations/global/postures/posture-example-1인 상황을 삭제하려면 다음을 실행합니다.

gcloud scc postures delete \
    organizations/3589215982/locations/global/postures/posture-example-1

다음 단계