액세스 권한 부여 및 취소

모든 주체(사용자 또는 그룹)는 관리 API 서버 및 Kubernetes 클러스터에 액세스하기 위해 다음 두 단계 프로세스를 따릅니다.

  • 관리 API 서버 액세스: ClusterRoleBinding 또는 RoleBinding을 사용하여 관리 API 서버의 권한이 있는 주체에 미리 정의된 ClusterRole를 부여합니다.

  • Kubernetes 클러스터 액세스: 네임스페이스별 액세스 또는 클러스터 전체 액세스 권한을 부여합니다.

    • 네임스페이스별 액세스: 클러스터 내에서 특정 프로젝트의 네임스페이스에 대한 액세스 권한을 부여하려면 ProjectRole 및 해당 ProjectRoleBinding을 만듭니다. 이 프로세스는 Kubernetes RoleRoleBinding을 클러스터의 Kubernetes Namespace에 전파합니다. 이는 ProjectRoleProjectRoleBinding이 연결된 Project에 해당합니다.

    • 클러스터 전체 액세스: 클러스터 내의 모든 네임스페이스에 대한 액세스 권한을 부여하려면 OrganizationRole 및 해당 OrganizationRoleBinding을 만듭니다. 이 프로세스는 Kubernetes ClusterRoleClusterRoleBinding를 전체 Kubernetes 클러스터에 전파합니다.

페르소나 (IO, PA, AO)는 역할이 아니라 특정 권한에 매핑되고 개별 사용자에게 할당된 사용자 역할의 모음입니다.

조직 IAM 관리자와 프로젝트 IAM 관리자 모두 추가 프로젝트별 권한을 부여하기 위해 프로젝트 역할과 프로젝트 역할 바인딩을 더 만들 수 있습니다. 하지만 조직 IAM 관리자는 모든 프로젝트에 대해 프로젝트 역할과 프로젝트 역할 바인딩을 만들 수 있습니다. 반면 프로젝트 IAM 관리자는 액세스 권한이 있는 프로젝트에 대해서만 프로젝트 역할과 프로젝트 역할 바인딩을 만들 수 있습니다.

역할 바인딩 설정

팀 구성원에게 조직 또는 프로젝트 수준에서 리소스에 대한 액세스 권한을 부여하는 역할 바인딩을 설정할 수 있습니다.

역할 바인딩을 설정하는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 조직 IAM 관리자 역할을 부여해 달라고 요청하세요.

승인된 회원에게 역할을 할당하려면 다음 단계를 따르세요.

콘솔

  1. GDC 콘솔에 로그인합니다.
  2. 프로젝트 선택을 클릭하여 조직 또는 프로젝트를 선택합니다.
    • 조직의 역할 바인딩을 설정하려면 조직을 선택합니다.
    • 프로젝트의 역할 바인딩을 설정하려면 프로젝트를 선택하세요.
  3. 탐색 메뉴에서 ID 및 액세스 > 액세스를 클릭합니다.
  4. 구성원 추가를 클릭합니다.
  5. ID 공급업체 목록에서 ID 공급업체를 선택합니다.
  6. 개별 사용자 또는 그룹을 추가할지 선택합니다.
  7. 사용자 이름 또는 그룹 별칭 필드에 사용자 이름, 이메일 주소 또는 별칭을 입력합니다.
  8. 역할 목록에서 사용자 또는 그룹에 할당할 역할을 선택합니다(예: 조직 수준의 조직 뷰어 또는 프로젝트 수준의 프로젝트 생성자).
  9. 추가를 클릭합니다.

회원이 승인된 회원 목록에 표시됩니다.

