태그 및 조건부 액세스

이 페이지에서는 Identity and Access Management(IAM)와 함께 태그를 사용하여 Google Cloud 리소스에 대한 액세스를 제어하는 방법을 설명합니다.

태그에 대한 자세한 내용은 태그 개요를 참고하세요.

태그 개요

태그는 Google Cloud 리소스에 연결되는 키-값 쌍입니다. 리소스에 특정 태그가 있는지 여부에 따라 IAM 역할을 조건부로 부여하거나 IAM 권한을 조건부로 거부할 수 있습니다.

리소스는 상위 조직, 폴더, 프로젝트에서 태그 값을 상속합니다. 따라서 태그를 사용하여 모든 Google Cloud 리소스에 대한 액세스를 관리할 수 있습니다.

다음은 태그로 액세스를 관리하는 몇 가지 일반적인 사용 사례입니다.

  • 개발, 스테이징, 프로덕션 환경. 예를 들어 개발 환경에 environment: dev 태그를 추가하고 environment: prod를 프로덕션 환경에 추가할 수 있습니다.
  • 구성요소 유형. 예를 들어 프런트엔드 리소스에 component: frontend 태그를 추가하고 일괄 처리용 리소스에 component: batch를 추가할 수 있습니다.
  • 프로젝트 이름. 예를 들어 팀이 코드명이 Atlas인 프로젝트에서 작업하는 경우 팀의 개발 리소스에 project: atlas 태그를 추가할 수 있습니다.

태그 정의 및 식별자

태그를 리소스에 연결하기 전에 태그의 키뿐만 아니라 태그가 허용하는 값을 정의해야 합니다. 이러한 정의는 조직 또는 프로젝트 수준에서 만들 수 있습니다. Resource Manager를 사용하여 태그 정의를 관리합니다. 자세한 내용은 새 태그 만들기 및 정의를 참조하세요.

각 태그 키 및 값은 다음과 같은 몇 가지 식별자를 가집니다.

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

이 페이지에 설명된 대로 리소스에 태그를 연결한 후 태그를 기준으로 액세스 권한을 부여하는 조건을 작성할 수 있습니다. 조건을 작성하려면 조건에서 사용할 식별자 유형을 선택해야 합니다. 다음 가이드라인에 따라 다음 중 하나를 선택하세요.

  • 태그를 실험하려면 네임스페이스화된 이름(키의 경우) 및 닉네임(값의 경우)을 사용하는 것이 좋습니다. 이러한 식별자는 특히 시작할 때 쉽게 이해하고 기억할 수 있습니다.
  • Terraform과 같은 도구를 사용하여 구성을 선언적으로 관리하는 경우 네임스페이스화된 이름(키의 경우) 및 닉네임(값의 경우)을 사용하는 것이 좋습니다. 시간이 지나면 이 식별자를 다시 사용할 수 있습니다. 즉, 선언적 도구가 식별자를 삭제하고 다시 생성할 수 있으며 조건은 계속 작동합니다.

    이 접근법에는 단점이 있습니다. 태그 키 또는 값을 삭제한 후 이름이 같지만 의미가 다른 새 키 또는 값을 만든다고 가정해 보겠습니다. 조건이 네임스페이스화된 이름 또는 닉네임을 참조하는 경우 조건이 새 키 또는 값에 계속 적용됩니다.

    경우에 따라 이 동작으로 인해 주 구성원에게 의도하지 않은 액세스 권한이 부여될 수도 있습니다.

  • 위험을 최소화하려면 다시 사용할 수 없는 영구 ID를 사용하는 것이 좋습니다.

    영구 ID가 위험을 최소화하는 데 도움이 되는 이유는 다음과 같습니다. 태그 키 또는 값을 삭제한 후 이름이 같지만 의미가 다른 새 키 또는 값을 만든다고 가정해 보겠습니다. 조건이 영구 ID를 참조하는 경우 새 키 또는 값에 조건이 적용되지 않습니다. 따라서 주 구성원에게 의도하지 않은 액세스 권한이 부여될 가능성이 낮아집니다.

    한 가지 단점은 키와 값을 삭제하고 다시 만들고 주 구성원의 액세스 권한을 유지하려면 새 영구 ID를 참조하도록 허용 정책도 업데이트해야 한다는 점입니다.

태그가 지정된 리소스에 대한 액세스

IAM 조건이 있는 태그를 사용하여 리소스에 첨부되거나 상속된 태그를 기준으로 조건부 역할을 부여할 수 있습니다. 조건이 true로 평가되면 액세스가 부여됩니다. 그렇지 않으면 액세스 권한이 부여되지 않습니다. 자세한 내용은 IAM 조건 개요를 참조하세요.

다음 섹션에서는 리소스의 태그를 확인하는 조건 표현식의 예시를 보여줍니다. 조건은 영구 ID 또는 닉네임을 확인하는지에 따라 다른 함수를 호출합니다. 이러한 함수에 대한 자세한 내용은 리소스 태그를 참조하세요.

영구 ID를 사용하는 조건

이 조건은 tagKeys/123456789012: tagValues/567890123456 태그가 있는 리소스에 역할을 부여합니다.

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

이 조건은 값에 관계없이 키가 tagKeys/123456789012인 태그가 있는 리소스에 역할을 부여합니다.

resource.hasTagKeyId('tagKeys/123456789012')

이 조건은 tagKeys/123456789012: tagValues/567890123456 태그와 tagKeys/987654321098 키를 사용하는 모든 태그가 있는 리소스에 역할을 부여합니다.

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

네임스페이스화된 이름과 닉네임을 사용하는 조건

이 조건은 리소스가 프로덕션 환경에 있음을 나타내는 env: prod 태그가 있는 리소스에 역할을 부여합니다.

resource.matchTag('123456789012/env', 'prod')

이 조건은 값에 관계없이 키가 env인 태그가 있는 리소스에 역할을 부여합니다.

resource.hasTagKey('123456789012/env')

이 조건은 env: prod 태그와 project 키를 사용하는 모든 태그가 있는 리소스에 역할을 부여합니다.

resource.matchTag('123456789012/env', 'prod') &&
    resource.hasTagKey('123456789012/project')

다음 단계