InfoGrab Docs

인스턴스 전체 규정 준수 및 보안 정책 관리

요약

단일 중앙 집중식 위치에서 여러 그룹 및 프로젝트에 걸쳐 보안 정책과 규정 준수 프레임워크를 적용하기 위해 인스턴스 관리자는 규정 준수 및 보안 정책(CSP) 그룹을 지정할 수 있습니다. 인스턴스 전체 규정 준수 및 보안 정책 관리를 설정하려면 규정 준수 및 보안 정책 그룹을 지정하고 해당 그룹에 정책과 규정 준수 프레임워크를 생성합니다.

히스토리

단일 중앙 집중식 위치에서 여러 그룹 및 프로젝트에 걸쳐 보안 정책과 규정 준수 프레임워크를 적용하기 위해 인스턴스 관리자는 규정 준수 및 보안 정책(CSP) 그룹을 지정할 수 있습니다. 이를 통해 인스턴스 관리자는:

  • 인스턴스 전체에 자동으로 적용되는 보안 정책을 생성하고 구성합니다.
  • 다른 최상위 그룹에서 사용할 수 있도록 중앙 집중식 규정 준수 프레임워크를 생성합니다.
  • 규정 준수 프레임워크, 그룹, 프로젝트 또는 전체 인스턴스에 정책 범위를 지정합니다.
  • 어떤 정책이 어디에서 활성화되어 있는지 이해하기 위한 포괄적인 정책 커버리지를 봅니다.
  • 팀이 자체 추가 정책과 프레임워크를 생성할 수 있도록 하면서 중앙 집중식 제어를 유지합니다.

사전 요구사항#

  • GitLab 18.2 이상.
  • 인스턴스 관리자여야 합니다.
  • 규정 준수 및 보안 정책 그룹으로 사용할 기존 최상위 그룹이 있어야 합니다.
  • REST API 사용(선택 사항)을 위해 관리자 액세스 권한이 있는 토큰이 있어야 합니다.

인스턴스 전체 규정 준수 및 보안 정책 관리 설정#

인스턴스 전체 규정 준수 및 보안 정책 관리를 설정하려면 규정 준수 및 보안 정책 그룹을 지정하고 해당 그룹에 정책과 규정 준수 프레임워크를 생성합니다.

규정 준수 및 보안 정책 그룹 지정#

GitLab UI 또는 REST API를 사용하여 규정 준수 및 보안 정책 그룹을 지정할 수 있습니다.

GitLab UI 사용#

  1. 오른쪽 상단에서 관리자를 선택합니다.
  2. 왼쪽 사이드바에서 설정 > 보안 및 규정 준수를 선택합니다.
  3. CSP 그룹 지정 섹션에서 드롭다운 목록에서 기존 최상위 그룹을 선택합니다.
  4. 변경 사항 저장을 선택합니다.

REST API 사용#

REST API를 사용하여 프로그래밍 방식으로 규정 준수 및 보안 정책 그룹을 지정할 수도 있습니다. API는 자동화나 여러 인스턴스를 관리할 때 유용합니다.

규정 준수 및 보안 정책 그룹을 설정하려면:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{"csp_namespace_id": 123456}' \
  --url "https://gitlab.example.com/api/v4/admin/security/policy_settings"

규정 준수 및 보안 정책 그룹을 지우려면:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{"csp_namespace_id": null}' \
  --url "https://gitlab.example.com/api/v4/admin/security/policy_settings"

현재 규정 준수 및 보안 정책 설정을 가져오려면:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/admin/security/policy_settings"

자세한 내용은 정책 설정 API 문서를 참조하십시오.

선택한 그룹이 규정 준수 및 보안 정책 그룹이 되어 인스턴스 전체의 보안 정책과 규정 준수 프레임워크를 관리하는 중앙 장소 역할을 합니다.

규정 준수 및 보안 정책 그룹의 보안 정책 관리#

보안 정책에 대해서는 규정 준수 및 보안 정책 그룹 문서를 참조하십시오.

중앙 집중식 규정 준수 프레임워크 관리#