gdcloud

  1. gdcloud CLI가 설치되어 있는지 확인합니다.

  2. gdcloud auth login 명령어를 사용하여 ID 공급자로 인증합니다. 자세한 내용은 gdcloud CLI 인증을 참고하세요.

  3. 역할 바인딩을 설정합니다.

    • 조직의 역할 바인딩을 설정합니다.

      gdcloud organizations add-iam-policy-binding root \
        --member=USER_ACCOUNT \
        --role=ROLE_TYPE/ROLE
      

      다음 변수를 바꿉니다.

      • USER_ACCOUNT: 역할을 부여할 사용자 계정입니다. 이 플래그는 ID 공급자 접두사(user:idpprefix-user@example.com)가 있는 사용자 이메일 주소 또는 서비스 계정 프로젝트(serviceAccount:projectName:serviceAccountName)가 있는 서비스 계정 이름을 허용합니다.
      • ROLE_TYPE: 역할 바인딩을 설정할 ClusterRole, Role 또는 OrganizationRole입니다.
      • ROLE: 사용자에게 할당할 사전 정의된 역할 또는 맞춤 역할의 이름입니다 (예: project-creator).
    • 프로젝트의 역할 바인딩을 설정합니다.

      gdcloud projects add-iam-policy-binding PROJECT \
        --member=USER_ACCOUNT \
        --role=ROLE_TYPE/ROLE
      

      다음 변수를 바꿉니다.

      • PROJECT: 역할 바인딩을 설정할 프로젝트의 이름입니다.
      • USER_ACCOUNT: 역할을 부여할 사용자 계정입니다. 이 플래그는 ID 공급자 접두사(user:idpprefix-user@example.com)가 있는 사용자 이메일 주소 또는 서비스 계정 프로젝트(serviceAccount:projectName:serviceAccountName)가 있는 서비스 계정 이름을 허용합니다.
      • ROLE_TYPE: 역할 바인딩을 설정할 Role 또는 ProjectRole입니다.
      • ROLE: 사용자에게 할당할 사전 정의된 역할 또는 맞춤 역할의 이름입니다 (예: project-viewer).

API

  1. 사용하는 사용자 인증 정보를 내보냅니다.

    export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG
    
  2. 역할을 할당할 사용자 계정을 내보냅니다. 여기에는 ID 공급자 접두사 (예: idpprefix-paul@example.com)가 포함됩니다.

    export USERNAME=IDP_PREFIX-USER_EMAIL
    
  3. 사용자에게 필요한 역할의 이름(예: project-creator)을 내보냅니다. 역할에 관한 자세한 내용은 역할 정의를 참고하세요.

    export ROLE_NAME=ROLE_NAME
    
  4. ClusterRole, Role, ProjectRole 또는 OrganizationRole에 사용자를 할당합니다.

    • ClusterRole에 사용자 할당:

      kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      clusterrolebinding ${USERNAME}-${ROLE_NAME}-binding \
      --clusterrole=${ROLE_NAME} --user=${USERNAME}
      

      ClusterRoleClusterRoleBinding 대신 RoleBinding이 필요한 경우 역할 정의를 참고하여 역할에 필요한 바인딩 유형을 확인하고 네임스페이스 gpc-system에 RoleBinding을 만드세요.

      kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      rolebinding ${USERNAME}-${ROLE_NAME}-binding \
      --clusterrole=${ROLE_NAME} --user=${USERNAME} --namespace=gpc-system
      
    • Role에 사용자 할당:

      1. 바인딩을 만들어야 하는 네임스페이스를 내보냅니다.

        export BINDING_NAMESPACE=BINDING_NAMESPACE
        
      2. 다음 명령어를 실행하여 RoleBinding를 만듭니다.

        kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
        rolebinding ${USERNAME}-${ROLE_NAME}-binding \
        --role=${ROLE_NAME} --user=${USERNAME} --namespace=${BINDING_NAMESPACE}
        
    • ProjectRole에 사용자 할당:

      1. projectrolebinding.yaml 파일을 만듭니다.

        apiVersion: resourcemanager.gdc.goog/v1
        kind: ProjectRoleBinding
        metadata:
          name: BINDING_NAME
          namespace: PROJECT_NAME
        spec:
          roleRef:
            apiGroup: resourcemanager.gdc.goog
            kind: ProjectRole
            name: ROLE_NAME
          subjects:
          - apiGroup: rbac.authorization.k8s.io
            kind: USER_KIND
            name: USERNAME
        

        다음을 바꿉니다.

        • BINDING_NAME: 사용자가 맞춤설정할 수 있는 바인딩의 이름입니다 (예: user-project-creator-binding).
        • PROJECT_NAME: 역할을 부여할 프로젝트의 이름입니다.
        • ROLE_NAME: 사용자에게 할당할 ProjectRole의 이름입니다.
        • USER_KIND: 사용자 종류입니다. User, Group 또는 ServiceAccount일 수 있습니다.
        • USERNAME: 역할이 할당되는 사용자의 이메일 주소입니다(ID 공급자 접두사(예: idpprefix-paul@example.com) 포함). 이는 내보낸 USERNAME와 일치해야 합니다.
      2. projectrolebinding.yaml 파일을 적용합니다.

        kubectl create -f projectrolebinding.yaml
        
    • OrganizationRole에 사용자 할당:

      1. organizationrolebinding.yaml 파일을 만듭니다.

        apiVersion: resourcemanager.gdc.goog/v1
        kind: OrganizationRoleBinding
        metadata:
          name: BINDING_NAME
          namespace: gpc-system
        spec:
          roleRef:
            apiGroup: resourcemanager.gdc.goog
            kind: OrganizationRole
            name: ROLE_NAME
          subjects:
          - apiGroup: rbac.authorization.k8s.io
            kind: USER_KIND
            name: USERNAME
        

        다음을 바꿉니다.

        • BINDING_NAME: 사용자가 맞춤설정할 수 있는 바인딩의 이름입니다 (예: user-organization-creator-binding).
        • ROLE_NAME: 사용자에게 할당할 OrganizationRole의 이름입니다.
        • USER_KIND: 사용자 종류입니다. User, Group 또는 ServiceAccount일 수 있습니다.
        • USERNAME: 역할이 할당되는 사용자의 이메일 주소입니다(ID 공급자 접두사(예: idpprefix-paul@example.com) 포함). 이는 내보낸 USERNAME와 일치해야 합니다.
      2. organizationrolebinding.yaml YAML 파일을 적용합니다.

        kubectl create -f organizationrolebinding.yaml
        

