인스턴스 전체 규정 준수 및 보안 정책 관리
Offering: GitLab Self-Managed, GitLab Dedicated
단일 중앙 집중식 위치에서 여러 그룹 및 프로젝트에 걸쳐 보안 정책과 규정 준수 프레임워크를 적용하기 위해 인스턴스 관리자는 규정 준수 및 보안 정책(CSP) 그룹을 지정할 수 있습니다. 인스턴스 전체 규정 준수 및 보안 정책 관리를 설정하려면 규정 준수 및 보안 정책 그룹을 지정하고 해당 그룹에 정책과 규정 준수 프레임워크를 생성합니다.
히스토리
- GitLab 18.2에서
security_policies_csp라는 기능 플래그와 함께 도입됨. 기본적으로 비활성화됨. - GitLab 18.3에서 GitLab Self-Managed의 기본적으로 활성화됨.
- GitLab 18.5에서 일반적으로 사용 가능. 기능 플래그
security_policies_csp제거됨.
단일 중앙 집중식 위치에서 여러 그룹 및 프로젝트에 걸쳐 보안 정책과 규정 준수 프레임워크를 적용하기 위해 인스턴스 관리자는 규정 준수 및 보안 정책(CSP) 그룹을 지정할 수 있습니다. 이를 통해 인스턴스 관리자는:
- 인스턴스 전체에 자동으로 적용되는 보안 정책을 생성하고 구성합니다.
- 다른 최상위 그룹에서 사용할 수 있도록 중앙 집중식 규정 준수 프레임워크를 생성합니다.
- 규정 준수 프레임워크, 그룹, 프로젝트 또는 전체 인스턴스에 정책 범위를 지정합니다.
- 어떤 정책이 어디에서 활성화되어 있는지 이해하기 위한 포괄적인 정책 커버리지를 봅니다.
- 팀이 자체 추가 정책과 프레임워크를 생성할 수 있도록 하면서 중앙 집중식 제어를 유지합니다.
사전 요구사항#
- GitLab 18.2 이상.
- 인스턴스 관리자여야 합니다.
- 규정 준수 및 보안 정책 그룹으로 사용할 기존 최상위 그룹이 있어야 합니다.
- REST API 사용(선택 사항)을 위해 관리자 액세스 권한이 있는 토큰이 있어야 합니다.
인스턴스 전체 규정 준수 및 보안 정책 관리 설정#
인스턴스 전체 규정 준수 및 보안 정책 관리를 설정하려면 규정 준수 및 보안 정책 그룹을 지정하고 해당 그룹에 정책과 규정 준수 프레임워크를 생성합니다.
규정 준수 및 보안 정책 그룹 지정#
GitLab UI 또는 REST API를 사용하여 규정 준수 및 보안 정책 그룹을 지정할 수 있습니다.
GitLab UI 사용#
- 오른쪽 상단에서 관리자를 선택합니다.
- 왼쪽 사이드바에서 설정 > 보안 및 규정 준수를 선택합니다.
- CSP 그룹 지정 섹션에서 드롭다운 목록에서 기존 최상위 그룹을 선택합니다.
- 변경 사항 저장을 선택합니다.
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 문서를 참조하십시오.
선택한 그룹이 규정 준수 및 보안 정책 그룹이 되어 인스턴스 전체의 보안 정책과 규정 준수 프레임워크를 관리하는 중앙 장소 역할을 합니다.
규정 준수 및 보안 정책 그룹의 보안 정책 관리#
보안 정책에 대해서는 규정 준수 및 보안 정책 그룹 문서를 참조하십시오.
중앙 집중식 규정 준수 프레임워크 관리#
규정 준수 및 보안 정책 그룹을 지정한 후 인스턴스의 모든 최상위 그룹에서 자동으로 사용할 수 있는 규정 준수 프레임워크를 생성할 수 있습니다. 이는 조직 전체에 걸쳐 규정 준수에 대한 일관된 접근 방식을 제공합니다.
규정 준수 및 보안 정책 그룹에서 생성된 규정 준수 프레임워크:
- 인스턴스의 다른 최상위 그룹에서 볼 수 있고 사용할 수 있습니다.
- 그룹 소유자가 프로젝트에 적용할 수 있습니다.
- 규정 준수 및 보안 정책 그룹 외부의 사용자에게는 읽기 전용입니다.
- 향상된 규정 준수 시행을 위해 보안 정책과 통합할 수 있습니다.
중앙 집중식 규정 준수 프레임워크 생성 및 관리에 대한 자세한 지침은 중앙 집중식 규정 준수 프레임워크를 참조하십시오.
사용자 워크플로우#
인스턴스 관리자#
인스턴스 관리자는:
- 기존 최상위 그룹에서 규정 준수 및 보안 정책 그룹을 지정합니다.
- 지정된 그룹에 보안 정책을 생성합니다.
- 지정된 그룹에 규정 준수 프레임워크를 생성합니다.
- 정책이 적용되는 위치를 결정하도록 정책 범위를 구성합니다.
- 특정 프레임워크가 있는 프로젝트에 정책을 적용하도록 규정 준수 프레임워크에 정책 범위를 지정합니다.
- 그룹과 프로젝트 전체에서 어떤 정책이 활성화되어 있는지 이해하기 위해 정책 커버리지를 봅니다.
- 필요에 따라 중앙 집중식 정책과 프레임워크를 편집하고 관리합니다.
그룹 관리자 및 소유자#
그룹 관리자 및 소유자는:
- 로컬에서 정의된 정책과 중앙 관리 정책 모두를 포함하여 보안 > 정책에서 적용 가능한 모든 정책을 볼 수 있습니다.
- 그룹의 프로젝트에 중앙 집중식 규정 준수 프레임워크를 보고 적용할 수 있습니다.
- 중앙 관리 정책 및 프레임워크 외에 특정 그룹이나 프로젝트의 정책 및 프레임워크를 생성할 수 있습니다.
- 정책이 팀에서 나온 것인지 중앙 관리에서 나온 것인지 명확히 나타내는 지표로 정책 출처를 이해할 수 있습니다.
정책 페이지에는 현재 그룹에 적용된 규정 준수 및 보안 정책 그룹의 정책만 표시됩니다.
프로젝트 관리자 및 소유자#
프로젝트 관리자 및 소유자는:
- 로컬에서 정의된 정책과 중앙 관리 정책 모두를 포함하여 보안 > 정책에서 적용 가능한 모든 정책을 볼 수 있습니다.
- 중앙 집중식 프레임워크를 포함하여 프로젝트에 적용된 규정 준수 프레임워크를 볼 수 있습니다.
- 중앙 관리 정책 외에 프로젝트별 정책을 생성할 수 있습니다.
- 정책이 프로젝트, 그룹 또는 중앙 관리에서 나온 것인지 명확히 나타내는 지표로 정책 출처를 이해할 수 있습니다.
정책 페이지에는 현재 그룹에 적용된 규정 준수 및 보안 정책의 정책만 표시됩니다.
개발자#
개발자는:
- 보안 > 정책에서 작업에 적용되는 모든 보안 정책을 볼 수 있습니다.
- 작업하는 프로젝트에 적용된 규정 준수 프레임워크를 볼 수 있습니다.
- 중앙에서 규정된 정책에 대한 명확한 가시성을 통해 보안 및 규정 준수 요구사항을 이해할 수 있습니다.
보안 정책 프로젝트에서 마이그레이션 자동화#
여러 그룹에 걸쳐 정책을 적용하기 위해 보안 정책 프로젝트를 이미 사용하는 경우 연결된 그룹 중 하나를 규정 준수 및 보안 정책 그룹으로 지정할 수 있습니다. 그러나 규정 준수 및 보안 정책 그룹이 아닌 모든 그룹에서 보안 정책 프로젝트의 연결을 해제해야 합니다. 그렇지 않으면 동일한 정책이 해당 그룹에서 두 번 적용됩니다. 한 번은 연결된 보안 정책 그룹에서, 한 번은 규정 준수 및 보안 정책 그룹에서 적용됩니다.
그룹을 규정 준수 및 보안 정책 그룹으로 마이그레이션하는 프로세스를 자동화하려면 다음 csp_designation.rb 스크립트를 사용할 수 있습니다.
스크립트는 지정된 백업 파일에 규정 준수 및 보안 정책 그룹의 정책 프로젝트에 연결된 모든 그룹의 ID를 저장합니다. 필요한 경우 보안 정책 프로젝트에 대한 링크를 포함하여 이전 상태를 복원할 수 있습니다.
사전 요구사항:
- 규정 준수 및 보안 정책 그룹으로 지정하려는 그룹에 연결된 보안 정책 프로젝트가 있어야 합니다.
스크립트를 사용하려면:
-
다음 섹션에서 전체
csp_designation.rb스크립트를 복사합니다. -
터미널 창에서 인스턴스에 연결합니다.
-
csp_designation.rb라는 새 파일을 생성하고 새 파일에 스크립트를 붙여넣습니다. -
다음 명령을 실행하여 규정 준수 및 보안 정책 그룹을 할당하고 다음을 변경합니다:
<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 -
선택 사항. 전체 변경사항을 되돌려야 하는 경우 이전에 사용한 것과 동일한 그룹 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)
문제 해결#
규정 준수 및 보안 정책 그룹을 지정할 수 없음
- 인스턴스 관리자 권한이 있는지 확인합니다.
- 그룹이 최상위 그룹(하위 그룹이 아님)인지 확인합니다.
- 그룹이 존재하고 접근 가능한지 확인합니다.
피드백 및 지원#
이것은 베타 릴리스이므로 사용자 피드백이 권장됩니다. 다음을 통해 경험, 제안 및 문제를 공유하십시오:
- GitLab 이슈.
- 정기 GitLab 지원 채널.