규정 준수 및 보안 정책 그룹을 지정한 후 인스턴스의 모든 최상위 그룹에서 자동으로 사용할 수 있는 규정 준수 프레임워크를 생성할 수 있습니다. 이는 조직 전체에 걸쳐 규정 준수에 대한 일관된 접근 방식을 제공합니다.

규정 준수 및 보안 정책 그룹에서 생성된 규정 준수 프레임워크:

  • 인스턴스의 다른 최상위 그룹에서 볼 수 있고 사용할 수 있습니다.
  • 그룹 소유자가 프로젝트에 적용할 수 있습니다.
  • 규정 준수 및 보안 정책 그룹 외부의 사용자에게는 읽기 전용입니다.
  • 향상된 규정 준수 시행을 위해 보안 정책과 통합할 수 있습니다.

중앙 집중식 규정 준수 프레임워크 생성 및 관리에 대한 자세한 지침은 중앙 집중식 규정 준수 프레임워크를 참조하십시오.

사용자 워크플로우#

인스턴스 관리자#

인스턴스 관리자는:

  1. 기존 최상위 그룹에서 규정 준수 및 보안 정책 그룹을 지정합니다.
  2. 지정된 그룹에 보안 정책을 생성합니다.
  3. 지정된 그룹에 규정 준수 프레임워크를 생성합니다.
  4. 정책이 적용되는 위치를 결정하도록 정책 범위를 구성합니다.
  5. 특정 프레임워크가 있는 프로젝트에 정책을 적용하도록 규정 준수 프레임워크에 정책 범위를 지정합니다.
  6. 그룹과 프로젝트 전체에서 어떤 정책이 활성화되어 있는지 이해하기 위해 정책 커버리지를 봅니다.
  7. 필요에 따라 중앙 집중식 정책과 프레임워크를 편집하고 관리합니다.

그룹 관리자 및 소유자#

그룹 관리자 및 소유자는:

  • 로컬에서 정의된 정책과 중앙 관리 정책 모두를 포함하여 보안 > 정책에서 적용 가능한 모든 정책을 볼 수 있습니다.
  • 그룹의 프로젝트에 중앙 집중식 규정 준수 프레임워크를 보고 적용할 수 있습니다.
  • 중앙 관리 정책 및 프레임워크 외에 특정 그룹이나 프로젝트의 정책 및 프레임워크를 생성할 수 있습니다.
  • 정책이 팀에서 나온 것인지 중앙 관리에서 나온 것인지 명확히 나타내는 지표로 정책 출처를 이해할 수 있습니다.
Note

정책 페이지에는 현재 그룹에 적용된 규정 준수 및 보안 정책 그룹의 정책만 표시됩니다.

프로젝트 관리자 및 소유자#

프로젝트 관리자 및 소유자는:

  • 로컬에서 정의된 정책과 중앙 관리 정책 모두를 포함하여 보안 > 정책에서 적용 가능한 모든 정책을 볼 수 있습니다.
  • 중앙 집중식 프레임워크를 포함하여 프로젝트에 적용된 규정 준수 프레임워크를 볼 수 있습니다.
  • 중앙 관리 정책 외에 프로젝트별 정책을 생성할 수 있습니다.
  • 정책이 프로젝트, 그룹 또는 중앙 관리에서 나온 것인지 명확히 나타내는 지표로 정책 출처를 이해할 수 있습니다.
Note

정책 페이지에는 현재 그룹에 적용된 규정 준수 및 보안 정책의 정책만 표시됩니다.

개발자#

개발자는:

  • 보안 > 정책에서 작업에 적용되는 모든 보안 정책을 볼 수 있습니다.
  • 작업하는 프로젝트에 적용된 규정 준수 프레임워크를 볼 수 있습니다.
  • 중앙에서 규정된 정책에 대한 명확한 가시성을 통해 보안 및 규정 준수 요구사항을 이해할 수 있습니다.

보안 정책 프로젝트에서 마이그레이션 자동화#