역할 바인딩 삭제

더 이상 액세스 권한이 필요하지 않으면 구성원과 연결된 역할, 권한, 액세스 권한을 삭제합니다.

구성원을 삭제하려면 다음 단계를 따르세요.

콘솔

  1. GDC 콘솔에 로그인합니다.
  2. 탐색 메뉴에서 ID 및 액세스 > 액세스를 클릭합니다.
  3. 승인된 구성원 목록에서 구성원을 선택합니다.
  4. 구성원 삭제를 클릭합니다.
  5. 메시지가 표시되면 구성원 삭제를 클릭하여 확인합니다.

gdcloud

  1. gdcloud CLI가 설치되어 있는지 확인합니다.

  2. gdcloud auth login 명령어를 사용하여 ID 공급자로 인증합니다. 자세한 내용은 gdcloud CLI 인증을 참고하세요.

  3. 역할 바인딩을 삭제합니다.

    • 조직의 역할 바인딩을 삭제합니다.

      gdcloud organizations remove-iam-policy-binding root \
        --member=USER_ACCOUNT \
        --role=ROLE_TYPE/ROLE
      

      다음 변수를 바꿉니다.

      • USER_ACCOUNT: 역할을 삭제할 사용자 계정입니다. 이 플래그는 ID 공급자 접두사(user:idpprefix-user@example.com)가 있는 사용자 이메일 주소 또는 서비스 계정 프로젝트(serviceAccount:projectName:serviceAccountName)가 있는 서비스 계정 이름을 허용합니다.
      • ROLE_TYPE: 역할 바인딩을 삭제할 ClusterRole, Role 또는 OrganizationRole입니다.
      • ROLE: 사용자 계정에서 삭제할 사전 정의된 역할 또는 맞춤 역할의 이름입니다 (예: project-creator).
    • 프로젝트의 역할 바인딩을 삭제합니다.

      gdcloud projects remove-iam-policy-binding PROJECT \
        --member=USER_ACCOUNT \
        --role=ROLE_TYPE/ROLE
      

      다음 변수를 바꿉니다.

      • PROJECT: 역할 바인딩을 삭제할 프로젝트의 이름입니다.
      • USER_ACCOUNT: 역할을 삭제할 사용자 계정입니다. 이 플래그는 ID 공급자 접두사(user:idpprefix-user@example.com)가 있는 사용자 이메일 주소 또는 서비스 계정 프로젝트(serviceAccount:projectName:serviceAccountName)가 있는 서비스 계정 이름을 허용합니다.
      • ROLE_TYPE: 역할 바인딩을 삭제할 Role 또는 ProjectRole입니다.
      • ROLE: 사용자 계정에서 삭제할 사전 정의된 역할 또는 맞춤 역할의 이름입니다 (예: project-viewer).

