직원 ID 제휴

이 문서에서는 직원 ID 제휴의 주요 개념을 설명합니다.

직원 ID 제휴란 무엇인가요?

직원 ID 제휴를 사용하면 외부 ID 공급업체(IdP)에서 직원, 파트너, 계약업체와 같은 사용자 그룹에 IAM을 사용하여 직원임을 인증하고 액세스를 승인할 수 있으므로 해당 사용자가 Google Cloud 서비스에 액세스할 수 있습니다. 직원 ID 제휴를 사용하면 Cloud ID의 Google Cloud 디렉터리 동기화(GCDS)에서와 같이 기존 IdP에서 Google Cloud ID로 사용자 ID를 동기화할 필요가 없습니다. 직원 ID 제휴는 Google Cloud의 ID 기능을 확장하여 동기화가 없는 속성 기반 싱글 사인온(SSO)을 지원합니다.

사용자 인증 후 IdP에서 수신되는 정보는 Google Cloud 리소스에 대한 액세스 범위를 결정하기 위해 사용됩니다.

Microsoft Entra ID, Active Directory Federation Services(AD FS), Okta 등과 같이 OpenID Connect(OIDC) 또는 SAML 2.0을 지원하는 모든 IdP에서 직원 ID 제휴를 사용할 수 있습니다.

직원 ID 풀

직원 ID 풀을 사용하면 직원 ID 그룹 및 Google Cloud 리소스에 대한 액세스를 관리할 수 있습니다.

풀을 사용하여 다음을 수행할 수 있습니다.

  • employees 또는 partners와 같은 사용자 ID를 그룹화합니다.
  • 전체 풀 또는 하위 집합에 대해 IAM 액세스를 부여합니다.
  • 하나 이상의 IdP에서 ID를 제휴합니다.
  • 비슷한 액세스 권한이 필요한 사용자 그룹에 정책을 정의합니다.
  • 속성 매핑속성 조건을 포함하여 IdP 특정 구성 정보를 지정합니다.
  • 타사 ID에 대해 Google Cloud CLI 및 API 액세스를 사용 설정합니다.
  • 풀 ID 내 사용자 액세스를 풀 ID와 함께 Cloud 감사 로그에 기록합니다.

여러 풀을 만들 수 있습니다. 이러한 접근 방식을 기술하는 한 가지 예시는 예시: 여러 직원 ID 풀을 참조하세요.

풀은 Google Cloud 조직 수준에서 구성됩니다. 따라서 풀을 볼 수 있는 적절한 IAM 권한이 있는 한 조직 내 모든 프로젝트 및 폴더에서 풀을 사용할 수 있습니다. 조직의 직원 ID 제후를 처음 설정할 때는 풀 이름을 제공합니다. IAM 허용 정책에서는 풀을 이름으로 참조합니다. 따라서 포함된 ID를 명확하게 기술하도록 풀 이름을 지정하는 것이 좋습니다.

직원 ID 풀 제공업체

직원 ID 풀 제공업체는 Google Cloud 조직과 IdP 사이의 관계를 기술하는 항목입니다.

직원 ID 제휴는 OAuth 2.0 토큰 교환 사양(RFC 8693)을 따릅니다. 외부 ID 공급업체의 사용자 인증 정보를 보안 토큰 서비스에 제공하면 보안 토큰 서비스가 사용자 인증 정보에서 ID를 확인하고 단기 Google Cloud 액세스 토큰을 반환합니다.

OIDC 흐름 유형

OIDC 공급업체에 대한 직원 ID 제휴는 승인 코드 플로우암시적 흐름 모두 지원합니다. 사용자가 인증된 후 별도의 안전한 보안 백엔드 트랜잭션의 IdP에서 Google Cloud로 직접 토큰이 반환되므로 승인 코드 플로우가 가장 안전한 것으로 간주됩니다. 따라서 코드 흐름 트랜잭션이 모든 크기의 토큰을 검색할 수 있으므로 속성 매핑과 속성 조건에 클레임을 더 많이 사용할 수 있습니다. 반면에, 암시적 흐름에서는 ID 토큰이 IdP에서 브라우저로 반환됩니다. 토큰에는 개별 브라우저 URL 크기 제한이 적용됩니다.

