이 주제는 조건 표현식에서 지원되는 속성에 대해 설명합니다.
지원되는 조건 속성
다음 섹션에는 지원되는 속성에 대한 요약 내용과 각 속성을 인식하는 Google Cloud 서비스가 나와 있습니다.
리소스 속성
다음 속성은 요청의 주체인 리소스와 관련이 있습니다.
속성 | 사용 요약 | 지원되는 Google Cloud 서비스 |
---|---|---|
리소스 서비스 속성 | 사용 중인 Google Cloud 서비스에 따라 액세스를 관리합니다. |
|
리소스 유형 속성 | 리소스 유형을 기준으로 액세스를 관리합니다. | |
리소스 이름 속성 | 리소스 이름을 기준으로 액세스를 관리합니다. |
|
리소스 태그 | 리소스에 연결된 태그를 기준으로 액세스를 관리합니다. | 모든 Google Cloud 서비스(상속된 조건 지원 참조) |
리소스 속성에 대한 자세한 내용은 이 페이지의 리소스 속성을 참조하세요.
요청 속성
다음 속성은 요청의 세부정보와 관련이 있습니다.
속성 | 사용 요약 | 지원되는 Google Cloud 서비스 |
---|---|---|
특정 액세스 수준에 따라 액세스를 관리합니다.
액세스 수준은 원본 IP 주소, 기기 속성, 시간 등 요청 및 요청자에 대한 RAW 속성을 기반으로 계산된 속성입니다. 예를 들어 |
IAP(Identity-Aware Proxy) |
|
특정 Google Cloud API 또는 서비스에서 제공되는 데이터를 기준으로 액세스를 관리합니다. |
|
|
Google Cloud 리소스에 만료, 예약, 기간 제한 액세스를 설정합니다. |
모든 Google Cloud 서비스(상속된 조건 지원 참조) |
|
요청의 대상 IP 주소 또는 포트를 기반으로 액세스를 관리합니다. 예를 들어 Compute Engine 가상 머신(VM) 인스턴스는 IAP(Identity-Aware Proxy) TCP 전달에 사용됩니다. |
IAP(Identity-Aware Proxy) |
|
주 구성원이 만들 수 있는 전달 규칙의 유형을 지정합니다. 예를 들어 주 구성원이 인터넷에서 발생한 트래픽을 처리하는 외부 Google Cloud 부하 분산기가 아닌 Google Cloud 네트워크 내부에서 발생한 트래픽을 처리하는 내부 Google Cloud 부하 분산기에 대한 전달 규칙을 만들 수 있도록 허용할 수 있습니다. |
|
|
요청의 URL 경로 또는 호스트에 따라 액세스를 관리합니다. 예를 들어 조건을 사용하여 |
|
요청 속성에 대한 자세한 내용은 이 페이지의 요청 속성을 참조하세요.
상속된 조건 지원
일부 Google Cloud 리소스 유형은 허용 정책에 조건을 허용하지 않습니다. 그러나 조직, 폴더 또는 프로젝트 수준에서 조건부 역할 바인딩을 추가할 수 있으며 다른 리소스는 리소스 계층 구조를 통해 이러한 역할 바인딩을 상속합니다. 자세한 내용은 조건부 역할 바인딩을 허용하는 리소스 유형을 확인하세요.
조직, 폴더 또는 프로젝트 수준에서 속성을 사용하는 경우 대부분의 속성은 특정 리소스 유형에서만 사용할 수 있다는 점에 유의하세요. 조건의 일부를 사용할 수 없는 속성을 사용하는 경우 조건의 일부가 액세스 권한을 부여하는 것으로 해석되지 않습니다. 예를 들어 destination.port == 21
조건은 BigQuery 리소스가 대상 IP/포트 속성을 제공하지 않으므로 BigQuery 리소스에 대한 액세스 권한을 부여하지 않습니다.
이 문제를 방지하려면 이 페이지에 설명된 리소스 유형 및 리소스 서비스 속성을 사용하여 조건 범위를 제한하세요. 예를 들어 다음 조건은 IAP(Identity-Aware Proxy) 터널 이외의 모든 리소스 유형에 대해 true
로 평가됩니다. 반대로 IAP(Identity-Aware Proxy) 터널 인스턴스의 경우 조건은 목적지 포트를 확인합니다.
resource.type != 'iap.googleapis.com/TunnelInstance' ||
destination.port == 21
리소스에 연결된 태그를 확인하는 조건의 범위를 제한할 필요는 없습니다. 태그 키 및 값을 확인할 때 리소스 유형 및 리소스 서비스를 포함한 다른 속성을 확인할 수 없습니다.
리소스 속성
리소스 서비스, 리소스 유형, 리소스 이름 속성은 일반적으로 역할 바인딩에서 제공하는 액세스 권한 부여의 범위를 변경하는 데 사용됩니다. 역할에 여러 리소스 특정 속성에 적용되는 권한이 포함된 경우, 리소스 기반 조건을 사용하여 특정 유형 또는 특정 서비스에 대한 역할 권한의 하위 집합을 부여할 수 있습니다.
resource.service 속성
resource.service
속성을 사용하면 사용 중인 Google Cloud 서비스를 기준으로 조건을 설정할 수 있습니다. 예를 들어 cloudresourcemanager.googleapis.com
서비스를 사용하는 리소스에 대한 사용자 액세스를 제한하는 조건을 설정할 수 있습니다. 지원되는 값 목록은 리소스 서비스 값을 참조하세요.
속성 변수 | resource.service |
---|---|
속성 유형 |
지원되는 값 목록은 리소스 서비스 값을 참조하세요. |
지원되는 연산자 | , |
세부정보 |
조건에서 resource.type 속성을 사용하는 경우 속성과 같음( ) 또는 같지 않음( )을 확인합니다.
접두사 또는 접미사 확인과 같은 다른 비교로 인해 예상치 못한 결과가 발생할 수 있습니다.
|
예시 |
Compute Engine 리소스의 resource.service == "compute.googleapis.com" |
지원되는 서비스 |
|
resource.type 속성
resource.type
속성을 사용하면 리소스 유형을 기준으로 조건을 설정할 수 있습니다. 예를 들어 storage.googleapis.com/Object
유형의 리소스에 대한 사용자 액세스를 제한하는 조건을 설정할 수 있습니다. 지원되는 값 목록은 리소스 유형 값을 참조하세요.
조건에서 resource.name
속성을 사용하는 경우 resource.type
속성을 사용하여 조건이 적용되는 리소스 유형을 제어하는 것이 좋습니다. 자세한 내용은 이 페이지의 resource.name
속성을 참조하세요.
속성 변수 | resource.type |
||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
속성 유형 |
지원되는 값 목록은 리소스 유형 값을 참조하세요. |
||||||||||||||||||||||||||||||||||||||||
지원되는 연산자 | , |
||||||||||||||||||||||||||||||||||||||||
세부정보 |
조건에서 resource.type 속성을 사용하는 경우 속성과 같음( ) 또는 같지 않음( )을 확인합니다. 접두사 또는 접미사 확인과 같은 다른 비교로 인해 예상치 못한 결과가 발생할 수 있습니다.
|
||||||||||||||||||||||||||||||||||||||||
예시 |
리소스가 Compute Engine 이미지가 아니면 resource.type != "compute.googleapis.com/Image"
리소스가 Compute Engine 이미지 또는 영구 디스크인 경우에만 (resource.type == "compute.googleapis.com/Image" || resource.type == "compute.googleapis.com/Disk") |
||||||||||||||||||||||||||||||||||||||||
지원되는 리소스 유형 |
1 Cloud Key Management Service는 이 리소스 유형을 키링 리소스의 상위 요소로 사용합니다. |
resource.name 속성
resource.name
속성을 사용하면 리소스 이름의 전체 또는 일부를 기준으로 조건을 설정할 수 있습니다. 리소스 이름 형식 목록은 리소스 이름 형식을 참조하세요.
resource.name
속성은 아래 표에 나열된 특정 리소스 유형에만 사용할 수 있습니다. 따라서 조건의 적용 범위를 의도한 리소스 유형으로 제한하는 것이 좋습니다. 역할에 resource.name
속성을 제공하지 않는 리소스 유형에 대한 권한이 포함된 경우 resource.name
을 확인하는 조건의 일부로 이러한 권한이 제한되지 않도록 확인해야 합니다.
다음 예시는 이 동작을 확인하는 방법을 보여줍니다. 이 예시에서 조건은 Cloud Storage 버킷 및 객체를 제외한 모든 리소스 유형에 대한 액세스를 허용합니다. 반면, 버킷 및 객체의 경우 조건은 버킷 example-bucket
과 여기에 포함된 객체에 대한 액세스만 허용합니다.
(resource.type != 'storage.googleapis.com/Bucket' &&
resource.type != 'storage.googleapis.com/Object') ||
resource.name.startsWith('projects/_/buckets/example-bucket')
조건의 첫 번째 부분에서는 리소스가 버킷 또는 객체가 아닌지 확인합니다. 리소스의 유형이 다른 경우 리소스 이름에 관계없이 전체 조건이 true
로 평가됩니다.
또한 조건은 resource.service
속성이 아닌 resource.type
속성을 확인합니다. resource.type
속성을 확인하면 몇 가지 이점이 있습니다.
resource.name
검사를 적합한 리소스 세트로 제한합니다. 예를 들어 특정 이름으로 Compute Engine 인스턴스에 대한 액세스 권한을 부여하려면 Compute Engine 인스턴스를 제외한 모든 리소스 유형을 제외하는 것이 좋습니다.- 이후 서비스가 새 리소스 유형을 추가하면 조건 범위가 변경되지 않습니다.
마지막으로 조건에서는 연산자와 일치 여부를 확인하는 대신
startsWith()
함수를 사용하여 리소스 이름을 평가합니다. 조건에서 리소스 이름 시작을 보기 때문에 버킷과 해당 버킷에 있는 객체와 일치합니다. 일치가 확인되면 버킷과만 일치합니다.
*
와 같은 와일드 카드 문자를 사용하여 여러 리소스 이름을 일치시킬 수 없습니다. 다음 대안을 사용하는 것이 좋습니다.
extract()
함수를 사용하여 리소스 이름에서 값을 추출합니다. 예를 들어 Compute Engine VM 인스턴스의 리소스 이름에서 프로젝트 ID를 추출한 후 이 프로젝트 ID를 참조하는 조건 표현식을 작성할 수 있습니다.자세한 내용은 이 페이지의 속성에서 값 추출을 참조하세요.
startsWith()
또는endsWith()
함수를 사용하여 리소스 이름의 시작이나 끝을 평가하는 조건을 작성합니다.
속성 변수 | resource.name |
||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
속성 유형 |
각 리소스 유형은 리소스 이름에 특정 형식을 사용합니다. 형식 목록은 리소스 이름 형식을 참조하세요. |
||||||||||||||||||||||||||||||||||
지원되는 함수 및 연산자 |
startsWith(), endsWith(), extract(),
, |
||||||||||||||||||||||||||||||||||
세부정보 |
|
||||||||||||||||||||||||||||||||||
예시 |
리소스 이름이 resource.name != "projects/_/buckets/secret-bucket-123"
리소스 이름이 Compute Engine VM 인스턴스에서 사용하는 형식으로 지정된 접두사로 시작하는 경우 resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")
리소스 이름이 Cloud Storage 버킷에서 사용하는 형식으로 지정된 접두사로 시작하면 resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")
리소스 이름이 지정된 접미사로 끝나는 경우(예: Cloud Storage 객체의 파일 확장자) resource.name.endsWith(".jpg") 프로젝트 이름 또는 번호가 있으면 이를 반환합니다. resource.name.extract("projects/{project}/") |
||||||||||||||||||||||||||||||||||
지원되는 리소스 유형 |
|
리소스 태그
리소스 태그의 함수를 사용하면 리소스에 연결되거나 상속되는 태그를 기준으로 조건을 설정할 수 있습니다. 예를 들어 태그 env: prod
가 연결된 리소스에 대해서만 역할을 부여하는 조건을 설정할 수 있습니다. 태그를 사용한 액세스 제어에 대한 자세한 내용은 태그 및 액세스 제어를 참조하세요.
각 태그는 키와 값으로 구성됩니다. 각 키 및 값에는 몇 가지 다른 유형의 식별자가 있습니다.
-
영구 ID: 전역적으로 고유하며 재사용할 수 없습니다. 예를 들어 태그 키는 영구 ID
tagKeys/123456789012
, 태그 값은 영구 IDtagValues/567890123456
를 가질 수 있습니다. -
닉네임: 각 키의 닉네임은 조직 내에서 고유해야 하고 각 값의 닉네임은 연결된 키에 고유해야 합니다. 예를 들어 태그 키는 닉네임
env
, 태그 값은 닉네임prod
를 가질 수 있습니다. -
네임스페이스화된 이름: 조직의 숫자 ID를 태그 키의 닉네임에 추가합니다. 예를 들어 태그 키는 네임스페이스화된 이름
123456789012/env
를 가질 수 있습니다. 조직 ID를 가져오는 방법 알아보기
조건에서 사용할 식별자 유형을 선택하는 방법은 태그 정의 및 식별자를 참조하세요.
태그의 조건은 모든 Google Cloud 서비스 및 리소스 유형에서 지원됩니다. 이를 직접 지원하지 않는 리소스에 태그 조건을 적용하는 방법을 알아보려면 이 페이지의 상속된 조건 지원을 참조하세요.
다음 함수를 사용하여 태그를 기준으로 조건을 설정할 수 있습니다.
함수 | 설명 |
---|---|
resource.hasTagKey(
bool
|
요청의 리소스에 지정된 키가 있는 태그가 있는지 확인합니다. 태그 키는 네임스페이스화된 이름으로 조회됩니다. 영구 ID를 사용하여 태그 키를 확인하려면
|
resource.hasTagKeyId(
bool
|
요청의 리소스에 지정된 키가 있는 태그가 있는지 확인합니다. 태그 키는 영구 ID로 조회됩니다.
네임스페이스화된 이름을 사용하여 태그 키를 확인하려면
|
resource.matchTag(
bool
|
요청의 리소스에 지정된 키 및 값이 있는 태그가 있는지 확인합니다. 키는 네임스페이스화된 이름으로 조회되고 값은 닉네임으로 조회됩니다. 영구 ID를 사용하여 태그 키 및 값을 확인하려면
|
resource.matchTagId(
bool
|
요청의 리소스에 지정된 키 및 값이 있는 태그가 있는지 확인합니다. 키와 값은 영구 ID로 조회됩니다. 네임스페이스화된 이름을 사용하여 태그 키를 확인하고 닉네임을 사용하여 값을 확인하려면
|
요청 속성
요청 속성을 사용하면 액세스 수준, 날짜/시간, 대상 IP 주소 및 포트(IAP TCP 터널링) 또는 예상 URL 호스트/경로(IAP 및 Cloud Run)와 같은 요청에 대한 세부정보를 평가하는 조건을 만들 수 있습니다.
액세스 수준 속성
액세스 수준 속성을 사용하면 승인을 위해 요청이 하나 이상의 액세스 수준을 충족해야 하는 조건을 설정할 수 있습니다.
액세스 수준 속성은 원본 IP 주소, 기기 속성, 시간 등 요청 속성에서 가져옵니다. 예를 들어 fullyTrusted
라는 액세스 수준은 요청하는 기기가 회사 소유이며 화면 잠금이 있어야 한다고 요구할 수 있습니다. onNetwork
액세스 수준에서 요청하는 기기는 특정 IP 주소 범위에서 시작해야 할 수 있습니다. 액세스 수준에 대한 자세한 내용은 Access Context Manager 문서를 참조하세요.
액세스 수준 속성은 IAP(Identity-Aware Proxy)를 사용하여 터널 인스턴스에 액세스하거나 App Engine 또는 Compute Engine 백엔드 서비스에서 실행되는 웹 애플리케이션에 액세스할 때만 사용할 수 있습니다. 구체적으로는 액세스 수준 속성은 다음 권한 중 하나를 확인하는 요청에만 사용할 수 있습니다.
iap.tunnelInstances.accessViaIAP
iap.webServiceVersions.accessViaIAP
다음과 같은 사전 정의된 역할을 조건부로 부여할 때 액세스 수준 속성을 사용할 수 있습니다.
IAP 보안 터널 사용자(
roles/iap.tunnelResourceAccessor
)단일 권한
iap.tunnelInstances.accessViaIAP
이(가) 포함됩니다.IAP 보안 웹 앱 사용자(
roles/iap.httpsResourceAccessor
)단일 권한
iap.webServiceVersions.accessViaIAP
이(가) 포함됩니다.
또한 액세스 수준 속성을 사용하여 이러한 권한이 포함된 커스텀 역할을 조건부로 부여할 수 있습니다. 커스텀 역할에는 다른 권한이 포함되면 안 됩니다.
request.auth.access_levels
속성
속성 변수 | request.auth.access_levels |
---|---|
속성 유형 | list <string > |
지원되는 연산자 | in |
세부정보 |
요청이 특정 액세스 수준을 충족하는지 확인하려면 ACCESS_LEVEL_FULL_NAME in request.auth.access_levels 액세스 수준의 전체 이름은 다음 형식을 사용합니다. accessPolicies/POLICY_NUMBER/accessLevels/ACCESS_LEVEL |
예시 |
요청이 "accessPolicies/199923665455/accessLevels/CorpNet" in request.auth.access_levels |
지원되는 리소스 유형 | IAP(Identity-Aware Proxy)를 사용하여 터널 인스턴스, 터널 대상 그룹, Google Cloud 부하 분산에서 실행되는 웹 애플리케이션 또는 App Engine에서 실행되는 웹 애플리케이션에 액세스하는 요청에 사용할 수 있습니다. |
API 속성
API 속성을 사용하면 특정 Google Cloud API 또는 서비스에서 제공되는 데이터를 기준으로 액세스를 관리할 수 있습니다.
예를 들어 Cloud Storage를 사용하여 버킷의 객체를 나열할 경우 요청에 prefix
매개변수를 사용하면 이름이 특정 접두사로 시작하는 객체만 포함할 수 있습니다.
사용자 인증 정보 액세스 경계를 사용하여 단기 사용자 인증 정보 범위를 줄이려면 API 속성 storage.googleapis.com/objectListPrefix
를 확인하여 객체 나열에 대한 권한을 제한하는 사용자 인증 정보 액세스 경계를 만들면 됩니다. 이 API 속성에는 요청의 prefix
매개변수 값이 포함됩니다.
조건에서 API 속성을 사용해야 하는 경우의 예시는 다음 페이지를 참조하세요.
모든 서비스가 API 속성을 인식하지는 않습니다. 다음 섹션에서는 각 API 속성을 인식하는 서비스를 보여줍니다.
API 속성용 함수
다음 함수를 사용하면 API 속성 작업을 수행할 수 있습니다.
함수 | 설명 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
api.getAttribute(
V<T>
|
요청된 API 속성을 가져옵니다.
|
||||||||||||
hasOnly(
bool |
목록에 허용된 항목 또는 이러한 항목의 하위 집합이 포함되어 있는지 확인합니다.
|
Cloud Storage API 속성
Cloud Storage는 다음 API 속성을 제공합니다.
속성 변수 | storage.googleapis.com/objectListPrefix |
---|---|
속성 유형 | string |
세부정보 |
버킷의 객체 나열 요청의 경우 요청의 다른 유형의 요청에서는 이 속성이 정의되지 않습니다. |
이 속성을 인식하는 서비스: | Cloud Storage |
IAM API 속성
IAM은 다음과 같은 API 속성을 제공합니다.
속성 변수 | iam.googleapis.com/modifiedGrantsByRole |
---|---|
속성 유형 | list<string> |
세부정보 |
리소스의 허용 정책을 설정하기 위한 요청의 경우 이 속성에는 요청이 수정하는 결합의 역할 이름이 포함됩니다. 다른 유형의 요청에서는 이 속성이 정의되지 않습니다. |
이 속성을 허용하는 리소스 유형 |
다음 리소스 유형은 허용 정책에서
|
이 속성을 인식하는 서비스: |
다음 서비스는
|
날짜/시간 속성
날짜/시간 속성은 Google Cloud 리소스에 대한 만료, 예약, 기간 제한 액세스를 설정하는 데 사용됩니다.
이 속성은 모든 Google Cloud 서비스 및 리소스 유형에서 지원됩니다. 이를 직접 지원하지 않는 리소스에 날짜/시간 조건을 적용하는 방법은 이 페이지의 상속된 조건 지원을 참조하세요.
request.time
속성에는 요청의 타임스탬프가 포함됩니다. 이 타임스탬프를 다른 타임스탬프 또는 기간과 비교할 수 있습니다.
다음 섹션에는 타임스탬프 및 기간을 기준으로 조건을 설정하는 데 사용할 수 있는 함수가 나와 있습니다.
타임스탬프 및 기간 생성, 비교, 수정
함수 또는 연산자 | 설명 |
---|---|
date(
Timestamp |
날짜를
|
duration(
Duration |
시간을
|
timestamp(
Timestamp |
|
, , , |
두
|
|
|
타임스탬프에서 정보 추출
이 섹션의 함수를 사용하면 타임스탬프에 해당하는 요일과 같이 타임스탬프에서 정보를 추출할 수 있습니다.
IAM 조건에서 모든 타임스탬프는 UTC입니다. 그러나 다른 시간대를 기준으로 정보를 추출해야 할 수 있습니다. 예를 들어 UTC 타임스탬프가 독일 베를린의 시간대에서 월요일인지 확인할 수 있습니다.
다른 시간대를 지정하려면 시간대를 함수에 전달합니다. IETF 시간대 데이터베이스에서 이름 또는 UTC 오프셋을 사용합니다. 예를 들어 중부 유럽 표준시(CET)에 Europe/Berlin
또는 +01:00
을 사용할 수 있습니다.
지원되는 함수 및 연산자 | 설명 |
---|---|
Timestamp.getDate(
int
|
|
Timestamp.getDayOfMonth(
int
|
|
Timestamp.getDayOfWeek(
int
|
|
Timestamp.getDayOfYear(
int
|
|
Timestamp.getFullYear(
int
|
|
Timestamp.getHours(
int
|
이 함수를
|
Timestamp.getMilliseconds(
int
|
|
Timestamp.getMinutes(
int
|
|
Timestamp.getMonth(
int
|
|
Timestamp.getSeconds(
int
|
|
, , , |
이 테이블의 두 함수 출력을 비교합니다. |
대상 IP/포트 속성
대상 IP/포트 속성을 사용하면 사용자가 요청의 내부 대상 IP 주소 또는 포트를 기반으로 액세스를 관리할 수 있습니다.
예를 들어 Compute Engine VM 인스턴스는 외부 IP 주소 및 포트 132.168.42.21:3001
을 내부 IP 주소에 매핑하고 포트 10.0.0.1:2300
을 일반적인 용도에 매핑할 수 있습니다. 반대로 내부 IP 주소와 포트 10.0.0.1:22
는 관리 용도로만 내부에서 사용할 수 있습니다. 대상 IP/포트 속성을 사용하여 내부 IP 주소 및 포트를 기반으로 다양한 액세스 권한을 부여할 수 있습니다.
TCP 전달에 대한 자세한 내용은 IAP(Identity-Aware Proxy) 문서를 참조하세요.
대상.ip 속성
속성 변수 | destination.ip |
---|---|
속성 유형 | string |
지원되는 연산자 | , |
세부정보 |
변수 |
예시 |
대상 IP 주소가 destination.ip == "10.0.0.1"
대상 IP 주소가 destination.ip != "10.0.0.1" |
지원되는 리소스 유형 | IAP(Identity-Aware Proxy)를 사용하여 터널 인스턴스에 액세스하는 데 사용할 수 있습니다. |
destination.port 속성
속성 변수 | destination.port |
---|---|
속성 유형 | int |
지원되는 연산자 | , , , , , |
세부정보 |
|
예시 |
반환:
|
지원되는 리소스 유형 | IAP(Identity-Aware Proxy)를 사용하여 터널 인스턴스에 액세스하는 데 사용할 수 있습니다. |
전달 규칙 속성
전달 규칙 속성을 사용하면 주 구성원이 만들 수 있는 전달 규칙의 유형을 지정할 수 있습니다. 예를 들어 주 구성원이 인터넷에서 발생한 트래픽을 처리하는 외부 Google Cloud 부하 분산기가 아닌 Google Cloud 네트워크 내부에서 발생한 트래픽을 처리하는 내부 Google Cloud 부하 분산기에 대한 전달 규칙을 만들 수 있도록 허용할 수 있습니다.
Cloud Load Balancing의 경우 전달 규칙 속성은 백엔드 서비스, 대상 프록시, 상태 점검, URL 맵과 같은 Google Cloud 부하 분산기의 다른 구성요소를 만드는 기능에는 영향을 미치지 않습니다.
지원되는 함수
함수 | 설명 |
---|---|
compute.isForwardingRule
bool
|
요청이 전달 규칙을 만드는지 확인합니다.
|
compute.matchLoad
bool
|
요청이 지정된 유형의 부하 분산 스키마 중 하나에 영향을 미치는지 확인합니다. 각 부하 분산 스키마의 식별자와 자세한 내용은 Google Cloud 부하 분산기에서 IAM 조건 사용을 참조하세요.
|
지원되는 리소스 유형
이 속성은 요청에 다음 리소스 유형을 만들 때 사용할 수 있습니다.
서비스 | 리소스 유형 |
---|---|
Cloud Load Balancing | 전달 규칙 |
Cloud VPN | 전달 규칙(전역 및 리전) |
Compute Engine | 전달 규칙(프로토콜 전달) |
Traffic Director1 | 전달 규칙 |
1 Compute Engine의 리소스 속성을 사용합니다.
URL 경로/호스트 속성
URL 경로/호스트 속성을 사용하면 요청의 URL 경로 또는 호스트를 기준으로 액세스를 관리할 수 있습니다. 예를 들어 조건을 사용하여 https://example.com
은 일반 사용자 도메인이 액세스할 수 있는 기본 애플리케이션으로 지정하고 https://hr.example.com/admin
은 인사 관리 담당자만 액세스할 수 있는 애플리케이션의 페이지에 액세스할 때 사용되도록 지정할 수 있습니다.
request.path 속성
속성 변수 | request.path |
---|---|
속성 유형 | string |
지원되는 함수 및 연산자 | , startsWith(), endsWith() |
세부정보 |
이 속성과 함께 연산자를 사용하지 않는 것이 좋습니다. request.path != "/admin" 과 같이 부등을 확인하는 대신 !request.path.startsWith("/admin") 와 같이 속성의 접두사를 확인하세요. 접두사를 확인하여 /admin 계층 구조 내에서 URL 경로(예: /admin/payroll/ )를 보호할 수도 있습니다.
|
예시 |
요청 경로가 지정된 URL 경로와 동일하면 request.path == "/admin" request.path == "/admin/payroll"
요청 경로가 지정된 URL 경로로 시작하는 경우 request.path.startsWith("/admin")
요청 경로가 지정된 URL 경로로 끝나면 request.path.endsWith("/payroll.js") |
지원되는 리소스 유형 |
|
request.host 속성
속성 변수 | request.host |
---|---|
속성 유형 | string |
지원되는 함수 및 연산자 | , endsWith() |
세부정보 |
이 속성에 .startsWith() 함수나 연산자를 사용하지 않는 것이 좋습니다. 이러한 함수 및 연산자는 예상치 못한 결과를 제공할 수 있습니다.
|
예시 |
호스트 이름이 지정된 값과 동일한 경우 request.host == "www.example.com" request.host == "hr.example.com"
호스트 이름이 지정된 값으로 끝나면 request.host.endsWith("example.com") |
지원되는 리소스 유형 |
|
속성에서 값 추출
extract()
함수를 사용하면 속성에서 값을 추출할 수 있습니다. 예를 들어 리소스 이름의 임의 부분을 추출한 후 추출된 텍스트를 참조하는 조건 표현식을 작성할 수 있습니다.
extract()
함수를 사용하려면 추출할 속성의 일부를 지정하는 추출 템플릿을 제공합니다. 예를 들어 Compute Engine VM 인스턴스의 리소스 이름에서 프로젝트 ID를 추출하려는 경우 projects/{project}/
템플릿을 사용할 수 있습니다.
추출 템플릿에는 다음 부분이 포함됩니다.
중괄호로 묶인 식별자는 추출할 하위 문자열을 식별합니다.
추출할 값을 명확하게 하는 짧고 의미 있는 식별자를 선택합니다.
A
~Z
의 대문자와 소문자, 숫자, 밑줄(_
)을 사용할 수 있습니다.projects/{project}/
템플릿에서 식별자는project
입니다.선택사항: 추출할 하위 문자열 앞에 와야 하는 접두사입니다.
projects/{project}/
템플릿에서 접두사는projects/
입니다.선택사항: 추출할 하위 문자열 다음에 와야 하는 접미사입니다.
projects/{project}/
템플릿에서 접미사는/
입니다.
extract()
함수는 추출 템플릿에 접두사, 접미사 또는 둘 다가 있는지 여부에 따라 속성의 다른 부분을 추출합니다.
접두사 있음 | 접미사 있음 | 추출된 값 |
---|---|---|
— | — | 전체 속성 |
— | 접두사의 첫 번째 어커런스 다음에 오는 문자 또는 접두사 다음에 문자가 없는 경우 빈 문자열 | |
— | 접미사의 첫 번째 어커런스 앞에 오는 문자 또는 접미사 앞에 문자가 없는 경우 빈 문자열 | |
접두사의 첫 번째 어커런스와 접미사의 첫 번째 어커런스 사이의 문자 또는 접두사와 접미사 사이에 문자가 없는 경우 빈 문자열 |
속성에 표시되지 않는 접두사 또는 접미사를 지정하거나 접미사가 접두사 앞에만 있으면 extract()
함수는 빈 문자열을 반환합니다.
다음 예시에서는 몇 가지 추출 템플릿의 출력을 보여줍니다. 다음 예시에서는 Cloud Storage 객체 projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/
의 리소스 이름을 참조합니다.
추출 템플릿 | 출력 |
---|---|
/order_date={date}/ |
2019-11-03 |
buckets/{name}/ |
acme-orders-aaa |
/orders/{empty}order_date |
비어 있는 string |
{start}/objects/data_lake |
projects/_/buckets/acme-orders-aaa |
orders/{end} |
order_date=2019-11-03/aef87g87ae0876 |
{all} |
projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/ |
/orders/{none}/order_date= |
비어 있는 string |
/orders/order_date=2019-11-03/ |
비어 있는 string |
날짜를 나타내는 문자열을 추출하는 경우 이 페이지의 날짜/시간 함수 및 연산자를 사용하면 추출된 값을 Timestamp
로 변환할 수 있습니다. 예시는 리소스 기반 액세스 구성을 참조하세요.