API

  1. 사용하는 사용자 인증 정보를 내보냅니다.

    export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG
    
  2. 역할을 삭제할 사용자 계정을 내보냅니다. ID 공급업체 접두사 (예: idpprefix-paul@example.com)를 포함합니다.

    export USERNAME=IDP_PREFIX-USER_EMAIL
    
  3. 바인딩이 삭제되는 네임스페이스를 내보냅니다.

    export BINDING_NAMESPACE=BINDING_NAMESPACE
    
  4. ClusterRoleBinding, RoleBinding, ProjectRoleBinding 또는 OrganizationRoleBinding를 삭제하여 사용자 계정에 부여된 권한을 취소합니다.

    • 사용자 계정에서 ClusterRoleBinding 삭제:

      kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      delete clusterrolebinding ${USERNAME}-pa
      
    • 사용자 계정에서 RoleBinding 삭제:

      kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      delete rolebinding ${USERNAME}-pa \
      --namespace=${BINDING_NAMESPACE}
      
    • 사용자 계정에서 ProjectRoleBinding 삭제:

      kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      delete projectrolebinding ${USERNAME}-pa \
      --namespace=${BINDING_NAMESPACE}
      
    • 사용자 계정에서 OrganizationRoleBinding 삭제:

      kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      delete organizationrolebinding ${USERNAME}-pa \
      --namespace=gpc-system
      

사용자 액세스 권한 취소

조직 또는 팀을 탈퇴한 멤버의 Google Distributed Cloud (GDC) 에어갭 어플라이언스 액세스 권한을 취소할 수 있습니다. 사용자의 액세스 권한을 취소하면 GDC 에어갭 어플라이언스에서 로그아웃되고 역할과 권한이 삭제됩니다. 시작 시간과 종료 시간을 기준으로 사용자의 활동과 세션을 나열할 수도 있습니다.

사용자의 액세스 권한을 취소하려면 다음 단계를 따르세요.

  1. 사용자를 취소하는 데 필요한 권한을 가져옵니다. 조직 IAM 관리자에게 조직 세션 관리자(org-session-admin) 역할을 부여해 달라고 요청하세요.

  2. 사용자의 액세스 권한을 취소합니다.

    gdcloud admin auth revoke --accounts USER_EMAIL
    

    USER_EMAIL를 액세스 권한을 취소할 사용자의 이메일로 바꿉니다.

    명령어를 실행하면 다음과 비슷한 출력이 표시됩니다. 이 예에서는 사용자 ariel@example.com의 액세스 권한을 취소합니다.

    Success: NUMBER of sessions revoked for user ariel@example.com
    

    이 예에서 변수 NUMBER은 사용자가 보유한 활성 세션 수를 나타냅니다.

  3. gdcloud admin auth revoke 명령어를 다시 실행하여 사용자의 액세스 권한이 취소되었는지 확인합니다. 성공하면 다음이 표시됩니다.

    No sessions found for account: ariel@example.com
    

취소된 사용자 모두 나열

취소된 모든 사용자와 해당 사용자의 활동 및 세션을 보려면 다음 단계를 따르세요.

  • 시작 시간과 종료 시간으로 취소된 모든 사용자를 나열합니다.

    gdcloud admin auth list --format="csv(ACCOUNT, IDENTITY_PROVIDER, CREATION_TIME, EXPIRATION_TIME)"
    

    성공하면 다음과 비슷한 출력이 표시됩니다.

    account,identity_provider,creation_time,expiration_time
    ariel@example.com,example-idp,2023-02-15 22:10:52,2023-02-15 23:10:52