커스텀 액세스 수준 만들기

Access Context Manager에서 커스텀 액세스 수준을 사용하여 Common Expression Language (CEL)의 하위 집합으로 작성된 부울 표현식을 사용하여 Google Cloud 리소스에 대한 액세스를 제어할 수 있습니다. 서드 파티 보안 서비스의 원본 네트워크 프로젝트, IP 주소, ID, 기기 데이터와 같은 요청 속성을 평가하여 세분화된 컨텍스트 인식 액세스 요구사항을 적용할 수 있습니다.

커스텀 액세스 수준 표현식에서 기기 속성을 사용하려면 유료 구독이 있어야 합니다. CEL 표현식 빌드에 대한 자세한 내용은 커스텀 액세스 수준 사양을 참조하세요. 커스텀 액세스 수준을 만든 후에는 기본 액세스 수준과 동일한 방식으로 관리할 수 있습니다.

시작하기 전에

커스텀 액세스 수준 만들기

콘솔 Google Cloud , gcloud명령줄 도구, REST API 또는 RPC를 사용하여 커스텀 액세스 수준을 만들 수 있습니다.

콘솔

콘솔 Google Cloud 을 사용하여 커스텀 액세스 수준을 만들려면 다음 을 수행합니다.

  1. Google Cloud 콘솔에서 Access Context Manager 페이지를 엽니다.

    Access Context Manager 페이지 열기

  2. 메시지가 표시되면 조직을 선택합니다.

  3. Access Context Manager 페이지의 맨 위에 있는 새 항목을 누릅니다.

  4. 새 액세스 수준 창에서 다음을 수행합니다.

    1. 액세스 수준 제목 상자에 액세스 수준의 제목을 입력합니다. 제목은 최대 50자여야 하고, 문자로 시작해야 하며 숫자, 문자, 밑줄, 공백만 포함할 수 있습니다.

    2. 조건 만들기에 따라 고급 모드를 선택합니다.

    3. 조건 섹션에서 커스텀 액세스 수준의 표현식을 입력합니다. 조건은 단일 부울 값으로 평가해야 합니다.

      Common Expression Language(CEL) 지원 및 커스텀 액세스 수준에 대한 예시와 자세한 내용은 커스텀 액세스 수준 사양을 참조하세요.

    4. 저장을 클릭합니다.

gcloud

gcloud 명령줄 도구를 사용하여 커스텀 액세스 수준을 만들려면 gcloud access-context-manager levels create 명령어를 사용합니다.

gcloud access-context-manager levels create LEVEL_NAME \
--title=TITLE \
--custom-level-spec=FILE \
--description=DESCRIPTION \
--policy=POLICY_NAME

다음을 바꿉니다.

  • LEVEL_NAME: 액세스 수준의 고유한 이름입니다. 이름은 문자로 시작해야 하며 문자, 숫자, 밑줄만 포함해야 합니다. 이름은 최대 50자입니다.

  • TITLE: 액세스 수준의 짧고 사람이 읽을 수 있는 제목입니다.

  • FILE: 단일 키-값 쌍으로 형식이 지정된 CEL 표현식이 포함된 YAML 파일입니다. expression: "CEL_EXPRESSION".

    Common Expression Language (CEL) 지원 및 커스텀 액세스 수준에 대한 예시와 자세한 내용은 커스텀 액세스 수준 사양을 참조하세요.

  • DESCRIPTION: 사람이 읽을 수 있는 액세스 수준 설명입니다.

  • POLICY_NAME: 조직의 액세스 정책의 숫자 이름입니다.

필요한 경우 gcloud-wide 플래그를 포함할 수 있습니다.

custom-level-spec YAML 파일

gcloud 명령줄 도구를 사용하여 커스텀 액세스 수준을 만들 때 custom-level-spec 옵션에 YAML 파일을 제공해야 합니다. YAML 파일은 단일 부울 값으로 평가되는 CEL 표현식을 정의합니다. YAML 파일에는 단일 키-값 쌍이 포함되어야 합니다. expression: "CEL_EXPRESSION" expression의 값은 문자열이어야 합니다.

YAML 파일 예시

expression: "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ['US'] || device.is_admin_approved_device)"

명령어 예