Google Cloud 직원 ID 제휴 콘솔

직원 ID 풀의 사용자는 콘솔(제휴)이라고도 하는 Google Cloud 직원 ID 제휴 콘솔에 액세스할 수 있습니다. 콘솔에서는 이러한 사용자에게 직원 ID 제휴를 지원하는 Google Cloud 제품에 대한 UI 액세스 권한을 제공합니다.

속성 매핑

IdP는 일부 IdP에서 클레임이라고 부르는 속성을 제공합니다. 속성에는 사용자에 대한 정보가 포함됩니다. Common Expression Language(CEL)를 사용하여 Google Cloud에서 사용하도록 이러한 속성을 매핑할 수 있습니다.

이 섹션에서는 Google Cloud에서 제공하는 필수 및 선택적인 속성 집합에 대해 설명합니다.

또한 IdP에서 커스텀 속성을 정의하여 IAM 허용 정책과 같이 특정 Google Cloud 제품에서 사용할 수도 있습니다.

속성 매핑의 최대 크기는 4KB입니다.

속성은 다음과 같습니다.

  • google.subject(필수): 사용자 인증을 위한 고유 식별자입니다. Cloud 감사 로그가 이 필드의 콘텐츠를 주 구성원으로 기록하기 때문에 JWT의 주체 어설션인 경우가 많습니다. 이 필드를 사용하여 승인 결정에 대한 IAM을 구성할 수 있습니다. IdP의 사용자 디렉터리에서 값을 변경하면 사용자가 액세스할 수 없으므로, 변경 가능한 값을 사용하지 않는 것이 좋습니다.

    최대 길이는 127바이트입니다.

  • google.groups(선택사항): 인증 사용자가 구성원인 그룹의 모음입니다. 문자열 배열을 생성하는 CEL의 하위 집합을 사용하여 논리 표현식을 구성할 수 있습니다. 또한 이 필드를 사용하여 승인 결정에 대한 IAM을 구성할 수 있습니다. google.groups의 제한사항은 다음과 같습니다.

    • 그룹 이름을 100자로 제한하는 것이 좋습니다.

    • 한 사용자가 100개 초과 그룹과 연관된 경우 더 적은 수의 그룹을 정의하고 사용자를 Google Cloud에 제휴하기 위해 사용되는 어설션에 이러한 그룹만 포함합니다. 사용자 한 명이 100개가 넘는 그룹에 속해 있으면 인증에 실패합니다.

    • 이 속성을 사용하여 IAM에서 액세스를 부여할 경우 매핑된 그룹의 모든 구성원에 액세스가 부여됩니다. 따라서 조직에서 승인된 사용자만 매핑된 그룹의 멤버십을 수정할 수 있도록 하는 것이 좋습니다.

  • google.display_name(선택사항): Google Cloud 콘솔에서 로그인한 사용의 이름을 설정하기 위해 사용되는 속성입니다. 이 속성은 IAM 허용 정책 또는 속성 조건에서 사용할 수 없습니다.

    최대 길이는 100바이트입니다.

  • google.profile_photo(선택사항): 사용자 썸네일 사진의 URL입니다. 사진을 400x400픽셀로 설정하는 것이 좋습니다. 이 속성을 설정하면 이미지가 Google Cloud 콘솔에서 사용자의 프로필 사진으로 표시됩니다. 이 값이 설정되지 않았거나 이를 가져올 수 없으면 일반적인 사용자 아이콘이 대신 표시됩니다. 이 속성은 IAM 허용 정책 또는 속성 조건에서 사용할 수 없습니다.

  • google.posix_username (선택사항): 다음 항목에 사용되는 고유한 POSIX 호환 사용자 이름 문자열:

    이 속성은 IAM 허용 정책 또는 속성 조건에서 사용할 수 없습니다. 최대 길이는 32자(영문 기준)입니다.

  • attribute.KEY (선택사항): 사용자의 IdP 토큰에 있는 외부 IdP 정의 속성입니다. 커스텀 속성을 사용하여 IAM 허용 정책에서 승인 전략을 정의할 수 있습니다.

    예를 들어 IdP에서 사용자의 비용 센터와 같은 속성을 costcenter = "1234"로 정의한 다음 다음과 같이 사용자를 참조할 수 있습니다.

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.costcenter/1234
    

    이 사용자 식별자에 Google Cloud 리소스에 대한 액세스 권한을 부여하면 IdP에서 costcenter 속성을 1234로 설정하도록 구성된 모든 ID가 리소스에 액세스할 수 있습니다.

    최대 50개의 커스텀 속성 매핑 규칙을 구성할 수 있습니다. 이러한 각 규칙의 최대 크기는 2,048자입니다.

    여기에 매핑할 수 있는 속성에는 제한이 없지만 값이 안정적인 속성을 선택하는 것이 좋습니다. 예를 들어 attribute.job_description과 같은 속성은 가독성 향상 등의 여러 이유로 변경될 수 있습니다. 대신 attribute.role을 사용하는 것이 좋습니다. 후자에 대한 변경은 할당된 책임의 변경을 나타내며, 사용자에게 부여된 액세스 변경과 일치합니다.

