IAM으로 액세스 제어


이 주제에서는 Identity and Access Management를 사용하여 Config Connector가 Google Cloud 리소스를 만들고 관리하는 방법을 제어하는 방법에 대해 설명합니다.

구성 커넥터를 설치하려면 IAM 서비스 계정을 만든 후 GKE용 워크로드 아이덴티티를 사용하여 IAM 서비스 계정을 Kubernetes 서비스 계정과 바인딩하여 인증합니다. IAM을 사용하면 구성 커넥터가 특정 리소스에 조치를 취할 수 있습니다. 서비스 계정에 할당된 권한을 제한하면 구성 커넥터가 만들 수 있는 리소스 종류를 더 세부적으로 제어할 수 있습니다.

단일 서비스 계정 또는 여러 서비스 계정으로 리소스를 관리할 수 있습니다.

단일 서비스 계정

GKE 부가기능 또는 수동 설치로 구성 커넥터를 설치할 때 ConfigConnector CustomResource에 클러스터 모드를 설정할 수 있습니다. 클러스터 모드에서는 구성 커넥터를 사용하여 여러 프로젝트를 관리하는 경우에도 단일 IAM 서비스 계정을 사용하여 리소스를 만들고 관리할 수 있습니다.

다음 다이어그램은 동일한 서비스 계정이 두 프로젝트를 관리하는 이 모드의 작동 방식을 보여줍니다.

동일한 서비스 계정을 사용하여 여러 프로젝트를 관리하는 Config Connector를 보여주는 다이어그램

여러 서비스 계정

ConfigConnector CustomResource에서 네임스페이스 모드를 설정하여 여러 서비스 계정을 사용할 수 있습니다. 네임스페이스 모드를 사용하면 네임스페이스마다 서로 다른 서비스 계정을 연결할 수 있으므로 여러 IAM 서비스 계정의 각 문제에 따라 권한을 나누고 서로 다른 Kubernetes 네임스페이스 간에 권한을 격리할 수 있습니다.

다음과 같은 경우 네임스페이스 모드를 선택하세요.

  • Kubernetes 네임스페이스 수준에서 IAM 권한을 격리하려고 합니다.
  • 단일 클러스터에 있는 여러 Google Cloud 프로젝트에서 대량의 Google Cloud 리소스를 관리해야 합니다.

예를 들어 프로젝트마다 IAM 서비스 계정을 하나씩 만들고 동일한 Kubernetes 네임스페이스에 있는 각 프로젝트의 리소스를 구성한 후 해당 IAM 서비스 계정을 Kubernetes 네임스페이스에 바인딩합니다. 이렇게 하면 각 프로젝트의 IAM 권한을 분리하여 각 프로젝트에 서로 관련이 없는 고유한 권한 집합을 갖도록 할 수 있습니다.

다음 다이어그램은 네임스페이스 모드 작동 방식을 간략하게 설명합니다. 여기서 각 프로젝트는 다른 서비스 계정으로 관리됩니다.

두 개의 서로 다른 서비스 계정을 사용하여 여러 프로젝트를 관리하는 Config Connector를 보여주는 다이어그램

네임스페이스 모드에서 각 IAM 서비스 계정은 기본적으로 네임스페이스에 결합됩니다. 해당 네임스페이스 내에 리소스를 만들면 구성 커넥터는 이 서비스 계정을 사용하여 Google Cloud 리소스를 만듭니다. 네임스페이스와 연결된 IAM 서비스 계정을 가장하는 각 네임스페이스에 대한 전용 구성 커넥터 cnrm-controller-manager 포드가 있습니다.

네임스페이스 모드 구성 방법은 네임스페이스 모드를 사용하여 구성 커넥터 설치를 참조하세요.

설치 후 권한 조정

Config Connector를 설치하는 동안 임시 기본 역할을 선택하고 Config Connector를 구성한 서비스 계정에 역할을 할당했을 수 있습니다. 네임스페이스 모드로 구성 커넥터를 구성한 경우 IAM 서비스 계정이 두 개 이상 있을 수 있습니다.

설치를 완료한 후 보안 고려사항 및 권장사항에 맞게 광범위한 권한을 삭제하거나 업데이트해야 할지도 모릅니다.

구성 커넥터의 한 가지 핵심 이점은 통합 도구라는 점입니다. 즉, 구성 커넥터 자체를 사용하여 IAM 역할 및 권한을 미세 조정할 수 있습니다. Config Connector의 IAMPolicyMember 또는 IAMPartialPolicy 리소스를 사용하여 IAM 권한을 구성할 수 있습니다. 이를 위해서는 프로젝트, 폴더 또는 조직에서 관리자 권한이 있는 IAM 서비스 계정이 필요합니다. 이 서비스 계정은 클러스터 모드 또는 네임스페이스 모드를 통해 구성 커넥터 설치에 바인딩되도록 구성되어야 합니다.

