IAM 조건의 속성 참조

이 문서는 조건 표현식에서 지원되는 속성에 대해 설명합니다.

지원되는 조건 속성

다음 섹션에는 지원되는 속성을 요약하고 각 속성을 인식하는Trusted Cloud by S3NS 서비스를 보여줍니다.

리소스 속성

다음 속성은 요청의 주체인 리소스와 관련이 있습니다.

속성 사용 요약 지원되는 Trusted Cloud 서비스
리소스 서비스 속성

사용 중인 Trusted Cloud 서비스를 기준으로 액세스를 관리합니다.

이 속성은 허용 정책 역할 바인딩에서 사용할 수 있습니다.

  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
  • Resource Manager
리소스 유형 속성

리소스 유형을 기준으로 액세스를 관리합니다.

이 속성은 허용 정책 역할 바인딩에서 사용할 수 있습니다.

  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
  • Resource Manager
리소스 이름 속성

리소스 이름을 기준으로 액세스를 관리합니다.

이 속성은 허용 정책 역할 바인딩에서 사용할 수 있습니다.

  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
리소스 태그

리소스에 연결된 태그를 기준으로 액세스를 관리합니다.

이 속성은 다음 위치에서 사용할 수 있습니다.

  • 허용 정책 역할 바인딩
  • 거부 정책 거부 규칙
모든 Trusted Cloud 서비스(상속된 조건 지원 참조)

리소스 속성에 대한 자세한 내용은 이 페이지의 리소스 속성을 참조하세요.

요청 속성

다음 속성은 요청의 세부정보와 관련이 있습니다.

속성 사용 요약 지원되는 Trusted Cloud 서비스

API 속성

특정 Trusted CloudAPI 또는 서비스에서 제공되는 데이터를 기준으로 액세스를 관리합니다.

이 속성은 허용 정책 역할 바인딩에서 사용할 수 있습니다.

  • Cloud Key Management Service
  • Cloud Storage
  • Compute Engine
  • Identity and Access Management
  • Resource Manager

날짜/시간 속성

Trusted Cloud 리소스에 만료, 예약, 기간 제한 액세스를 설정합니다.

허용 정책 역할 바인딩에서 이러한 속성을 사용할 수 있습니다.

모든 Trusted Cloud 서비스(상속된 조건 지원 참조)

전달 규칙 속성

주 구성원이 만들 수 있는 전달 규칙의 유형을 지정합니다. 예를 들어 주 구성원이 인터넷에서 발생한 트래픽을 처리하는 외부 Trusted Cloud 부하 분산기가 아닌 Trusted Cloud 네트워크 내부에서 발생한 트래픽을 처리하는 내부 Trusted Cloud by S3NS 부하 분산기에 대한 전달 규칙을 만들 수 있도록 허용할 수 있습니다.

허용 정책 역할 바인딩에서 이러한 속성을 사용할 수 있습니다.

요청 속성에 대한 자세한 내용은 이 페이지의 요청 속성을 참조하세요.

상속된 조건 지원

일부 Trusted Cloud 리소스 유형은 허용 정책에 조건을 허용하지 않습니다. 그러나 조직, 폴더 또는 프로젝트 수준에서 조건부 역할 바인딩을 추가할 수 있으며 다른 리소스는 리소스 계층 구조를 통해 이러한 역할 바인딩을 상속합니다. 자세한 내용은 조건부 역할 바인딩을 허용하는 리소스 유형을 확인하세요.

조직, 폴더 또는 프로젝트 수준에서 속성을 사용하는 경우 대부분의 속성은 특정 리소스 유형에서만 사용할 수 있다는 점에 유의하세요. 조건의 일부를 사용할 수 없는 속성을 사용하는 경우 조건의 일부가 액세스 권한을 부여하는 것으로 해석되지 않습니다. 예를 들어 resource.name.endsWith == devResource 조건은 IAM 리소스가 리소스 이름을 제공하지 않으므로 IAM 리소스에 대한 액세스 권한을 부여하지 않습니다.

이 문제를 방지하려면 이 페이지에 설명된 리소스 유형리소스 서비스 속성을 사용하여 조건 범위를 제한하세요. 예를 들어 다음 조건은 Compute Engine 인스턴스 이외의 모든 리소스 유형에 대해 true로 평가됩니다. 반대로 Compute Engine 인스턴스의 경우 조건은 리소스 이름을 확인합니다.