여러 그룹에 걸쳐 정책을 적용하기 위해 보안 정책 프로젝트를 이미 사용하는 경우 연결된 그룹 중 하나를 규정 준수 및 보안 정책 그룹으로 지정할 수 있습니다. 그러나 규정 준수 및 보안 정책 그룹이 아닌 모든 그룹에서 보안 정책 프로젝트의 연결을 해제해야 합니다. 그렇지 않으면 동일한 정책이 해당 그룹에서 두 번 적용됩니다. 한 번은 연결된 보안 정책 그룹에서, 한 번은 규정 준수 및 보안 정책 그룹에서 적용됩니다.

그룹을 규정 준수 및 보안 정책 그룹으로 마이그레이션하는 프로세스를 자동화하려면 다음 csp_designation.rb 스크립트를 사용할 수 있습니다.

스크립트는 지정된 백업 파일에 규정 준수 및 보안 정책 그룹의 정책 프로젝트에 연결된 모든 그룹의 ID를 저장합니다. 필요한 경우 보안 정책 프로젝트에 대한 링크를 포함하여 이전 상태를 복원할 수 있습니다.

사전 요구사항:

  • 규정 준수 및 보안 정책 그룹으로 지정하려는 그룹에 연결된 보안 정책 프로젝트가 있어야 합니다.

스크립트를 사용하려면:

  1. 다음 섹션에서 전체 csp_designation.rb 스크립트를 복사합니다.

  2. 터미널 창에서 인스턴스에 연결합니다.

  3. csp_designation.rb라는 새 파일을 생성하고 새 파일에 스크립트를 붙여넣습니다.

  4. 다음 명령을 실행하여 규정 준수 및 보안 정책 그룹을 할당하고 다음을 변경합니다:

    • <group_id>를 규정 준수 및 보안 정책 그룹으로 설정하려는 그룹의 GitLab ID로.
    • 첫 번째 /path/to/ 인스턴스를 백업 파일의 원하는 디렉터리의 전체 경로로.
    • 두 번째 /path/to/ 인스턴스를 csp_designation.rb 파일을 저장한 디렉터리의 전체 경로로.
    CSP_GROUP_ID=<group-id> BACKUP_FILENAME="/path/to/csp_backup.txt" ACTION=assign sudo gitlab-rails runner /path/to/csp_designation.rb
    
  5. 선택 사항. 전체 변경사항을 되돌려야 하는 경우 이전에 사용한 것과 동일한 그룹 ID, 백업 파일 경로, 스크립트 경로를 사용하여 이 명령을 실행합니다:

    CSP_GROUP_ID=<group-id> BACKUP_FILENAME="/path/to/csp_backup.txt" ACTION=unassign sudo gitlab-rails runner /path/to/csp_designation.rb
    

자세한 내용은 Rails Runner 문제 해결 섹션을 참조하십시오.

csp_designation.rb#

class CspDesignation
  def initialize(csp_group_id, backup_filename)
    @backup_filename = backup_filename
    @csp_group = Group.find_by_id(csp_group_id)
    @csp_configuration = @csp_group&.security_orchestration_policy_configuration
    @user = @csp_configuration&.policy_last_updated_by
    @spp = @csp_configuration&.security_policy_management_project
  end

  def assign
    check_spp!

    config_ids, group_ids = Security::OrchestrationPolicyConfiguration.for_management_project(@spp)
                                                                      .where.not(namespace: @csp_group)
                                                                      .pluck(:id, :namespace_id)
                                                                      .transpose
    if group_ids.present?
      puts "Saving group IDs to #{@backup_filename} as backup: #{group_ids}..."
      File.write(@backup_filename, "#{group_ids.join("\n")}\n")
    end

    puts "Setting #{@csp_group.full_path} as CSP..."
    Security::PolicySetting.in_organization(Organizations::Organization.default_organization).update! csp_namespace: @csp_group

    if config_ids.present?
      puts "Unassigning the policy project #{@spp.id} from the groups in the background to remove duplicate policies..."
      config_ids.each do |config_id|
        ::Security::DeleteOrchestrationConfigurationWorker.perform_async(
          config_id, @user.id, @spp.id
        )
      end
    end
    puts "Done."
  end

  def unassign
    check_spp!

    puts "Unassigning #{@csp_group.full_path} as CSP..."
    Security::PolicySetting.in_organization(Organizations::Organization.default_organization).update! csp_namespace: nil

    if File.exist?(@backup_filename)
      puts "Reading group IDs from #{@backup_filename} to restore the policy project links..."
      namespace_ids = File.read(@backup_filename).split("\n").map(&:to_i).reject(&:zero?)
      Namespace.id_in(namespace_ids).find_each(batch_size: 100) do |namespace|
        puts "Assigning the policy project to #{namespace.full_path}..."
        result = ::Security::Orchestration::AssignService.new(
          container: namespace, current_user: @user,
          params: { policy_project_id: @spp.id }
        ).execute
        puts "Failed to assign policy project to #{namespace.full_path}: #{result[:message]}" if result.error?
      end
    end
  end

  private

  def check_spp!
    raise "CSP policy project doesn't exist" if @spp.blank?
  end