다음 섹션에는 구성 커넥터를 사용하여 IAM 권한을 관리하는 여러 정책 예시가 나와 있습니다.

조직 소유자 권한

특정 조직의 모든 프로젝트와 폴더를 관리할 수 있도록 Config Connector의 권한을 확장하려면 다음 단계를 완료합니다.

  1. 다음 YAML 매니페스트를 만듭니다.

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
     name: iampolicymember-orglevel-permission
     namespace: NAMESPACE
    spec:
     member: serviceAccount:SERVICE_ACCOUNT_NAME@HOST_PROJECT_ID.iam.gserviceaccount.com
     role: roles/owner
     resourceRef:
       kind: Organization
       external: ORGANIZATION_ID
    

    다음을 바꿉니다.

    • NAMESPACE: 네임스페이스 이름
    • SERVICE_ACCOUNT_NAME: 서비스 계정 이름
    • HOST_PROJECT_ID: 서비스 계정의 호스트 프로젝트 ID
    • roles/owner: 적절한 역할
    • ORGANIZATION_ID: 조직 ID
  2. kubectl 또는 원하는 구성 관리 도구를 사용하여 YAML 매니페스트를 클러스터에 적용하세요.

폴더 소유자 권한

특정 폴더에서 모든 프로젝트 및 폴더를 관리할 수 있도록 Config Connector의 권한을 확장하려면 다음 단계를 완료하세요.

  1. 다음 YAML 매니페스트를 만듭니다.

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
     name: iampolicymember-orglevel-permission
     namespace: NAMESPACE
    spec:
     member: serviceAccount:SERVICE_ACCOUNT_NAME@HOST_PROJECT_ID.iam.gserviceaccount.com
     role: roles/owner
     resourceRef:
       kind: Folder
       external: folders/FOLDER_ID
    

    다음을 바꿉니다.

    • NAMESPACE: 네임스페이스 이름
    • SERVICE_ACCOUNT_NAME: 서비스 계정 이름
    • HOST_PROJECT_ID: 서비스 계정의 호스트 프로젝트 ID
    • roles/owner: 적절한 역할
    • FOLDER_ID: 폴더 ID
  2. kubectl 또는 원하는 구성 관리 도구를 사용하여 YAML 매니페스트를 클러스터에 적용하세요.

프로젝트 소유자 권한

구성 커넥터가 특정 프로젝트의 리소스를 관리할 수 있게 하려면 다음 단계를 완료하세요.

  1. 다음 YAML 매니페스트를 만듭니다.

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
     name: iampolicymember-orglevel-permission
     namespace: NAMESPACE
    spec:
     member: serviceAccount:SERVICE_ACCOUNT_NAME@HOST_PROJECT_ID.iam.gserviceaccount.com
     role: roles/owner
     resourceRef:
       kind: Project
       external: projects/PROJECT_ID
    

    다음을 바꿉니다.

    • NAMESPACE: 네임스페이스 이름
    • SERVICE_ACCOUNT_NAME: 서비스 계정 이름
    • HOST_PROJECT_ID: 서비스 계정의 호스트 프로젝트 ID
    • roles/owner: 적절한 역할
    • PROJECT_ID: 대상 프로젝트 ID
  2. kubectl 또는 원하는 구성 관리 도구를 사용하여 YAML 매니페스트를 클러스터에 적용하세요.

사전 정의된 역할

Config Connector에 더 제한적인 권한을 부여하려면 IAMPolicyMember 리소스 또는 결합된 IAMPartialPolicy 리소스를 몇 개 만들어 Config Connector 설치에 하나 이상의 IAM 역할을 할당할 수 있습니다. 다음 역할은 일반적으로 Config Connector 서비스 계정에 할당됩니다.

  • 편집자: 편집자 역할을 부여하면 IAM 수정과 같은 프로젝트 또는 조직 전체 구성을 제외한 대부분의 구성 커넥터 기능이 허용됩니다.

  • IAM 서비스 계정 관리자 역할: roles/iam.serviceAccountAdmin 권한을 부여하면 구성 커넥터에서 IAM 서비스 계정을 구성할 수 있습니다.

  • Resource Manager: roles/resourcemanager.folderCreator와 같은 Resource Manager 역할을 부여하면 Config Connector가 폴더와 조직을 관리할 수 있습니다.

커스텀 역할

사전 정의된 역할이 요구에 부합되지 않으면 자신이 정의하는 권한이 포함된 커스텀 역할을 만들 수 있습니다.

커스텀 역할을 만들고 할당하는 방법은 커스텀 역할 만들기 및 관리를 참조하세요.

다음 단계