resource.type != 'compute.googleapis.com/Disk' ||
    resource.name.endsWith('devResource')

리소스에 연결된 태그를 확인하는 조건의 범위를 제한할 필요는 없습니다. 태그 키 및 값을 확인할 때 리소스 유형 및 리소스 서비스를 포함한 다른 속성을 확인할 수 없습니다.

리소스 속성

리소스 서비스, 리소스 유형, 리소스 이름 속성은 일반적으로 역할 바인딩에서 제공하는 액세스 권한 부여의 범위를 변경하는 데 사용됩니다. 역할에 여러 리소스 특정 속성에 적용되는 권한이 포함된 경우, 리소스 기반 조건을 사용하여 특정 유형 또는 특정 서비스에 대한 역할 권한의 하위 집합을 부여할 수 있습니다.

resource.service 속성

resource.service 속성을 사용하면 사용 중인Trusted Cloud 서비스를 기준으로 조건을 설정할 수 있습니다. 예를 들어 cloudresourcemanager.googleapis.com 서비스를 사용하는 리소스에 대한 사용자 액세스를 제한하는 조건을 설정할 수 있습니다. 지원되는 값 목록은 리소스 서비스 값을 참조하세요.

resource.service 속성은 허용 정책 역할 바인딩에서 사용할 수 있습니다.

속성 변수 resource.service
속성 유형

string

지원되는 값 목록은 리소스 서비스 값을 참조하세요.

지원되는 연산자 ,
세부정보 조건에서 resource.type 속성을 사용하는 경우 속성과 같음() 또는 같지 않음()을 확인합니다. 접두사 또는 접미사 확인과 같은 다른 비교로 인해 예상치 못한 결과가 발생할 수 있습니다.

Compute Engine 리소스의 경우 true를 반환합니다.

resource.service == "compute.googleapis.com"
지원되는 서비스
  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
  • Resource Manager

resource.type 속성

resource.type 속성을 사용하면 리소스 유형을 기준으로 조건을 설정할 수 있습니다. 예를 들어 storage.googleapis.com/Object 유형의 리소스에 대한 사용자 액세스를 제한하는 조건을 설정할 수 있습니다. 지원되는 값 목록은 리소스 유형 값을 참조하세요.

조건에서 resource.name 속성을 사용하는 경우 resource.type 속성을 사용하여 조건이 적용되는 리소스 유형을 제어하는 것이 좋습니다. 자세한 내용은 이 페이지의 resource.name 속성을 참조하세요.

resource.type 속성은 허용 정책 역할 바인딩에서 사용할 수 있습니다.

속성 변수 resource.type
속성 유형

string

지원되는 값 목록은 리소스 유형 값을 참조하세요.

지원되는 연산자 ,
세부정보 조건에서 resource.type 속성을 사용하는 경우 속성과 같음() 또는 같지 않음()을 확인합니다. 접두사 또는 접미사 확인과 같은 다른 비교로 인해 예상치 못한 결과가 발생할 수 있습니다.
예시

리소스가 Compute Engine 이미지가 아닌 경우 true를 반환합니다.

resource.type != "compute.googleapis.com/Image"

리소스가 Compute Engine 이미지 또는 영구 디스크인 경우에만 true를 반환합니다.

(resource.type == "compute.googleapis.com/Image" ||
 resource.type == "compute.googleapis.com/Disk")
지원되는 리소스 유형
BigQuery
  • 데이터 세트
  • 모델
  • 루틴
  • 테이블
BigQuery Reservation API
  • 할당
  • BI 예약
  • 용량 약정
  • 위치
  • 예약
Cloud Key Management Service
  • Crypto 키 버전
  • Crypto 키
  • 키링
  • 위치
Cloud Logging
  • 로그 버킷
  • 로그 뷰
Cloud SQL
  • 백업 실행
  • 인스턴스
Cloud Storage
  • 버킷
  • 관리되는 폴더
  • 객체