표준 CEL 함수를 사용하여 속성 값을 변환할 수 있습니다. 다음과 같은 커스텀 함수를 사용할 수도 있습니다.

  • split 함수는 제공된 구분 기호 값으로 문자열을 분할합니다. 예를 들어 @에서 값을 분할하고 첫 번째 문자열을 사용하여 이메일 주소 속성에서 username 속성을 추출하려면 다음 속성 매핑을 사용합니다.

    attribute.username=assertion.email.split("@")[0]
    

  • join 함수는 제공된 구분 기호 값으로 문자열 목록을 조인합니다. 예를 들어 문자열 목록을 구분 기호 .로 연결하여 커스텀 속성 department를 채우려면 다음 속성 매핑을 사용합니다.

    attribute.department=assertion.department.join(".")
    

속성 조건

속성 조건은 Google Cloud에서 허용되는 ID 속성에 대한 제약조건을 설정할 수 있게 해주는 선택적인 CEL 표현식입니다.

속성 조건을 사용할 때의 이점은 다음과 같습니다.

  • 속성 조건을 사용하여 외부 ID의 하위 집합만 Google Cloud 프로젝트에 인증되도록 허용할 수 있습니다. 예를 들어 특히 공개 IdP를 사용하는 경우 특정 팀에 있는 ID만 로그인하도록 허용해야 할 수 있습니다. 또 다른 예로, 엔지니어링팀이 아닌 계정팀만 로그인하도록 허용해야 할 수 있습니다.
  • 속성 조건을 사용하면 다른 플랫폼에서 사용하려는 사용자 인증 정보가 Google Cloud에 사용되지 않도록 할 수 있고, 그 반대의 경우도 마찬가지입니다. 이는 혼동된 대리인 문제를 피하는 데 도움이 됩니다.

GitHub 또는 다른 멀티 테넌트 ID 공급업체와 제휴할 때 속성 조건 사용

직원 ID 제휴는 사용자 계정 디렉터리를 유지하지 않습니다. 대신 클레임 기반 ID를 구현합니다. 따라서 두 토큰이 같은 ID 공급업체(IdP)에서 발급되고 클레임이 같은 google.subject 값에 매핑되면 두 토큰은 같은 사용자를 식별한다고 가정됩니다. 토큰을 발급한 IdP를 찾기 위해 직원 ID 제휴는 토큰 발급기관 URL을 검사하고 확인합니다.

GitHub 및 Terraform Cloud와 같은 멀티 테넌트 IdP는 모든 테넌트에서 단일 발급기관 URL을 사용합니다. 이러한 제공업체의 경우 발급기관 URL은 특정 GitHub 또는 Terraform Cloud 조직이 아닌 모든 GitHub 또는 Terraform Cloud를 식별합니다.

이러한 ID 공급업체를 사용하는 경우 직원 ID 제휴에서 토큰의 발급기관 URL을 확인하여 신뢰할 수 있는 소스에서 왔는지와 클레임을 신뢰할 수 있는지 확인하는 것만으로는 부족합니다. 멀티 테넌트 IdP에 단일 발급기관 URL이 있으면 속성 조건을 사용하여 액세스가 올바른 테넌트로 제한되도록 하는 것이 좋습니다.