end

SUPPORTED_ACTIONS = %w[assign unassign].freeze
action = ENV['ACTION']
csp_group_id = ENV['CSP_GROUP_ID']
backup_filename = ENV['BACKUP_FILENAME']
raise "Unknown action: #{action}. Use either 'assign' or 'unassign'." unless action.in? SUPPORTED_ACTIONS
raise "Missing CSP_GROUP_ID" if csp_group_id.blank?
raise "Missing BACKUP_FILENAME" if backup_filename.blank?

CspDesignation.new(csp_group_id, backup_filename).public_send(action)

문제 해결#

규정 준수 및 보안 정책 그룹을 지정할 수 없음

  • 인스턴스 관리자 권한이 있는지 확인합니다.
  • 그룹이 최상위 그룹(하위 그룹이 아님)인지 확인합니다.
  • 그룹이 존재하고 접근 가능한지 확인합니다.

피드백 및 지원#

이것은 베타 릴리스이므로 사용자 피드백이 권장됩니다. 다음을 통해 경험, 제안 및 문제를 공유하십시오:

관련 항목#

인스턴스 전체 규정 준수 및 보안 정책 관리

Tier: Ultimate
Offering: GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

단일 중앙 집중식 위치에서 여러 그룹 및 프로젝트에 걸쳐 보안 정책과 규정 준수 프레임워크를 적용하기 위해 인스턴스 관리자는 규정 준수 및 보안 정책(CSP) 그룹을 지정할 수 있습니다. 인스턴스 전체 규정 준수 및 보안 정책 관리를 설정하려면 규정 준수 및 보안 정책 그룹을 지정하고 해당 그룹에 정책과 규정 준수 프레임워크를 생성합니다.

히스토리

단일 중앙 집중식 위치에서 여러 그룹 및 프로젝트에 걸쳐 보안 정책과 규정 준수 프레임워크를 적용하기 위해 인스턴스 관리자는 규정 준수 및 보안 정책(CSP) 그룹을 지정할 수 있습니다. 이를 통해 인스턴스 관리자는:

  • 인스턴스 전체에 자동으로 적용되는 보안 정책을 생성하고 구성합니다.
  • 다른 최상위 그룹에서 사용할 수 있도록 중앙 집중식 규정 준수 프레임워크를 생성합니다.
  • 규정 준수 프레임워크, 그룹, 프로젝트 또는 전체 인스턴스에 정책 범위를 지정합니다.
  • 어떤 정책이 어디에서 활성화되어 있는지 이해하기 위한 포괄적인 정책 커버리지를 봅니다.
  • 팀이 자체 추가 정책과 프레임워크를 생성할 수 있도록 하면서 중앙 집중식 제어를 유지합니다.

사전 요구사항#

  • GitLab 18.2 이상.
  • 인스턴스 관리자여야 합니다.
  • 규정 준수 및 보안 정책 그룹으로 사용할 기존 최상위 그룹이 있어야 합니다.
  • REST API 사용(선택 사항)을 위해 관리자 액세스 권한이 있는 토큰이 있어야 합니다.

인스턴스 전체 규정 준수 및 보안 정책 관리 설정#