Compute Engine
  • 백엔드 서비스(전역 및 리전)
  • 방화벽
  • 전달 규칙(전역 및 리전)
  • 이미지
  • 인스턴스 템플릿
  • 인스턴스
  • 영구 디스크(리전 및 영역)
  • 스냅샷
  • 대상 HTTP(S) 프록시(전역 및 리전)
  • 대상 SSL 프록시
  • 대상 TCP 프록시
Trusted Cloud by S3NS
  • 위치1
Google Kubernetes Engine
  • 클러스터
Firestore
  • 데이터베이스
Resource Manager
  • 프로젝트

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 속성은 허용 정책 역할 바인딩에서 사용할 수 있습니다.

속성 변수 resource.name
속성 유형

string

각 리소스 유형은 리소스 이름에 특정 형식을 사용합니다. 형식 목록은 리소스 이름 형식을 참조하세요.

지원되는 함수 및 연산자 startsWith(), endsWith(), extract(), ,
세부정보

resource.name은 요청의 대상 리소스에 상대적 리소스 이름을 포함합니다. 상대적 리소스 이름은 선행 슬래시(/)가 없는 URI 경로입니다.

startsWith() 함수는 접두사 문자열 리터럴을 사용하여 resource.name에 대해 평가됩니다.

endsWith() 함수는 서픽스 문자열 리터럴을 사용하여 resource.name에 대해 평가됩니다.

extract() 함수는 추출 템플릿을 사용하여 resource.name의 일부를 추출합니다. 자세한 내용은 이 페이지의 리소스 이름에서 값 추출을 참조하세요.

연산자는 전체 resource.name 또는 resource.name의 추출된 부분과 비교하기 위해 사용됩니다.

예시

리소스 이름이 secret-bucket-123라는 Cloud Storage 버킷을 식별하지 않는 한 true를 반환합니다.

resource.name != "projects/_/buckets/secret-bucket-123"

리소스 이름이 Compute Engine VM 인스턴스에서 사용하는 형식으로 지정된 접두사로 시작하는 경우 true를 반환합니다.

resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")

리소스 이름이 Cloud Storage 버킷에서 사용하는 형식으로 지정된 접두사로 시작하면 true를 반환합니다.

resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")

리소스 이름이 지정된 접미사로 끝나는 경우(예: Cloud Storage 객체의 파일 확장자) true를 반환합니다.

resource.name.endsWith(".jpg")

프로젝트 이름 또는 번호가 있는 경우 이를 반환합니다.

resource.name.extract("projects/{project}/")
지원되는 리소스 유형
BigQuery
  • 데이터 세트
  • 모델
  • 루틴
  • 테이블
BigQuery Reservation API
  • 할당
  • BI 예약
  • 용량 약정
  • 위치
  • 예약
Cloud Key Management Service
  • Crypto 키
  • Crypto 키 버전
  • 키링
Cloud Logging
  • 로그 버킷
  • 로그 뷰
Cloud SQL
  • 백업 실행
  • 인스턴스
Cloud Storage
  • 버킷
  • 관리되는 폴더
  • 객체
Compute Engine
  • 백엔드 서비스(전역 및 리전)
  • 방화벽
  • 전달 규칙(전역 및 리전)
  • 이미지
  • 인스턴스 템플릿
  • 인스턴스
  • 영구 디스크(리전 및 영역)
  • 스냅샷
  • 대상 HTTP(S) 프록시(전역 및 리전)
  • 대상 SSL 프록시
  • 대상 TCP 프록시
Google Kubernetes Engine
  • 클러스터

리소스 태그

리소스 태그의 함수를 사용하면 리소스에 연결되거나 상속되는 태그를 기준으로 조건을 설정할 수 있습니다. 예를 들어 태그 env: prod가 연결된 리소스에 대해서만 역할을 부여하는 조건을 설정할 수 있습니다. 태그를 사용한 액세스 제어에 대한 자세한 내용은 태그 및 액세스 제어를 참조하세요.

