2017-09-12 21 views
0

私はAPIを使用してGCPでサービスアカウントを作成しようとしています。私は、次のPOSTリクエストを送信するサービスアカウントを作成するには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を返し、サービスアカウントを作成します。

その後、これは私が特定の作成に使用するコードです役割:

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/viewerの一つ、roles/editorまたはroles/ownerに設定されている場合。 しかし、私が使用したい場合、特にroles/cloudsql.viewerこのオプションはサポートされていません。

ここに役割があります。 https://cloud.google.com/iam/docs/understanding-roles

私は、このサービスアカウントに私のプロジェクトにフル視聴者権限を与えたくないのですが、それは最低限の特権の原則に反しています。

APIから特定の役割を設定するにはどうすればよいですか?

編集:ここ

は、リソース・マネージャAPIを使用して応答です:役割のコードで

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

としてroles/cloudsql.adminと、あなたがされていない最初のbase_urlに追加されているように見える提供プロジェクトの役割を変更するための正しいコンテキスト。

これはに追加のパスを配置しようとします:あなたはbase_urlから/serviceAccountsを削除し、それが動作する必要がある場合​​

:役割を追加するためのPOSTパスをする必要がありますhttps://iam.googleapis.com/v1/projects/{project}/serviceAccount

より多くの情報を追加するために編集した応答 によるあなたの編集

OKに、私は申し訳ありませんが、ここでの問題を参照してくださいが、私はこれをテストするために、新しいプロジェクトを設定する必要がありました。

cloudresourcemanager.projects.setIamPolicyは、ポリシー全体を置き換える必要があります。変更内容に制約を加えることはできますが、プロジェクトのjsonで完全なポリシーを提出する必要があるようです。

gcloudには--log-httpというオプションがあり、これらの問題のいくつかを掘り下げるのに役立ちます。実行している場合

これは既存の既存のポリシーを取得し、新しい役割を追加して追加する方法を示します。

example code provided hereを使用して、gcloudやコンソールを使用してプロジェクトに影響を与える可能性があるため、コンソールに役割を追加したくない場合は、これらの変更を行うことをおすすめします。

このようなニーズのためにAPIを改善したいと考えています。

+0

最新の質問をご覧ください。サービスアカウントの役割を作成するためのフォーマットが間違っているようです。私はより良い文書を見つけることはできませんが。 –

+0

コメントにスペースがないため、私の投稿にもっと多くの情報を追加しました。 – gdahlm

+0

'--log-httpオプション 'をありがとう。本当に役に立ちました。 –

関連する問題