인스턴스 전체 규정 준수 및 보안 정책 관리를 설정하려면 규정 준수 및 보안 정책 그룹을 지정하고 해당 그룹에 정책과 규정 준수 프레임워크를 생성합니다.

규정 준수 및 보안 정책 그룹 지정#

GitLab UI 또는 REST API를 사용하여 규정 준수 및 보안 정책 그룹을 지정할 수 있습니다.

GitLab UI 사용#

  1. 오른쪽 상단에서 관리자를 선택합니다.
  2. 왼쪽 사이드바에서 설정 > 보안 및 규정 준수를 선택합니다.
  3. CSP 그룹 지정 섹션에서 드롭다운 목록에서 기존 최상위 그룹을 선택합니다.
  4. 변경 사항 저장을 선택합니다.

REST API 사용#

REST API를 사용하여 프로그래밍 방식으로 규정 준수 및 보안 정책 그룹을 지정할 수도 있습니다. API는 자동화나 여러 인스턴스를 관리할 때 유용합니다.

규정 준수 및 보안 정책 그룹을 설정하려면:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{"csp_namespace_id": 123456}' \
  --url "https://gitlab.example.com/api/v4/admin/security/policy_settings"

규정 준수 및 보안 정책 그룹을 지우려면:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{"csp_namespace_id": null}' \
  --url "https://gitlab.example.com/api/v4/admin/security/policy_settings"

현재 규정 준수 및 보안 정책 설정을 가져오려면:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/admin/security/policy_settings"

자세한 내용은 정책 설정 API 문서를 참조하십시오.

선택한 그룹이 규정 준수 및 보안 정책 그룹이 되어 인스턴스 전체의 보안 정책과 규정 준수 프레임워크를 관리하는 중앙 장소 역할을 합니다.

규정 준수 및 보안 정책 그룹의 보안 정책 관리#

보안 정책에 대해서는 규정 준수 및 보안 정책 그룹 문서를 참조하십시오.

중앙 집중식 규정 준수 프레임워크 관리#

규정 준수 및 보안 정책 그룹을 지정한 후 인스턴스의 모든 최상위 그룹에서 자동으로 사용할 수 있는 규정 준수 프레임워크를 생성할 수 있습니다. 이는 조직 전체에 걸쳐 규정 준수에 대한 일관된 접근 방식을 제공합니다.

규정 준수 및 보안 정책 그룹에서 생성된 규정 준수 프레임워크:

  • 인스턴스의 다른 최상위 그룹에서 볼 수 있고 사용할 수 있습니다.
  • 그룹 소유자가 프로젝트에 적용할 수 있습니다.
  • 규정 준수 및 보안 정책 그룹 외부의 사용자에게는 읽기 전용입니다.
  • 향상된 규정 준수 시행을 위해 보안 정책과 통합할 수 있습니다.

중앙 집중식 규정 준수 프레임워크 생성 및 관리에 대한 자세한 지침은 중앙 집중식 규정 준수 프레임워크를 참조하십시오.

사용자 워크플로우#

인스턴스 관리자#

인스턴스 관리자는:

  1. 기존 최상위 그룹에서 규정 준수 및 보안 정책 그룹을 지정합니다.
  2. 지정된 그룹에 보안 정책을 생성합니다.
  3. 지정된 그룹에 규정 준수 프레임워크를 생성합니다.
  4. 정책이 적용되는 위치를 결정하도록 정책 범위를 구성합니다.
  5. 특정 프레임워크가 있는 프로젝트에 정책을 적용하도록 규정 준수 프레임워크에 정책 범위를 지정합니다.
  6. 그룹과 프로젝트 전체에서 어떤 정책이 활성화되어 있는지 이해하기 위해 정책 커버리지를 봅니다.
  7. 필요에 따라 중앙 집중식 정책과 프레임워크를 편집하고 관리합니다.

그룹 관리자 및 소유자#