각 태그는 키와 값으로 구성됩니다. 각 키 및 값에는 몇 가지 다른 유형의 식별자가 있습니다.

  • 영구 ID: 전역적으로 고유하며 재사용할 수 없습니다. 예를 들어 태그 키는 영구 ID tagKeys/123456789012, 태그 값은 영구 ID tagValues/567890123456를 가질 수 있습니다.
  • 닉네임: 각 키의 닉네임은 키가 정의된 프로젝트나 조직 내에서 고유해야 하며 각 값의 닉네임은 연결된 키에 고유해야 합니다. 예를 들어 태그 키에는 닉네임 env가, 태그 값에는 닉네임 prod가 있을 수 있습니다.
  • 네임스페이스화된 이름: 조직의 숫자 ID나 프로젝트 ID를 태그 키의 닉네임에 추가합니다. 예를 들어 조직에 만든 태그 키에는 네임스페이스화된 이름 123456789012/env가 있을 수 있습니다. 조직 ID를 가져오는 방법은 조직 리소스 ID 가져오기를 참조하세요. 프로젝트에 만든 태그 키에는 네임스페이스화된 이름 myproject/env가 있을 수 있습니다. 프로젝트 ID를 가져오는 방법은 프로젝트 식별을 참조하세요.

조건에서 사용할 식별자 유형을 선택하는 방법은 태그 정의 및 식별자를 참조하세요.

태그 기반 조건을 사용하여 모든 리소스에 대한 액세스를 조건부로 설정할 수 있습니다. 여기에는 자체 태그가 있는 리소스와 다른 리소스에서 태그를 상속하는 리소스가 포함됩니다. 리소스 계층 구조를 통해 태그가 상속되는 방식에 관한 자세한 내용은 태그 상속을 참고하세요.

태그 기반 조건은 다음에서 사용할 수 있습니다.

  • 허용 정책 역할 바인딩
  • 거부 정책 거부 규칙

다음 함수를 사용하여 태그를 기반으로 조건을 설정할 수 있습니다.

함수 설명
resource.hasTagKey(
  keyName: string
)
  bool

요청의 리소스에 지정된 키가 있는 태그가 있는지 확인합니다. 태그 키는 네임스페이스화된 이름으로 조회됩니다. 영구 ID를 사용하여 태그 키를 확인하려면 resource.hasTagKeyId() 함수를 사용합니다.

매개변수
keyName: 조직의 숫자 ID와 슬래시를 접두사로 사용하는 태그 키의 네임스페이스 이름입니다. 예: 123456789012/env

요청의 리소스에 env 키가 있는 태그가 있으면 true를 반환합니다.

resource.hasTagKey('123456789012/env')
resource.hasTagKeyId(
  keyId: string
)
  bool

요청의 리소스에 지정된 키가 있는 태그가 있는지 확인합니다. 태그 키는 영구 ID로 조회됩니다. 네임스페이스화된 이름을 사용하여 태그 키를 확인하려면 resource.hasTagKey() 함수를 사용합니다.

매개변수
keyId: 태그 키의 영구 ID입니다. 예를 들면 tagKeys/123456789012입니다.

요청의 리소스에 tagKeys/123456789012 키가 있는 태그가 있으면 true를 반환합니다.

resource.hasTagKeyId('tagKeys/123456789012')
resource.matchTag(
  keyName: string,
  valueShortName: string
)
  bool

요청의 리소스에 지정된 키 및 값이 있는 태그가 있는지 확인합니다. 키는 네임스페이스화된 이름으로 조회되고 값은 닉네임으로 조회됩니다. 영구 ID를 사용하여 태그 키 및 값을 확인하려면 resource.matchTagId() 함수를 사용합니다.

Parameters
  • keyName : 조직의 숫자 ID와 슬래시를 접두사로 사용하는 태그 키의 네임스페이스 이름입니다. 예를 들면 123456789012/env입니다.
  • valueShortName: 태그 값의 짦은 이름입니다. 예를 들면 prod입니다.

요청의 리소스에 123456789012/env 키 및 prod 값이 있는 태그가 있다면 true를 반환합니다.

resource.matchTag('123456789012/env', 'prod')
resource.matchTagId(
  keyId: string,
  valueId: string
)
  bool

요청의 리소스에 지정된 키 및 값이 있는 태그가 있는지 확인합니다. 키와 값은 영구 ID로 조회됩니다. 네임스페이스화된 이름을 사용하여 태그 키를 확인하고 닉네임을 사용하여 값을 확인하려면 resource.matchTag() 함수를 사용합니다.

