2017-09-12 1 views
0

나는 API를 사용하여 GCP에서 서비스 계정을 만들려고했습니다.api를 통해 서비스 계정에 대해 cloudsql 역할을 만들 수 없습니다

base_url = f"https://iam.googleapis.com/v1/projects/{project}/serviceAccounts" 
auth = f"?access_token={access_token}" 
data = {"accountId": name} 
# Create a service Account 
r = requests.post(base_url + auth, json=data) 

이 200를 반환하고 서비스 계정 생성 :

나는 다음 포스트 요청을 보내 서비스 계정을 만들려면 다음

을, 이것은 내가 특정을 만드는 데 사용하는 코드는 역할 : 역할 roles/viewer, roles/editor 또는 roles/owner이 방법은 작업을 수행 중 하나로 설정됩니다

sa = f"{name}@dotmudus-service.iam.gserviceaccount.com" 
sa_url = base_url + f'/{sa}:setIamPolicy' + auth 
data = {"policy": 
    {"bindings": [ 
     { 
      "role": roles, 
      "members": 
       [ 
        f"serviceAccount:{sa}" 
       ] 
     } 
    ]} 
} 

합니다. 그러나 사용하고 싶다면 특별히 roles/cloudsql.viewer api는이 옵션이 지원되지 않는다고 전합니다.

다음은 역할입니다.

저는이 서비스 계정에 내 프로젝트에 대한 전체 권한을 부여하고 싶지 않습니다. 최소한의 권한 원칙에 위배됩니다.

어떻게하면 API에서 특정 역할을 설정할 수 있습니까?

편집 : 당신이하지 않은 최초의 base_url에 추가되어 나타납니다 roles/cloudsql.admin와 코드와

POST https://cloudresourcemanager.googleapis.com/v1/projects/{project}:setIamPolicy?key={YOUR_API_KEY} 

{ 
"policy": { 
    "bindings": [ 
    { 
    "members": [ 
    "serviceAccount:[email protected]{project}.iam.gserviceaccount.com" 
    ], 
    "role": "roles/cloudsql.viewer" 
    } 
    ] 
} 
} 


{ 
    "error": { 
    "code": 400, 
    "message": "Request contains an invalid argument.", 
    "status": "INVALID_ARGUMENT", 
    "details": [ 
     { 
     "@type": "type.googleapis.com/google.cloudresourcemanager.projects.v1beta1.ProjectIamPolicyError", 
     "type": "SOLO_REQUIRE_TOS_ACCEPTOR", 
     "role": "roles/owner" 
     } 
    ] 
    } 
} 

답변

1

이 제공하는 역할로 여기

는 자원 관리자 API를 사용하여 응답이다 올바른 컨텍스트가 프로젝트 역할을 수정합니다. https://cloudresourcemanager.googleapis.com/v1/projects/{project]:setIamPolicy

당신이 base_url에서 /serviceAccounts를 제거하면 그것은 작동합니다 : https://iam.googleapis.com/v1/projects/{project}/serviceAccount

추가 역할에 대한 POST 경로는 필요 :

이에 첨부 된 경로를 배치하려고합니다.

정보를 추가하는 편집 응답 인해 편집

확인에, 미안, 여기에 문제를 볼 수 있지만 나는 이것을 테스트하기 위해 새로운 프로젝트를 설정했다.

cloudresourcemanager.projects.setIamPolicy은 전체 정책을 대체해야합니다. 변경 한 내용에 제약 조건을 추가 할 수 있지만 프로젝트의 경우 json에서 완전한 정책을 제출해야합니다.

gcloud에는 --log-http 옵션이 있으며 이러한 문제를 해결하는 데 도움이됩니다. 실행하는 경우

gcloud projects add-iam-policy-binding $PROJECT --member serviceAccount:$NAME --role roles/cloudsql.viewer --log-http 

이렇게 기존의 기존 정책을 가져오고 새 역할을 추가하고 추가하는 방법을 보여줍니다.

gcloud 또는 콘솔을 사용하여 사용자에게 역할을 추가하여 전체 프로젝트에 영향을 줄 수 있으므로이 변경 사항을 적용하려면이 변경을 사용하는 것이 좋습니다.

바라건대 그들은이 필요성에 대한 API를 개선합니다.

+0

내 업데이트 된 질문을 참조하십시오. 서비스 계정에 대한 역할을 만드는 데 잘못된 형식이있는 것 같습니다. 나는 더 나은 문서를 찾을 수는 없지만. –

+0

의견에 공백이 있기 때문에 더 많은 정보를 내 게시물에 추가했습니다. – gdahlm

+0

'--log-http 옵션 '에 감사드립니다. 정말 도움이되었습니다. –

관련 문제