그룹 관리자 및 소유자는:

  • 로컬에서 정의된 정책과 중앙 관리 정책 모두를 포함하여 보안 > 정책에서 적용 가능한 모든 정책을 볼 수 있습니다.
  • 그룹의 프로젝트에 중앙 집중식 규정 준수 프레임워크를 보고 적용할 수 있습니다.
  • 중앙 관리 정책 및 프레임워크 외에 특정 그룹이나 프로젝트의 정책 및 프레임워크를 생성할 수 있습니다.
  • 정책이 팀에서 나온 것인지 중앙 관리에서 나온 것인지 명확히 나타내는 지표로 정책 출처를 이해할 수 있습니다.
Note

정책 페이지에는 현재 그룹에 적용된 규정 준수 및 보안 정책 그룹의 정책만 표시됩니다.

프로젝트 관리자 및 소유자#

프로젝트 관리자 및 소유자는:

  • 로컬에서 정의된 정책과 중앙 관리 정책 모두를 포함하여 보안 > 정책에서 적용 가능한 모든 정책을 볼 수 있습니다.
  • 중앙 집중식 프레임워크를 포함하여 프로젝트에 적용된 규정 준수 프레임워크를 볼 수 있습니다.
  • 중앙 관리 정책 외에 프로젝트별 정책을 생성할 수 있습니다.
  • 정책이 프로젝트, 그룹 또는 중앙 관리에서 나온 것인지 명확히 나타내는 지표로 정책 출처를 이해할 수 있습니다.
Note

정책 페이지에는 현재 그룹에 적용된 규정 준수 및 보안 정책의 정책만 표시됩니다.

개발자#

개발자는:

  • 보안 > 정책에서 작업에 적용되는 모든 보안 정책을 볼 수 있습니다.
  • 작업하는 프로젝트에 적용된 규정 준수 프레임워크를 볼 수 있습니다.
  • 중앙에서 규정된 정책에 대한 명확한 가시성을 통해 보안 및 규정 준수 요구사항을 이해할 수 있습니다.

보안 정책 프로젝트에서 마이그레이션 자동화#

여러 그룹에 걸쳐 정책을 적용하기 위해 보안 정책 프로젝트를 이미 사용하는 경우 연결된 그룹 중 하나를 규정 준수 및 보안 정책 그룹으로 지정할 수 있습니다. 그러나 규정 준수 및 보안 정책 그룹이 아닌 모든 그룹에서 보안 정책 프로젝트의 연결을 해제해야 합니다. 그렇지 않으면 동일한 정책이 해당 그룹에서 두 번 적용됩니다. 한 번은 연결된 보안 정책 그룹에서, 한 번은 규정 준수 및 보안 정책 그룹에서 적용됩니다.

그룹을 규정 준수 및 보안 정책 그룹으로 마이그레이션하는 프로세스를 자동화하려면 다음 csp_designation.rb 스크립트를 사용할 수 있습니다.

스크립트는 지정된 백업 파일에 규정 준수 및 보안 정책 그룹의 정책 프로젝트에 연결된 모든 그룹의 ID를 저장합니다. 필요한 경우 보안 정책 프로젝트에 대한 링크를 포함하여 이전 상태를 복원할 수 있습니다.

사전 요구사항:

  • 규정 준수 및 보안 정책 그룹으로 지정하려는 그룹에 연결된 보안 정책 프로젝트가 있어야 합니다.

스크립트를 사용하려면:

  1. 다음 섹션에서 전체 csp_designation.rb 스크립트를 복사합니다.

  2. 터미널 창에서 인스턴스에 연결합니다.

  3. csp_designation.rb라는 새 파일을 생성하고 새 파일에 스크립트를 붙여넣습니다.

  4. 다음 명령을 실행하여 규정 준수 및 보안 정책 그룹을 할당하고 다음을 변경합니다:

    • <group_id>를 규정 준수 및 보안 정책 그룹으로 설정하려는 그룹의 GitLab ID로.
    • 첫 번째 /path/to/ 인스턴스를 백업 파일의 원하는 디렉터리의 전체 경로로.
    • 두 번째 /path/to/ 인스턴스를 csp_designation.rb 파일을 저장한 디렉터리의 전체 경로로.
    CSP_GROUP_ID=<group-id> BACKUP_FILENAME="/path/to/csp_backup.txt" ACTION=assign sudo gitlab-rails runner /path/to/csp_designation.rb
    
  5. 선택 사항. 전체 변경사항을 되돌려야 하는 경우 이전에 사용한 것과 동일한 그룹 ID, 백업 파일 경로, 스크립트 경로를 사용하여 이 명령을 실행합니다:

    CSP_GROUP_ID=<group-id> BACKUP_FILENAME="/path/to/csp_backup.txt" ACTION=unassign sudo gitlab-rails runner /path/to/csp_designation.rb
    