Parameters
  • keyId: 태그 키의 영구 ID입니다. 예를 들면 tagKeys/123456789012입니다.
  • valueId: 태그 값의 영구 ID입니다. 예를 들면 tagValues/567890123456입니다.

요청의 리소스에 tagKeys/123456789012 키 및 tagValues/567890123456 값이 있는 태그가 있다면 true를 반환합니다.

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

요청 속성

요청 속성을 사용하면 요청으로 수정된 역할 또는 요청의 날짜 및 시간과 같은 요청에 대한 세부정보를 평가하는 조건을 만들 수 있습니다.

API 속성

API 속성을 사용하면 특정Trusted Cloud API 또는 서비스에서 제공되는 데이터를 기준으로 액세스를 관리할 수 있습니다. 허용 정책 역할 바인딩에서 API 속성을 사용할 수 있습니다.

조건에서 API 속성을 사용해야 하는 경우의 예시는 다음 페이지를 참조하세요.

  • 역할 부여 제한 설정
  • 일부 서비스는 API 속성을 인식하지 못합니다. 다음 섹션은 각 API 속성을 인식하는 서비스를 나타냅니다.

    API 속성용 함수

    다음 함수를 사용하면 API 속성 작업을 수행할 수 있습니다.

    함수 설명
    api.getAttribute(
      attributeName: string,
      defaultValue: V<T>
    )
      V<T>

    요청된 API 속성을 가져옵니다.

    Parameters
    • attributeName: 가져올 API 속성입니다. 지원되는 값은 이 페이지의 Cloud Storage API 속성IAM API 속성을 참조하세요.
    • defaultValue: API 속성을 사용할 수 없는 경우에 사용할 기본값(V)입니다. 값 VT 유형이며, T는 API 속성의 값과 동일한 유형입니다. 예를 들어 API 속성 값이 문자열이면 빈 문자열 또는 undefined와 같은 자리표시자 문자열을 사용할 수 있습니다.

    다음 중 하나를 반환합니다.

    • 역할 부여 또는 취소 요청의 경우 요청에 의해 수정된 역할 목록을 반환합니다.
    • 다른 모든 유형의 요청의 경우 빈 목록을 반환합니다.
    api.getAttribute("iam.googleapis.com/modifiedGrantsByRole", [])
    hasOnly(
      items: list<T>
    )
      bool

    목록에 허용된 항목 또는 이러한 항목의 하위 집합이 포함되어 있는지 확인합니다. api.getAttribute()에서 반환되는 목록에서 함수를 호출합니다.

    매개변수
    items: 유형이 T인 항목의 목록입니다. 각 항목은 API 속성을 포함하도록 허용된 값입니다.

    요청이 Pub/Sub 편집자(roles/pubsub.editor) 또는 Pub/Sub 게시자(roles/pubsub.publisher) 이외의 역할을 부여하거나 취소할지 확인합니다.

    api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
        .hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])

    다음은 다양한 요청 값의 결과를 보여줍니다.

    부여/취소된 역할 결과
    없음

    true

    수정된 역할이 없으면 api.getAttribute()가 기본값을 반환합니다. 이 속성의 경우 기본값이 항상 빈 목록입니다. 기본적으로 빈 목록은 허용 목록에 없는 값을 포함하지 않습니다.

    roles/pubsub.editor

    true

    역할이 허용 목록에 있습니다.

    roles/pubsub.editor
    roles/pubsub.publisher

    true

    두 역할 모두 허용 목록에 있습니다.

    roles/billing.admin

    false

    역할이 허용 목록에 있습니다.

    roles/billing.admin
    roles/pubsub.editor

    false

    한 역할은 허용 목록에 있지만 다른 역할은 그렇지 않습니다.

    IAM API 속성

    IAM은 다음과 같은 API 속성을 제공합니다.

    속성 변수 iam.googleapis.com/modifiedGrantsByRole
    속성 유형 list<string>
    세부정보

    리소스의 허용 정책을 설정하기 위한 요청의 경우 이 속성에는 요청이 수정하는 결합의 역할 이름이 포함됩니다.

    다른 유형의 요청에서는 이 속성이 정의되지 않습니다.

    이 속성을 허용하는 리소스 유형

    다음 리소스 유형은 해당 허용 정책에서 modifiedGrantsByRole 속성의 조건을 허용합니다.

    • 프로젝트
    • 폴더
    • 조직
    이 속성을 인식하는 서비스:

    다음 서비스는 modifiedGrantsByRole 속성을 인식합니다.

    • Cloud Key Management Service
    • Cloud Storage
    • Compute Engine
    • Identity and Access Management
    • Resource Manager

    날짜/시간 속성

    날짜/시간 속성은 Trusted Cloud 리소스에 대한 만료, 예약, 기간 제한 액세스를 설정하는 데 사용됩니다. 허용 정책 역할 바인딩에서 날짜/시간 속성을 사용할 수 있습니다.

    이 속성은 모든 Trusted Cloud 서비스 및 리소스 유형에서 지원됩니다. 이를 직접 지원하지 않는 리소스에 날짜/시간 조건을 적용하는 방법은 이 페이지의 상속된 조건 지원을 참조하세요.

    request.time 속성에는 요청의 타임스탬프가 포함됩니다. 이 타임스탬프를 다른 타임스탬프 또는 기간과 비교할 수 있습니다.

    다음 섹션에는 타임스탬프 및 기간을 기반으로 조건을 설정하는 데 사용할 수 있는 함수가 나와 있습니다.

    타임스탬프 및 기간 만들기, 비교, 수정

    함수 또는 연산자 설명
    date(
      value: string
    )
      Timestamp

    날짜를 string에서 Timestamp로 변환합니다.

    매개변수
    value: YYYY-MM-DD 형식의 날짜에서 YYYY는 연도, MM는 두 자리 월, DD는 두 자리 일입니다. 생성된 Timestamp에는 지정된 날짜와 시간(00:00:00.000 UTC)이 포함됩니다.

    날짜 2023-02-01와 시간 00:00:00.000 UTC를 나타내는 Timestamp를 만듭니다.

    date("2023-02-01")
    duration(
      value: string
    )
      Duration

    시간을 string에서 Duration으로 변환합니다.

    매개변수
    value: 초 단위의 Duration 뒤에 s가 옵니다.
    예시

    1.5분을 나타내는 기간을 만듭니다.

    duration("90s")

    30일을 나타내는 기간을 만듭니다.

    duration("2592000s")
    timestamp(
      value: string
    )
      Timestamp

    stringTimestamp으로 변환합니다.

    매개변수

    value: RFC 3339를 준수하는 UTC 타임스탬프입니다.

    2023년 4월 12일 23:20:50.52(UTC)를 나타내는 타임스탬프를 만듭니다.

    timestamp("2023-04-12T23:20:50.52Z")
    , , ,

    두 개의 Timestamp 값을 비교합니다.

    예시

    요청 시간이 2022년 4월 12일 00:00:00 UTC 이전(해당 시점 불포함)인 경우 true를 반환합니다.

    request.time < timestamp("2022-04-12T00:00:00.00Z")

    요청 시간이 2022년 4월 12일 00:00:00 UTC 이전(해당 시점 포함)인 경우 true를 반환합니다.

    request.time <= timestamp("2022-04-12T00:00:00.00Z")

    요청 시간이 2022년 4월 12일 00:00:00 UTC 이후(해당 시점 불포함)인 경우 true를 반환합니다.

    request.time > timestamp("2022-04-12T00:00:00.00Z")

    요청 시간이 2022년 4월 12일 00:00:00 UTC 이후(해당 시점 포함)인 경우 true를 반환합니다.

    request.time >= timestamp("2022-04-12T00:00:00.00Z")
    • timestamp + duration   Timestamp
    • timestamp - duration   Timestamp

    Timestamp에서 Duration을 더하거나 뺍니다.

    예시

    2024년 4월 12일 14:30:00 UTC에서 30분 후에 해당하는 Timestamp를 반환합니다.

    timestamp("2024-04-12T14:30:00.00Z") + duration("1800s")

    2024년 4월 12일 14:30:00 UTC에서 60일 전에 해당하는 Timestamp를 반환합니다.

    timestamp("2024-04-12T14:30:00.00Z") - duration("5184000s")

    타임스탬프에서 정보 추출

    이 섹션의 함수를 사용하면 타임스탬프에 해당하는 요일과 같이 타임스탬프에서 정보를 추출할 수 있습니다.

    IAM 조건에서 모든 타임스탬프는 UTC로 표시됩니다. 하지만 다른 시간대를 기준으로 정보를 추출해야 할 수도 있습니다. 예를 들어 UTC 타임스탬프가 독일 베를린의 시간대에서 월요일인지 알아내야 하는 경우가 있습니다.

    다른 시간대를 지정하려면 해당 시간대를 함수에 전달합니다. IETF 시간대 데이터베이스의 이름 또는 UTC 오프셋을 사용합니다. 예를 들어 중부 유럽 표준시(CET)에 Europe/Berlin 또는 +01:00을 사용할 수 있습니다.

    지원되는 함수 및 연산자 설명
    Timestamp.getDate(
      timeZone: string
    )
      int

    Timestamp에서 월중 날짜를 가져옵니다. 이 값은 1 기준 색인을 사용합니다. 즉, 한 달의 첫 날은 1입니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.

    해당 월의 15일(UTC) 후에 요청이 전송되면 true를 반환합니다.

    request.time.getDate() > 15
    Timestamp.getDayOfMonth(
      timeZone: string
    )
      int

    Timestamp에서 월중 날짜를 가져옵니다. 이 값은 0 기준 색인을 사용합니다. 즉, 한 달의 첫 날은 0입니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.

    해당 월의 15일(UTC) 후에 요청이 전송되면 true를 반환합니다.

    request.time.getDayOfMonth() > 14
    Timestamp.getDayOfWeek(
      timeZone: string
    )
      int

    Timestamp에서 요일을 가져옵니다. 이 값은 0 기준 색인을 사용합니다. 예를 들어 일요일은 0입니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.

    독일 베를린에서 월요일과 금요일 사이에 요청이 전송되는 경우 true를 반환합니다.

    request.time.getDayOfWeek("Europe/Berlin") > 0 &&
        request.time.getDayOfWeek("Europe/Berlin") < 6
    Timestamp.getDayOfYear(
      timeZone: string
    )
      int

    Timestamp에서 연중 날짜를 가져옵니다. 이 값은 0 기준 색인을 사용합니다. 즉, 그 해의 첫 번째 날은 0입니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.

    1년 중 첫 5일 동안 캘리포니아주 마운틴뷰에서 요청이 전송되면 true를 반환합니다.

    request.time.getDayOfYear("America/Los_Angeles") >= 0 &&
        request.time.getDayOfYear("America/Los_Angeles") < 5
    Timestamp.getFullYear(
      timeZone: string
    )
      int

    Timestamp에서 연도를 가져옵니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.

    2023년 동안 캘리포니아주 마운틴뷰에서 요청이 전송된 경우 true가 반환됩니다.

    request.time.getFullYear("America/Los_Angeles") == 2023

    요청이 UTC로 2022년 중에 전송된 경우 true를 반환합니다.

    request.time.getFullYear() == 2022
    Timestamp.getHours(
      timeZone: string
    )
      int

    Timestamp에서 시간을 가져옵니다. 이 값은 0 기준 색인을 사용합니다. 값의 범위는 0~23입니다.

    이 함수를 getDayofWeek()와 결합하여 관할권에서 허용되는 근무 시간 동안에만 액세스 권한을 부여할 수 있습니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.

    독일 베를린 시간으로 평일 09:00(오전 9시)부터 17:00(오후 5시) 사이에 요청이 전송되면 true를 반환합니다.

    request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
        request.time.getDayOfWeek("Europe/Berlin") <= 5 &&
        request.time.getHours("Europe/Berlin") >= 9 &&
        request.time.getHours("Europe/Berlin") <= 17
    Timestamp.getMilliseconds(
      timeZone: string
    )
      int

    Timestamp에서 밀리초 수를 가져옵니다. 이 값은 0 기준 색인을 사용합니다. 값의 범위는 0~999입니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.
    Timestamp.getMinutes(
      timeZone: string
    )
      int

    Timestamp에서 시간 다음의 분을 가져옵니다. 이 값은 0 기준 색인을 사용합니다. 값의 범위는 0~59입니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.

    독일 베를린 시간으로 09:30(오전 9시 30분) 또는 그 이후에 요청이 전송되면 true를 반환합니다.

    request.time.getHours("Europe/Berlin") >= 9 &&
        request.time.getMinutes("Europe/Berlin") >= 30
    Timestamp.getMonth(
      timeZone: string
    )
      int

    Timestamp에서 연중 해당 월을 가져옵니다. 이 값은 0 기준 색인을 사용합니다. 값의 범위는 0~11입니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.

    4월에 캘리포니아주 마운틴뷰에서 요청이 전송된 경우 true를 반환합니다.

    request.time.getMonth("America/Los_Angeles") == 3
    Timestamp.getSeconds(
      timeZone: string
    )
      int

    Timestamp에서 초 수를 가져옵니다. 이 값은 0 기준 색인을 사용합니다. 값의 범위는 0~59입니다.

    매개변수
    timeZone: 결과를 계산할 시간대입니다. 기본값은 UTC입니다.
    , , ,

    이 표에서 두 함수의 출력을 비교합니다.

    전달 규칙 속성

    전달 규칙 속성을 사용하면 주 구성원이 만들 수 있는 전달 규칙의 유형을 지정할 수 있습니다. 예를 들어 주 구성원이 인터넷에서 발생한 트래픽을 처리하는 외부 Trusted Cloud부하 분산기가 아닌 Trusted Cloud 네트워크 내부에서 발생한 트래픽을 처리하는 내부 Trusted Cloud by S3NS부하 분산기에 대한 전달 규칙을 만들 수 있도록 허용할 수 있습니다. 허용 정책 역할 바인딩에서 전달 규칙 속성을 사용할 수 있습니다.

    Cloud Load Balancing의 경우 전달 규칙 속성은 백엔드 서비스, 대상 프록시, 상태 점검, URL 맵과 같은 Trusted Cloud 부하 분산기의 다른 구성요소를 만드는 기능에는 영향을 미치지 않습니다.

    지원되는 함수

    함수 설명
    compute.isForwardingRuleCreationOperation()   bool

    요청이 전달 규칙을 만드는지 확인합니다.

    compute.matchLoadBalancingSchemes()의 예시를 참조하세요.
    compute.matchLoadBalancingSchemes(
      schemes: list<string>
    )
      bool

    요청이 지정된 유형의 부하 분산 스키마 중 하나에 영향을 미치는지 확인합니다. 각 부하 분산 스키마의 식별자와 자세한 내용은 Trusted Cloud 부하 분산기에서 IAM 조건 사용을 참고하세요.

    매개변수
    schemes: 요청이 영향을 줄 수 있는 부하 분산 스키마입니다.

    다음 중 하나를 반환합니다.

    • 요청이 전달 규칙을 만들지 않는 경우 true를 반환합니다.
    • 요청이 전달 규칙을 만드는 경우 전달 규칙이 INTERNAL, INTERNAL_MANAGED 또는 INTERNAL_SELF_MANAGED 부하 분산 스키마에 영향을 미치는 경우에만 true를 반환합니다.
    !compute.isForwardingRuleCreationOperation() || (
      compute.isForwardingRuleCreationOperation() &&
      compute.matchLoadBalancingSchemes([
        'INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'
      ])
    )

    지원되는 리소스 유형

    이 속성은 다음 리소스 유형을 만드는 요청에 사용할 수 있습니다.

    서비스 리소스 유형
    Cloud Load Balancing 전달 규칙
    Cloud VPN 전달 규칙(전역 및 리전)
    Compute Engine 전달 규칙(프로토콜 전달)
    Cloud Service Mesh1 전달 규칙

    1 Compute Engine의 리소스 속성을 사용합니다.

    속성에서 값 추출

    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=2019-11-03/aef87g87ae0876의 리소스 이름을 참조합니다.

    추출 템플릿 출력
    /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/order_date=2019-11-03/aef87g87ae0876
    /orders/{none}/order_date= 비어 있는 string
    /orders/order_date=2019-11-03/{id}/data_lake 비어 있는 string

    날짜를 나타내는 문자열을 추출하는 경우 이 페이지의 날짜/시간 함수 및 연산자를 사용하면 추출된 값을 Timestamp로 변환할 수 있습니다. 예시는 리소스 기반 액세스 구성을 참조하세요.