繁体   English   中英

设置IAM策略可在本地计算机上运行,​​但不适用于GCE实例

[英]Set IAM Policy works on local machine but not in GCE instance

我的Python应用程序中的以下几行在本地计算机上执行没有问题。

import googleapiclient.discovery
project_id = 'some-project-id'
resource_manager = googleapiclient.discovery.build('cloudresourcemanager', 'v1')
iam_policy_request = resource_manager.projects().getIamPolicy(resource=project_id, body={})
iam_policy_response = iam_policy_request.execute(num_retries=3)
new_policy = dict()
new_policy['policy'] = iam_policy_response
del new_policy['policy']['version']
iam_policy_update_request = resourcemanager.projects().setIamPolicy(resource=project_id, body=new_policy)
update_result = iam_policy_update_request.execute(num_retries=3)

当我在GCE实例中运行应用程序时,更确切地说,从GCE实例内部的Docker容器中运行应用程序时,出现异常:

URL being requested: POST https://cloudresourcemanager.googleapis.com/v1/projects/some-project-id:setIamPolicy?alt=json
Traceback (most recent call last):
  File "/env/lib/python3.5/site-packages/google/api_core/grpc_helpers.py", line 54, in error_remapped_callable
    return callable_(*args, **kwargs)
  File "/env/lib/python3.5/site-packages/grpc/_channel.py", line 487, in __call__
    return _end_unary_response_blocking(state, call, False, deadline)
  File "/env/lib/python3.5/site-packages/grpc/_channel.py", line 437, in _end_unary_response_blocking
    raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.PERMISSION_DENIED, User not authorized to perform this action.)>

即授权错误。 奇怪的是,当我在GCE实例中打开Python终端会话并逐行运行Python代码时,我没有得到异常。 仅当代码作为应用程序的一部分运行时,它才会引发异常。

我在GCE实例中使用的是服务帐户,而不是在本地计算机上的常规帐户。 但是我不认为这是问题所在,因为我能够在实例内部一个接一个地运行代码行,同时仍然依赖于服务帐户角色。

我希望能够在GCE内的Docker容器内无例外地运行该应用程序。 我觉得我正在丢失某些东西,但无法弄清楚丢失的部分是什么。

查看您的问题,似乎是身份验证问题,因为您的应用程序未正确验证:

1-首先运行此命令,它将让您的应用程序临时使用您自己的用户凭据:gcloud beta auth application-default login

输出应该是这样的:

凭证已保存到文件:$ SOME_PATH / application_default_credentials.json

2-然后您将GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为密钥文件的路径:

导出GOOGLE_APPLICATION_CREDENTIALS = $ SOME_PATH / application_default_credentials.json

之后尝试运行您的应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM