2017-05-10 16 views
2

gcloud 명령 줄 도구를 통해 GKE에서 사용할 서비스 계정 만들기를 자동화하려고합니다. Google Cloud Console에서 사용하는 프로세스를 반영하는 것으로 보이는 흐름을 파악했지만 사용자는 적절한 액세스 권한을 얻지 못합니다.Kubernetes API 액세스를 위해 gccoud 명령 줄을 통해 serviceAccount를 부여하려면 어떻게해야합니까?

여기 순서대로 실행하고있어 명령입니다 :이 실행되면

# Environment: 
# - uname=<username> 
# - email=<user's email address> 
# - GCLOUD_PROJECT_ID=<project identifier> 
# - serviceAccount="${uname}@${GCLOUD_PROJECT_ID}.iam.gserviceaccount.com" 
$ gcloud iam service-accounts \ 
    create "${uname}" --display-name "email:${email}" --format json 
$ gcloud projects \ 
    add-iam-policy-binding "${GCLOUD_PROJECT_ID}" \ 
     --member "serviceAccount:${serviceAccount}" \ 
     --role=roles/container.developer --format=json 
$ gcloud iam service-accounts keys \ 
    create "${GCLOUD_PROJECT_ID}-${uname}.json" \ 
     --iam-account="${serviceAccount}" 

, 그것은 새로운 서비스 계정을 만들고 로컬 키 파일을 생성합니다. 그런 다음이 키를 사용하여 Kubernetes 클러스터에 대한 자격 증명을 얻으려고합니다.

$ gcloud config configurations create devcluster --activate 
$ gcloud config set project devnet-166017 
$ gcloud config set compute/zone us-central1-b 
$ gcloud auth activate-service-account \ 
    --key-file="${GCLOUD_PROJECT_ID}-${uname}.json" 
$ gcloud container clusters get-credentials devcluster 
ERROR: (gcloud.container.clusters.get-credentials) ResponseError: \ 
    code=403, message=Required "container.clusters.get" permission for \ 
    "projects/${GCLOUD_PROJECT_ID}/zones/us-central1-b/clusters/devcluster". 

은 어떤 이유로 내 서비스 계정은 자격 증명을 취득하는 데 필요한 권한 중 하나 없지만, 내가 읽은 내용에 기초하고 제가 콘솔에서 관찰 한, 내가 믿는 것처럼 보인다 이 사용 권한은 roles/container.developer 역할의 일부 여야합니다.

감사합니다.

+0

이 문제를 해결하는 방법은 무엇입니까? 나는 행운이 아닌 [this] (https://stackoverflow.com/questions/42556739/service-account-throws-an-insufficient-permission-error-even-it-has-owner-priv)을 시도했다 – mllm

+0

일종의 : I 내 자격이 높은 사용자 (Google 클라우드의 프로젝트 '소유자')와 함께 시작하면 위 단계를 통해 필요한 것을 수행 할 수있는 액세스 권한이있는 서비스 계정을 만들 수 있음을 알았습니다. 그러나 더 세분화 된 인 타이틀먼트 집합을 가진 다른 서비스 계정을 사용하면 실패 할 것입니다. 일부 파생 된 권한이있는 것 같지만 그 권한이 정확히 무엇인지 밝히지 않았습니다. – benschumacher

+0

실제로 나는 실패한'gcloud 컨테이너 클러스터 get-credentials devcluster' 라인을 제거하는 것으로 끝났습니다. ** 현재 ** 작동 이유는 모르겠지만 그게 내 해결책입니다. – mllm

답변

0

서비스 계정으로 가정 할 때 Google Cloud 서비스 계정을 의미합니다. 다음은 GKE와 관련된 IAM 역할입니다. https://cloud.google.com/container-engine/docs/iam-integration (container. 검색).

먼저 서비스 계정 생성 :

gcloud iam service-accounts create --display-name "GKE cluster access" gke-test 

그런 다음 생성을 핵심 :

gcloud iam service-accounts keys create key.json [email protected][PROJECT_ID].iam.gserviceaccount.com 

지금이 서비스 계정에 어떤 역할을 할당해야합니다, 당신의 옵션은 다음과 같습니다

  • roles/container.admin 컨테이너 클러스터 및 해당 Kubernetes API 개체의 전체 관리.
  • roles/container.clusterAdmin 컨테이너 클러스터 관리.
  • roles/container.developer 컨테이너 클러스터 내의 Kubernetes API 개체에 대한 모든 액세스 권한.
  • roles/container.viewer 컨테이너 엔진 리소스에 대한 읽기 전용 액세스.

자세한 내용은 https://cloud.google.com/container-engine/docs/iam-integration 페이지를 다시보십시오.

현재 사용중인 계정에서 gcloud에
gcloud projects add-iam-policy-binding [PROJECT_ID] --role=roles/container.viewer --member=serviceAccount:[email protected][PROJECT_ID].iam.gserviceaccount.com 

로그 아웃 :

gcloud auth revoke 

나는 roles/container.viewer (읽기 전용 역할이-자격 증명을 얻을에 할당 할 수있는 최소)이 서비스 계정에 할당 서비스 계정 키로 gcloud에 로그인하십시오 :

gcloud auth activate-service-account --key-file=key.json 

시도 get-credentials :

$ gcloud container clusters get-credentials test --zone us-west1-a 
Fetching cluster endpoint and auth data. 
kubeconfig entry generated for test. 

작동합니다. 나는 roles/container.developer으로 시험해 보았습니다.이 또한 작동합니다.

container.clusters.getCredentials에 대한 액세스 권한이있는 문서가 설명서에 명확하지 않다는 것을 분명히 했음에도 불구하고 다른 사용 권한을 시도해 볼 수 있고 작동하지 않는 것을 볼 수 있습니다.

+0

감사합니다. Ahmet. 나는 시간을내어 주위를 빙빙 돌리고 다시 시도하려고 노력할 것이다. 위에서 언급 한 내용을 잘 모르겠다면 : 좀 더 제한된 계정 대'roles/owner' 계정 (또는 serviceAccount)을 사용할 때이 기능이 작동합니다. 이유는 모르겠지만,이 프로세스를 실행 한 serviceAccount에 자동화 된 파이프 라인을 추가해야만 생성 된 serviceAccounts가 예상대로 작동 할 수있는 권한이 높아졌습니다. – benschumacher

+1

@ ahmet-alp-balkan 다른 프로젝트에 속한 서비스 계정을 사용하여 'gcloud 컨테이너 클러스터 자격 증명'을 수행하려면 어떤 추가 범위가 필요합니까? – fabrizioM