워크로드 아이덴티티 제휴

이 문서는 외부 워크로드의 ID 제휴 개요를 제공합니다. ID 제휴를 사용하면 서비스 계정 키를 사용하지 않고도 온프레미스 또는 멀티 클라우드 워크로드에 Google Cloud 리소스에 대한 액세스 권한을 부여할 수 있습니다.

Amazon Web Services(AWS) 또는 OpenID Connect(OIDC)를 지원하는 ID 공급업체(예: Microsoft Azure)에서 ID 제휴를 사용할 수 있습니다.

ID 제휴를 사용해야 하는 이유

일반적으로 Google Cloud 외부에서 실행되는 애플리케이션이 Google Cloud 리소스에 액세스하려면 서비스 계정 키를 사용합니다. 서비스 계정 키는 강력한 사용자 인증 정보이며 제대로 관리하지 않을 경우 보안상 위험할 수 있습니다.

ID 제휴를 사용하면 ID 및 액세스 관리(IAM)를 통해 서비스 계정을 가장하는 기능이 포함된 IAM 역할을 외부 ID에 부여할 수 있습니다. 이렇게 하면 단기 액세스 토큰을 사용하여 리소스에 직접 액세스할 수 있고 서비스 계정 키와 관련된 유지보수 및 보안 부담이 사라집니다.

워크로드 아이덴티티 풀

워크로드 아이덴티티 풀은 외부 ID 컬렉션의 컨테이너입니다.

프로젝트에는 여러 워크로드 아이덴티티 풀이 포함될 수 있으며 각 풀은 다양한 리소스에 액세스할 수 있습니다. 이를 통해 동일한 풀에서 관련 ID를 그룹화한 후 리소스에 대한 세분화된 액세스 권한을 부여하여 최소 권한의 원칙을 따를 수 있습니다.

일반적으로 개발, 스테이징, 프로덕션 환경과 같은 Google Cloud 리소스에 액세스해야 하는 Google Cloud 이외의 환경마다 새로운 풀을 만드는 것이 좋습니다.

워크로드 아이덴티티 공급업체

워크로드 아이덴티티 공급업체는 Google Cloud와 외부 ID 공급업체 간의 관계를 설명하는 항목입니다. 공급업체의 예시는 다음과 같습니다.

  • AWS
  • Azure Active Directory
  • 온프레미스 Active Directory
  • Okta
  • Kubernetes 클러스터

워크로드 아이덴티티 제휴는 OAuth 2.0 토큰 교환 사양을 따릅니다. 외부 ID 공급업체의 사용자 인증 정보를 사용자 인증 정보에서 ID를 확인하는 대가로 제휴 토큰을 반환하는 보안 토큰 서비스에 제공합니다.

속성 매핑

일반적으로 사용자 인증 정보에는 이름, 이메일 또는 사용자 ID 등 사용자 인증 정보에 담긴 ID에 대한 정보를 제공하는 속성이 포함됩니다. 속성 매핑은 외부 토큰의 속성을 Google 토큰에 적용합니다. 이렇게 하면 IAM이 외부 제공업체의 토큰을 사용하여 Google Cloud 리소스에 대한 액세스를 승인할 수 있습니다.

AWS의 경우 Google에서는 가장 일반적인 시나리오에 적용되는 기본 매핑을 제공합니다. 사용자는 커스텀 매핑을 제공할 수도 있습니다.

OIDC 제공업체의 경우 사용자는 매핑을 제공합니다. 매핑을 구성하려면 제공업체의 사용자 인증 정보의 속성 목록에 대한 문서를 참조하세요.

속성 매핑은 Common Expression Language를 지원하여 외부 사용자 인증 정보를 기반으로 새 커스텀 속성을 작성하거나 기존 속성을 더 쉽게 읽을 수 있도록 합니다. 예를 들어 다음 매핑은 Amazon 리소스 이름(ARN)에 :instance-profile/Production이 포함되어 있는지 여부에 따라 environment 속성을 정의합니다.

attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"

속성 조건

속성 조건을 사용하면 워크로드 아이덴티티 풀을 통해 인증할 수 있는 ID를 제한할 수 있습니다. CEL 표현식을 사용하면 요청 사용자 인증 정보의 속성을 검사하고 액세스 허용 여부를 선택할 수 있습니다.

속성 조건은 다음과 같이 여러 시나리오에서 유용합니다.

  • 워크로드가 일반 대중이 이용할 수 있는 ID 공급업체를 사용하면 선택한 ID만 워크로드 아이덴티티 풀에 액세스하도록 액세스를 제한할 수 있습니다.

  • 여러 클라우드 플랫폼에서 ID 공급업체를 사용하는 경우 다른 플랫폼에서 사용하기 위한 사용자 인증 정보가 Google Cloud에서 사용되는 것을 방지할 수 있으며 그 반대의 경우도 마찬가지입니다. 이는 혼동된 대리인 문제를 피하는 데 도움이 됩니다.

다음 예시에서는 특정 AWS 역할이 있는 ID의 요청만 허용합니다.

attribute.aws_role == "role-mapping"

서비스 계정 가장

토큰 교환 흐름은 제휴 액세스 토큰을 반환합니다. 이 토큰을 사용하여 서비스 계정을 가장하고 단기 OAuth 2.0 액세스 토큰을 받을 수 있습니다. 단기 액세스 토큰을 사용하면 서비스 계정이 액세스할 수 있는 모든 Google Cloud API를 호출할 수 있습니다.

서비스 계정을 가장하려면 서비스 계정의 워크로드 아이덴티티 사용자 역할(roles/iam.workloadIdentityUser)을 워크로드에 필요한 역할과 함께 외부 ID에 부여합니다. 워크로드 아이덴티티 풀의 모든 ID에 역할을 부여하거나 속성에 따라 특정 외부 ID에 역할을 부여할 수 있습니다.

다음 표에서는 역할을 부여하는 일반적인 시나리오를 설명합니다.

시나리오 형식
단일 ID principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/subject-name
그룹의 모든 ID principalSet://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/group/group-name
속성 매핑을 사용하여 정의된 속성이 있는 모든 ID principalSet://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/attribute.attribute-name/attribute-value
풀의 모든 ID principalSet://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/*

다음 단계