자세한 내용은 Rails Runner 문제 해결 섹션을 참조하십시오.

csp_designation.rb#

class CspDesignation
  def initialize(csp_group_id, backup_filename)
    @backup_filename = backup_filename
    @csp_group = Group.find_by_id(csp_group_id)
    @csp_configuration = @csp_group&.security_orchestration_policy_configuration
    @user = @csp_configuration&.policy_last_updated_by
    @spp = @csp_configuration&.security_policy_management_project
  end

  def assign
    check_spp!

    config_ids, group_ids = Security::OrchestrationPolicyConfiguration.for_management_project(@spp)
                                                                      .where.not(namespace: @csp_group)
                                                                      .pluck(:id, :namespace_id)
                                                                      .transpose
    if group_ids.present?
      puts "Saving group IDs to #{@backup_filename} as backup: #{group_ids}..."
      File.write(@backup_filename, "#{group_ids.join("\n")}\n")
    end

    puts "Setting #{@csp_group.full_path} as CSP..."
    Security::PolicySetting.in_organization(Organizations::Organization.default_organization).update! csp_namespace: @csp_group

    if config_ids.present?
      puts "Unassigning the policy project #{@spp.id} from the groups in the background to remove duplicate policies..."
      config_ids.each do |config_id|
        ::Security::DeleteOrchestrationConfigurationWorker.perform_async(
          config_id, @user.id, @spp.id
        )
      end
    end
    puts "Done."
  end

  def unassign
    check_spp!

    puts "Unassigning #{@csp_group.full_path} as CSP..."
    Security::PolicySetting.in_organization(Organizations::Organization.default_organization).update! csp_namespace: nil

    if File.exist?(@backup_filename)
      puts "Reading group IDs from #{@backup_filename} to restore the policy project links..."
      namespace_ids = File.read(@backup_filename).split("\n").map(&:to_i).reject(&:zero?)
      Namespace.id_in(namespace_ids).find_each(batch_size: 100) do |namespace|
        puts "Assigning the policy project to #{namespace.full_path}..."
        result = ::Security::Orchestration::AssignService.new(
          container: namespace, current_user: @user,
          params: { policy_project_id: @spp.id }
        ).execute
        puts "Failed to assign policy project to #{namespace.full_path}: #{result[:message]}" if result.error?
      end
    end
  end

  private

  def check_spp!
    raise "CSP policy project doesn't exist" if @spp.blank?
  end
end

SUPPORTED_ACTIONS = %w[assign unassign].freeze
action = ENV['ACTION']
csp_group_id = ENV['CSP_GROUP_ID']
backup_filename = ENV['BACKUP_FILENAME']
raise "Unknown action: #{action}. Use either 'assign' or 'unassign'." unless action.in? SUPPORTED_ACTIONS
raise "Missing CSP_GROUP_ID" if csp_group_id.blank?
raise "Missing BACKUP_FILENAME" if backup_filename.blank?

CspDesignation.new(csp_group_id, backup_filename).public_send(action)

문제 해결#

규정 준수 및 보안 정책 그룹을 지정할 수 없음

  • 인스턴스 관리자 권한이 있는지 확인합니다.
  • 그룹이 최상위 그룹(하위 그룹이 아님)인지 확인합니다.
  • 그룹이 존재하고 접근 가능한지 확인합니다.

피드백 및 지원#

이것은 베타 릴리스이므로 사용자 피드백이 권장됩니다. 다음을 통해 경험, 제안 및 문제를 공유하십시오:

관련 항목#