IAM 정책에서 직원 풀 사용자 표현

다음 표에서는 단일 사용자, 사용자 그룹, 특정 클레임을 전달하는 사용자, 직원 풀의 모든 사용자에게 역할을 부여하는 데 사용되는 주 구성원 식별자를 보여줍니다.

ID 식별자 형식
직원 ID 풀의 단일 ID principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/SUBJECT_ATTRIBUTE_VALUE
그룹의 모든 직원 ID principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/group/GROUP_ID
특정 속성값의 모든 직원 ID principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
직원 ID 풀의 모든 ID principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*

JSON 웹 키

직원 ID 풀 공급업체는 /.well-known/openid-configuration 문서의 jwks_uri 필드에서 IdP에서 제공하는 JSON 웹 키(JWK)에 액세스할 수 있습니다. OIDC 제공업체에서 이 정보를 제공하지 않거나 발급기관에 공개적으로 액세스할 수 없으면 OIDC 제공업체를 만들거나 업데이트할 때 JWK를 수동으로 업로드하면 됩니다.

조직 간 액세스 제한

직원 ID 풀 주 구성원은 자신이 속하는 조직 외부의 리소스에 직접 액세스할 수 없습니다. 하지만 조직 내에서 주 구성원에 서비스 계정 가장 권한이 부여된 경우 서비스 계정이 동일하게 제한되지 않으므로 이 제약조건을 우회할 수 있습니다.

직원 풀 사용자 프로젝트

대부분의 Google Cloud API는 API 요청이 액세스하는 리소스가 포함된 프로젝트에 청구 및 할당량 사용 요금을 부과합니다. 이러한 API를 리소스 기반 API라고 부릅니다. 일부 Google Cloud API는 클라이언트와 연결된 프로젝트에 비용을 청구합니다. 이를 클라이언트 기반 API라고 부릅니다. 청구 및 할당량 목적에 사용되는 프로젝트는 할당량 프로젝트라고 부릅니다.

직원 ID 제휴 구성 파일을 만들 때 직원 풀 사용자 프로젝트를 지정합니다. 이 프로젝트는 호출 대상 Google API에 대해 애플리케이션을 식별하기 위해 사용됩니다. 직원 풀 사용자 프로젝트는 또한 사용자가 gcloud CLI를 사용해서 API 요청을 시작하지 않는 한 클라이언트 기반 API의 기본 할당량 프로젝트로 사용됩니다. 지정한 프로젝트에 대해 서비스 사용량 소비자(roles/serviceusage.serviceUsageConsumer) 역할에 포함된 serviceusage.services.use 권한이 있어야 합니다.

할당량 프로젝트, 리소스 기반 API, 클라이언트 기반 API에 대한 자세한 내용은 할당량 프로젝트 개요를 참조하세요.

예시: 여러 직원 ID 풀

이 섹션에는 여러 풀의 일반적인 사용을 설명하는 예시가 포함되어 있습니다.

직원을 위한 풀 하나와 파트너를 위한 풀 하나를 만들 수 있습니다. 다국적 기업은 조직 내 여러 부서에 대해 별도의 풀을 만들 수 있습니다. 풀을 사용하면 여러 그룹이 풀의 ID에만 역할이 부여되는 특정 풀을 독립적으로 관리할 수 있는 분산 관리가 가능합니다.

예를 들어 Enterprise Example Organization이라는 회사가 다른 Partner Example Organization Inc라는 회사와 Google Kubernetes Engine(GKE) DevOps 서비스 제공 계약을 체결한다고 가정해보세요. Partner Example Organization 직원이 서비스를 제공하기 위해 이 회사 직원은 Google Kubernetes Engine(GKE) 및 Enterprise Example Organization 조직에 있는 기타 Google Cloud 리소스에 액세스할 수 있어야 합니다. Enterprise Example 조직에는 이미 enterprise-example-organization-employees라는 직원 ID 풀이 있습니다.

Partner Example Organization이 Enterprise Example Organization의 리소스에 대한 액세스를 관리하도록 허용하기 위해 Enterprise Example Organization은 Partner Example Organization 직원 사용자를 위해 Partner Example Organization이 관리할 수 있는 별도의 직원 풀을 만듭니다. Enterprise Example Organization은 Partner Example Organization 관리자에게 이 직원 풀을 제공합니다. Partner Example Organization의 관리자는 자신의 IdP를 사용해서 직원들에게 액세스를 부여합니다.