gcloud access-context-manager levels create Custom_Trust \
    --custom-level-spec=customspec.yaml \
    --description="Custom access level for corp." \
    --title="Custom Trust Level" \
    --policy=1521580097614100

REST

REST API를 사용하여 커스텀 액세스 수준을 만들려면 accessPolicies.accessLevels.create 메서드를 사용합니다.

요청 본문

호출의 요청 본문에 AccessLevel 객체의 인스턴스를 포함합니다.

{
  "name": string,
  "title": string,
  "description": string,
  "custom": {
    "expr": {
      "expression": string,
      "title": string,
      "description": string
    }
  }
}

custom 필드에 커스텀 액세스 수준의 CEL 표현식을 포함하는 객체를 만듭니다. 전체 표현식은 부울 값으로 평가해야 합니다. title 및 description 필드는 선택사항입니다.

예

{
  "name": "example_custom_level",
  "title": "Example custom level",
  "description": "An example custom access level.",
  "custom":  {
    "expr": {
      "expression": "device.is_corp_owned == true || (device.os_type != OsType.OS_UNSPECIFIED && device.is_admin_approved_device == true)",
      "title": "Check for known devices",
      "description": "Permits requests from corp-owned devices and admin-approved devices with a known OS."
    }
  }
}

RPC

RPC를 사용하여 커스텀 액세스 수준을 만들려면 CreateAccessLevel을 호출합니다.

access_level 필드에 AccessLevel의 인스턴스를 포함합니다.

필드
name
유형 문자열
설명

필수 항목입니다.

액세스 수준의 리소스 이름입니다. POLICY_ID는 조직의 액세스 정책의 숫자 이름입니다. SHORT_NAME 은 문자로 시작해야 하며 문자, 숫자, 밑줄만 포함해야 합니다.

형식:

            accessPolicies/policy_id/accessLevels/short_name
            
title
유형 문자열
설명

인간이 읽을 수 있는 액세스 수준 라벨입니다. 액세스 수준 이름은 고유해야 합니다.

description
유형 문자열
설명

액세스 수준에 대한 설명입니다.

custom
유형 문자열
설명

커스텀 액세스 수준의 CEL 표현식입니다. 전체 표현식은 부울 값으로 평가해야 합니다.

커스텀 액세스 수준 예시

이 섹션에서는 커스텀 액세스 수준의 예시를 제공합니다.

소스 프로젝트를 기반으로 액세스 제한

특정 프로젝트 Google Cloud 및 관련 테넌트 프로젝트에서 발생하는 요청만 허용하도록 리소스에 대한 액세스를 제한할 수 있습니다. 프로젝트 기반 액세스 제한은 프로젝트에 속한 비인간 ID인 워크로드 아이덴티티의 상호작용을 보호하는 데 유용합니다. Google Cloud 워크로드 아이덴티티에는 서비스 계정, 워크로드 아이덴티티 제휴 ID, 관리형 워크로드 아이덴티티, 에이전트 ID가 포함됩니다.

다음 표현식은 요청이 projects/123456789에서 발생하는 경우 액세스 권한을 부여합니다.

originatesFromProjects(origin, ["projects/123456789"])

워크로드 아이덴티티 액세스를 자체 네트워크 프로젝트로 제한

워크로드 아이덴티티가 워크로드 아이덴티티를 소유한 프로젝트와 연결된 Google Cloud 네트워크의 요청만 할 수 있도록 워크로드 아이덴티티를 제한할 수 있습니다. 프로젝트는 최상위 프로젝트 또는 최상위 프로젝트의 테넌트 프로젝트일 수 있습니다. 프로젝트 기반 액세스 제한은 워크로드 아이덴티티 상호작용을 보호하는 데 유용합니다. originatesFromProjects와 달리 표현식에서 프로젝트 번호를 지정할 필요가 없으므로 여러 프로젝트에서 동일한 액세스 수준을 재사용할 수 있습니다.

다음 표현식은 원본 네트워크 프로젝트 (또는 연결된 테넌트 프로젝트)가 호출 워크로드 아이덴티티를 소유한 프로젝트와 일치하는 경우 액세스 권한을 부여합니다.

request.auth.matchesNetworkProject(origin)