小编Joh*_*ley的帖子

在 Google Cloud 项目上启用结算

我想从经纬度坐标中检索地址。我在谷歌控制台中创建了项目。添加计费信息并启用地理编码 api 服务。但是当我提出这个请求时,我仍然收到以下错误

https://maps.googleapis.com/maps/api/geocode/json?latlng=41.89,12.49&key=xxxx

您必须在https://console.cloud.google.com/project/_/billing/enable上对 Google Cloud 项目启用计费

google-maps geocoding google-cloud-platform google-cloud-billing

25
推荐指数
4
解决办法
8万
查看次数

GCP - 将服务帐户模拟为用户

我想允许用户模拟服务帐户来对长时间运行的进程执行操作。但是,所有代码示例都说明了一个服务帐户模拟另一个服务帐户。

用户可以直接冒充服务帐号吗?如果是这样,怎么办?

我正在遵循这个示例代码

初始化一个无权访问列表桶的源凭证:

from google.oauth2 import service_acccount

target_scopes = [
    'https://www.googleapis.com/auth/devstorage.read_only']

source_credentials = (
    service_account.Credentials.from_service_account_file(
        '/path/to/svc_account.json',
        scopes=target_scopes))
Run Code Online (Sandbox Code Playgroud)

现在使用源凭据来获取凭据以模拟另一个服务帐户:

from google.auth import impersonated_credentials

target_credentials = impersonated_credentials.Credentials(
  source_credentials=source_credentials,
  target_principal='impersonated-account@_project_.iam.gserviceaccount.com',
  target_scopes = target_scopes,
  lifetime=500)
Run Code Online (Sandbox Code Playgroud)

impersonation service-accounts google-cloud-platform google-iam google-cloud-iam

12
推荐指数
2
解决办法
2万
查看次数

如何在服务帐户上启用“iam.serviceAccounts.actAs”权限?

我正在尝试按照本指南使用非默认服务帐户部署服务,它说我需要“iam.serviceAccounts.actAs正在部署的服务帐户的权限”。我使用的服务帐户是@cloudbuild.gserviceaccount.com,但我在项目的“权限”页面上看不到添加它的选项。

service-accounts google-cloud-platform google-iam google-cloud-iam

10
推荐指数
1
解决办法
7164
查看次数

如何解决“googleapi:错误403:调用者没有权限,禁止”

我正在使用 terraform 在 GCP 中构建基础设施。我正在尝试将角色分配给service account使用 terraform 的人,但无法这样做。下面是我的代码:

sa.tf:

resource "google_service_account" "mojo-terra" {
  account_id   = "mojo-terra"
  description  = "Service account used for terraform script"
}

resource "google_project_iam_member" "mojo-roles" {
  count = length(var.rolesList)
  role =  var.rolesList[count.index]
  member = "serviceAccount:${google_service_account.mojo-terra.email}"
}
Run Code Online (Sandbox Code Playgroud)

dev.tfvars:

rolesList = [
    "roles/iam.serviceAccountUser"
]
Run Code Online (Sandbox Code Playgroud)

云构建日志:

Step #2: Error: Error when reading or editing Resource "project \"poc-dev\"" with IAM Policy: Error retrieving IAM policy for project "poc-dev": googleapi: Error 403: The caller does not have permission, forbidden
Step …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform terraform google-cloud-iam terraform-provider-gcp

10
推荐指数
1
解决办法
4万
查看次数

Google OAuth 2刷新令牌缺少Web App,但存在localhost

问题:缺少OAuth 2刷新令牌.

问题是localhost版本接收Refresh Token授权令牌的一部分,但GCE中运行的相同代码不会.

细节:

我编写了一个实现Google OAuth 2.0的Python Flask应用程序.此Web应用程序在云中运行,具有经过验证的域名,有效的SSL证书和HTTPS端点.此未修改的Web应用程序也以localhost.运行时之间的区别在于localhost版本不使用TLS.代码流中没有其他差异.

除了Refresh Token缺少,我不能自动更新token,一切都很完美.

我已经广泛研究过这个问题.access_type=offline正确实现API等问题,否则我不会Refresh Tokenlocalhost版本中获得.

我正在使用requests_oauthlibpython库.

gcp = OAuth2Session(
        app.config['gcp_client_id'],
        scope=scope,
        redirect_uri=redirect_uri)

# print('Requesting authorization url:', authorization_base_url)

authorization_url, state = gcp.authorization_url(
                        authorization_base_url,
                        access_type="offline",
                        prompt="select_account",
                        include_granted_scopes='true')

session['oauth_state'] = state

return redirect(authorization_url)


# Next section of code after the browser approves the request

token = gcp.fetch_token(
            token_url,
            client_secret=app.config['gcp_client_secret'],
            authorization_response=request.url)
Run Code Online (Sandbox Code Playgroud)

令牌refresh_token在运行时有,localhost但在云中运行时没有.