이를 위해 Enterprise Example Organization의 관리자는 다음 태스크를 수행합니다.

  1. Enterprise Example Organization의 IdP에서 Partner Example Organization 관리자에 대해 partner-organization-admin@example.com과 같은 ID를 만듭니다. 이것은 enterprise-example-organization-employees라는 풀에 이미 구성되어 있습니다.

  2. 이름이 example-organization-partner인 새 직원 풀을 만듭니다.

  3. example-organization-partner 풀에 대해 다음 허용 정책을 만듭니다.

    {
      "bindings": [
        {
          "role": "roles/iam.workforcePoolEditor",
          "members": [
            "principalSet://iam.googleapis.com/locations/global/workforcePools/enterprise-example-organization-employees/subject/partner-organization-admin@example.com"
          ]
        }
      ]
    }
    
  4. Enterprise Example Organization 조직에서 액세스해야 하는 리소스에서 example-organization-partner 풀에 대한 역할을 부여합니다.

Partner Example Organization 관리자는 이제 자신의 IdP를 사용하여 연결하도록 example-organization-partner 풀을 구성할 수 있습니다. 그런 후 Partner Example Organization 직원이 Partner Example Organization의 IdP 사용자 인증 정보를 사용하여 로그인하도록 허용할 수 있습니다. 로그인한 후에는 Partner Example Organization 직원 사용자가 Enterprise Example Organization에 정의된 정책에 따라 제한되는 Google Cloud 리소스에 액세스할 수 있습니다.

더 쉬운 액세스 관리

대기업에서 IT 전문가는 모범 사례 액세스 제어 모델의 일부로 보안 그룹을 만드는 경우가 많습니다. 보안 그룹은 내부 리소스에 대한 액세스를 제어합니다. 또한 회사는 직원을 위한 추가 그룹과 파트너를 위한 다른 그룹을 만들어서 이러한 액세스 제어 모델을 클라우드 리소스로 확장하는 경우가 많습니다. 이렇게 하면 깊이 중첩된 그룹이 확산되어 관리가 매우 어려워질 수 있습니다.

또한 사용자 디렉터리 계층을 적절한 정도로 평평하게 유지하기 위해 만들 수 있는 그룹 수를 제한하는 정책이 조직에 있을 수 있습니다. IAM 정책의 잘못된 구성을 방지하고 그룹 확장을 제한하기 위한 더 나은 솔루션은 여러 풀을 사용해서 여러 조직 단위 및 사업 단위와 파트너 조직으로부터 사용자를 보다 광범위하게 분리하는 것입니다. 그런 다음 이러한 풀 및 풀에 포함된 그룹을 참조해서 IAM 정책을 정의할 수 있습니다(IAM 구성 단계의 예시 참조).

VPC 서비스 제어 제한사항

직원 ID 제휴, 직원 풀 구성 API, 보안 토큰 서비스 API는 VPC 서비스 제어를 지원하지 않습니다. 하지만 직원 풀 사용자가 액세스할 수 있는 Google Cloud 제품은 VPC 서비스 제어를 지원합니다. 자세한 내용은 VPC 서비스 제어의 지원되는 제품 및 제한사항 페이지를 참조하세요.

직원 ID 제휴 및 필수 연락처

조직 또는 Google Cloud 제품의 변경사항에 대한 중요 정보를 수신하려면 직원 ID 제휴를 사용할 때 필수 연락처를 제공해야 합니다. Cloud ID 사용자는 Cloud ID 이메일 주소를 통해 연락할 수 있지만 직원 ID 제휴 사용자는 필수 연락처를 통해 연락됩니다.

Google Cloud 콘솔을 사용해서 직원 ID 풀을 만들거나 관리할 때는 법률보류 카테고리로 필수 연락처를 구성하도록 요청하는 배너가 표시됩니다. 또는 별도의 연락처가 없으면 모두 카테고리에서 연락처를 정의할 수 있습니다. 연락처를 제공하면 배너가 삭제됩니다.

다음 단계