此Google文档讨论了刷新令牌,表明Web应用程序支持此功能.

刷新访问令牌(离线访问)

[更新11/18/2018]

我发现这个 …

google-openid oauth-2.0 google-oauth google-cloud-platform requests-oauthlib

8
推荐指数
0
解决办法
538
查看次数

解决方案:google cloud sdk 问题:“来电者必须接受服务条款”

已知问题:

安装 google-cloud-sdk(linux 包或来自 tarball)有一个怪癖,在接受服务条款之前,您无法从命令行创建项目。

重现步骤:

  1. 下载 sdk,解压,将文件夹移动到主目录并使用 install.sh 将 google sdk 根目录添加到 PATH
  2. 初始化并登录:$ google init
  3. 从 CL 创建一个项目: $ gcloud projects create --set-as-default

这将吐出一个错误,如:

错误:(gcloud.projects.create)操作 [cp.5641973328385684887] 失败:9:呼叫者必须接受服务条款

我猜测接受服务条款尚未内置到命令行初始化中。在安装过程中省略这样一个基本步骤应该是非法的,其后果从一千次敲击致死,到“他妈的构建一个操作系统”……但这只是我……

google-app-engine google-cloud-platform google-cloud-sdk google-cloud-iam

8
推荐指数
1
解决办法
5096
查看次数

如何使用Curl CLI执行OAuth 2.0?

我想使用Windows命令提示符下的curl执行Google OAuth 2.0。我的目标是更好地了解OAuth服务器实现的身份验证流程,请参阅HTTP标头等。

如何使用Windows命令提示符中的curl.exe完成此操作?

curl oauth-2.0 google-oauth google-cloud-platform google-oauth2

7
推荐指数
1
解决办法
1万
查看次数

如何使用 REST API 从服务帐户凭据创建访问令牌?

我在 Google Cloud Platform 中创建了一个服务帐户并下载了 JSON 格式的私钥。我正在尝试通过 REST API 创建一个计算资源。出于身份验证目的,我需要一个 AccessToken,需要将其设置为创建计算资源 REST API 的标头。是否有 REST API 从私钥获取访问令牌(不使用 SDK 或 Google 客户端)?

google-authentication google-oauth service-accounts google-cloud-platform

7
推荐指数
2
解决办法
4583
查看次数

与C#中的Google Admin SDK集成

我目前正在尝试通过C#与Google Admin SDK集成,以便我们可以通过自己的系统管理用户。但是,在运行项目时出现错误:未经授权的客户端。

我已经通过超级管理员帐户完成的操作:

这是我正在使用的代码。

ServiceAccountCredential credential = new ServiceAccountCredential(
                new ServiceAccountCredential.Initializer(_googleServiceSettings.Client_Email)
                {
                    ProjectId = _googleServiceSettings.Project_Id,
                    User = "superadmin@google.com",
                    Scopes = new[] { DirectoryService.Scope.AdminDirectoryUser }
                }.FromPrivateKey(_googleServiceSettings.Private_Key));

            var service = new DirectoryService(new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
                ApplicationName = "Test API"
            });

            var request = service.Users.Get("user@google.com");
            var result = await request.ExecuteAsync();
Run Code Online (Sandbox Code Playgroud)

我得到的全部错误是

执行请求时发生未处理的异常。Google.Apis.Auth.OAuth2.Responses.TokenResponseException:错误:“ unauthorized_client”,说明:“客户端未经授权使用此方法检索访问令牌,或者客户端未获得所请求的任何范围的授权。”,Uri:“”

c# google-api google-api-dotnet-client google-admin-sdk gsuite

7
推荐指数
2
解决办法
588
查看次数

项目的结算帐号未开放 GCP

我正在尝试使用命令行将计算实例启动到 GCP 中:

gcloud compute instances create instance-1 --zone=uscentral1-a
Run Code Online (Sandbox Code Playgroud)

它告诉我该项目的计费尚未开放:

API [compute.googleapis.com] not enabled on project [847006780503].
Would you like to enable and retry (this will take a few minutes)?
(y/N)?  Y

Enabling service [compute.googleapis.com] on project [847006780503]...
ERROR: (gcloud.compute.instances.create) FAILED_PRECONDITION: Billing account for project '847006780503' is not open. Billing must be enabled for activation of service(s) 'compute.googleapis.com,compute.googleapis.com,compute.googleapis.com' to proceed.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - subject: ?error_code=390002&project=847006780503&services=compute.googleapis.com&services=compute.googleapis.com&services=compute.googleapis.com
    type: googleapis.com/billing-enabled
- '@type': type.googleapis.com/google.rpc.ErrorInfo
  domain: serviceusage.googleapis.com/billing-enabled
  metadata:
    project: '847006780503'
    services: compute.googleapis.com,compute.googleapis.com,compute.googleapis.com
  reason: …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform google-cloud-billing

7
推荐指数
1
解决办法
5619
查看次数