标签: service-accounts

通过API v3允许Google服务帐户YouTube上传访问权限

我想在没有用户参与的情况下自动将视频上传到YouTube,所以我创建了一个服务帐户,跳过了箍,一切看起来很棒,然后尝试上传,一个块,并且我的代码遭到了这个Google_Exception异常的爆炸:

"无法启动可恢复上传(HTTP 401:youtube.header,Unauthorized)"

然后我在YouTube API v3上挖掘并找到错误信息:

https://developers.google.com/youtube/v3/docs/errors

"如果您尝试使用OAuth 2.0服务帐户流程,则会出现此错误.YouTube不支持服务帐户,如果您尝试使用服务帐户进行身份验证,则会收到此错误."

它是否正确?我无法使用服务帐户自动将视频上传到YouTube?

(这是浪费了几天努力工作!)

youtube-api service-accounts

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

Google服务帐户用户干扰

如何使用普通的网络用户界面登录Google服务帐户,例如google drive

现在我只能使用脚本使用API​​登录.

oauth google-api google-drive-api google-oauth service-accounts

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

无法使用Spark的GSC连接器连接Google存储文件

我在我的本地计算机上写了一个火花作业,它使用google hadoop连接器从谷歌云存储中读取文件,如gs://storage.googleapis.com/,https://cloud.google.com/dataproc/docs/中所述连接器/云的存储

我已经设置了具有计算引擎和存储权限的服务帐户.我的火花配置和代码是

SparkConf conf = new SparkConf();
conf.setAppName("SparkAPp").setMaster("local");
conf.set("google.cloud.auth.service.account.enable", "true");
conf.set("google.cloud.auth.service.account.email", "xxx-compute@developer.gserviceaccount.com");
conf.set("google.cloud.auth.service.account.keyfile", "/root/Documents/xxx-compute-e71ddbafd13e.p12");
conf.set("fs.gs.project.id", "xxx-990711");
conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem");
conf.set("fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem"); 

SparkContext sparkContext = new SparkContext(conf);
JavaRDD<String> data = sparkContext.textFile("gs://storage.googleapis.com/xxx/xxx.txt", 0).toJavaRDD();
data.foreach(line -> System.out.println(line));
Run Code Online (Sandbox Code Playgroud)

我已经设置了名为GOOGLE_APPLICATION_CREDENTIALS的环境变量,该变量指向密钥文件.我尝试过使用两个密钥文件,即jsonP12.但无法访问该文件.我得到的错误是

java.net.UnknownHostException: metadata
java.io.IOException: Error getting access token from metadata server at: http://metadata/computeMetadata/v1/instance/service-accounts/default/token
        at com.google.cloud.hadoop.util.CredentialFactory.getCredentialFromMetadataServiceAccount(CredentialFactory.java:208)
        at com.google.cloud.hadoop.util.CredentialConfiguration.getCredential(CredentialConfiguration.java:70)
Run Code Online (Sandbox Code Playgroud)

我正在使用java 8,spark 2.2.0依赖项和gcs-connector 1.6.1.hadoop2从eclipse运行我的工作.我只需要使用服务帐户连接,而不是通过OAuth机制连接.

提前致谢

java google-cloud-storage service-accounts apache-spark google-cloud-dataproc

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


如何更新现有服务帐号的角色 - Google Cloud Console

为此,我正在使用 Google Cloud Console。创建服务帐户时,我可以分配特定角色。但是在我创建它之后,我没有看到更新服务帐户角色的选项。

我尝试编辑服务帐户,但仍然没有添加或删除角色的选项。我在这里缺少什么?

在此处输入图片说明

service-accounts google-cloud-console google-cloud-platform gcloud

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

使用GAE服务帐户JSON密钥

我在GAE中有一个应用程序,我正在使用服务帐户来调用一些谷歌服务.当我在仪表板中创建服务帐户时,会向我提供JSON密钥.json的内容是这样的:

{
  "private_key_id": "bar-foo",
  "private_key": "-----BEGIN PRIVATE KEY-----foo-bar\n-----END PRIVATE KEY-----\n",
  "client_email": "foo-bar@developer.gserviceaccount.com",
  "client_id": "bar-foo.apps.googleusercontent.com",
  "type": "service_account"
}
Run Code Online (Sandbox Code Playgroud)

如何在我的java代码中使用此private_key来生成GoogleCredential对象?

我能够使用该setServiceAccountPrivateKeyFromP12File方法做到这一点,但为此我需要创建一个p12文件并将其存储在某处.使用json私钥我可以在我的属性文件中配置它.

我发现了一个setServiceAccountPrivate方法,GoogleCredential.Builder它接收一个PrivateKey对象作为参数,但我不知道如何从json内的值生成此对象.我发现的所有示例都使用p12文件.

java google-app-engine json service-accounts

9
推荐指数
1
解决办法
2856
查看次数

使用Json文件进行Google服务帐户身份验证

我一直关注Googles网站上的Oauth2服务帐户文档.我也一直在挑选Googles .net客户端库,试图让它工作.

我已经达到了计算机的签名阶段.

Google的隐私密钥如下所示

-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDcmuyQC8rwWdPQ\nmIdksgzSJbVWTU5MeUxy+HAap3yut9wR/L6KGMJ4FBYcsPmXN5gQAhErybavGoZG\nfS1X1/PCpPVpTCA4749K8gbvuZg1JEIAqMtmHiBBrJj5l8eiekQc8pd7Pq35H4wi\nJYXAJGwggPcttkLBRi0xZzd+jdwL1st+7zRt8nMao/xFibInBBvKwb/gP4mJxlQg\nnRdGO6zgMk+PLTcA5C+gFyPA4SdkylrLib5CJO9123FgcfTJZJTukeHo1v0EfU+4\n3bK8HBZnOFa4DHH4mXhkhgYMjibv4Sr/WCEoomJJwNN04SbUEdyhgpM2rZ3cvx+4\nsmB0SQflAgMBAAECggEAXZ100+/dL7++zh9cHVQdcrRDzprBplw3H/bjg7wdgftN\n7Wgm5214YQKNG6HSWORjqC9oX/+agZYs8w69xjBDJg9ggU2nwuGOGky4utQ0jiCT\nzbnTjsMsBxKaXBiXxBBEhVBBDjDcHQLRMdBggNgz9lskCYb1rxT7qqJVf2PtxCuZ\nuxw3whLMRHXvKosER12sMQgGB/0+Nk86GWCqPigpfu7Ec92V0ffcSUaq3gjIUD54\n67TduTWaRDQNB+j2yQsWQZnqRv+TvIXOjinAI+pPbvCUovtiTSZAoz3EalsiXQ0l\nUqDVx26uzEJqhB2kzvAeApuW2Nd5EPxUnf48c4xh4QKBgQDw01mEChWyENV5CBKU\nMSfY0rpAPtq7ahHRR458ZKtITDBlqiZLMjydI65Rr1XxpQ3pJZALObMdUhbvCDfm\nu4BY/lCCt+hcdt9IICvVZsgXgvb6M+Fj2IbYZcAnOm4T1Z1D3I+pW5NdK2ALQRiK\nWsGINOqWCB9WRd7nhmb/XwWyjQKBgQDqgWht5laDuLMc4qpj9finY4qmk57eT3KG\npzbVlT3h7kv7j/j6e+6o9psrqdf1PXpu9XZi3bPtPbH1fX9x5pZgJQRMP4FGOURY\nQDkJfiOOSN/8Vl0senqkscT7DSbe2BqyqQlSlTB4BBF29p1wxb5Wz5HH2BvYE2zI\ni9B4WJcAuQKBgADnajCasRYoBgUcSKWRwaqIr/ZJxhxp+4Mjl59T6WiuEIhxKQ+j\nMqMMXT0lQVdU3UaAw5enMcrsYfWnvD37ejHbUoYLFq4yLAhjRobYieu8rByoUTJE\nv8zUJPKAv6UHaj20+D0UgOsanJOuPN9YE93lBPRnN2blgD6yPHS88JKJAoGABFyh\n16F4LH0L/9aLes6BcIOeeZi3VMU/iRelInXjL8eh7CzyYZ5agxQLMNW46ZvaIiQ4\nroAXL6t9GubZrwGt/F3T5aMswWShS87uAKoy+RuL5wKoOwKQM24HDvBgr7ZvULFq\nNfoGa8UPmhneNdHHx4+W05PGeM9rr5NCLmrfbCkCgYA0nMvEDIJvU3KA3S1cQ3fs\nVopRJwqRIFFL1cHTWaEyIsxEh6i/zAUc/habK82dN3/ZDn/XvWY14k7VZPsSdDC9\noVlQj2z8DVO2K99Oxyh0VlthtecW8exjzkIPJL4srOSl/dooQZS/7ZZyaRQU/BLI\nMdzKHlUKKXWcUU+Ko8W4+w\u003d\u003d\n-----END PRIVATE KEY-----\n
Run Code Online (Sandbox Code Playgroud)

清理钥匙

首先,我清理了一下钥匙

private const string PrivateKeyPrefix = "-----BEGIN PRIVATE KEY-----";
private const string PrivateKeySuffix = "-----END PRIVATE KEY-----";

 /// <summary>Converts the PKCS8 private key to RSA parameters. This method uses the Bouncy Castle library.</summary>
        private static RSAParameters ConvertPKCS8ToRSAParameters(string pkcs8PrivateKey)
        {

            var base64PrivateKey = pkcs8PrivateKey.Replace(PrivateKeyPrefix, "").Replace("\r\n", "").Replace(PrivateKeySuffix, "");           
            var privateKeyBytes = Convert.FromBase64String(base64PrivateKey);
            RsaPrivateCrtKeyParameters crtParameters = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(privateKeyBytes);           


            return DotNetUtilities.ToRSAParameters(crtParameters);
        }
Run Code Online (Sandbox Code Playgroud)

导入参数

 RSAParameters rsaParameters = ConvertPKCS8ToRSAParameters(results.private_key);
 RSACryptoServiceProvider key …
Run Code Online (Sandbox Code Playgroud)

c# google-api jwt google-oauth service-accounts

9
推荐指数
1
解决办法
2138
查看次数

Google Cloud Tasks 无法通过 Cloud Run 进行身份验证

我正在尝试使用 Cloud Tasks 调用 Cloud Run 服务,如此处文档中所述。

我有一个正在运行的 Cloud Run 服务。如果我公开该服务,它就会按预期运行。

我创建了一个云队列,并使用本地脚本安排云任务。这个是用我自己的账号。脚本看起来像这样

from google.cloud import tasks_v2

client = tasks_v2.CloudTasksClient()

project = 'my-project'
queue = 'my-queue'
location = 'europe-west1'
url = 'https://url_to_my_service'

parent = client.queue_path(project, location, queue)

task = {
        'http_request': {
            'http_method': 'GET',
            'url': url,
            'oidc_token': {
               'service_account_email': 'my-service-account@my-project.iam.gserviceaccount.com'
            }
        }
}

response = client.create_task(parent, task)
print('Created task {}'.format(response.name))
Run Code Online (Sandbox Code Playgroud)

我看到该任务出现在队列中,但它失败并立即重试。其原因(通过检查日志)是 Cloud Run 服务返回 401 响应。

我自己的用户具有“服务帐户令牌创建者”和“服务帐户用户”角色。它没有明确的“云任务入队”,但由于我能够在队列中创建任务,我想我已经继承了所需的权限。服务帐户“my-service-account@my-project.iam.gserviceaccount.com”(我在任务中使用它来获取 OIDC 令牌)具有以下角色:

  • 云任务入队(尽管我认为它不需要这个,因为我正在使用自己的帐户创建任务)
  • 云任务任务运行器
  • 云任务查看器
  • 服务帐户令牌创建者(我不确定是否应将其添加到我自己的帐户(安排任务的帐户)或应添加到应执行对 Cloud Run 的调用的服务帐户)
  • 服务帐户用户(此处相同)
  • 云运行调用者

所以我做了一个肮脏的伎俩:我为服务帐户创建了一个密钥文件,将其下载到本地,并通过使用密钥文件将帐户添加到我的 gcloud …

service-accounts google-cloud-tasks google-cloud-run

9
推荐指数
2
解决办法
5995
查看次数

Google Cloud Build 中的应用程序默认凭据

在我的代码中,我尝试从 Cloud Build 中的关联服务帐户收集应用程序默认凭据:

from google.auth import default

credentials, project_id = default()
Run Code Online (Sandbox Code Playgroud)

这在我的本地空间中工作得很好,因为我已经适当地设置了环境变量GOOGLE_APPLICATION_CREDENTIALS。但是,当在 Cloud Build 中执行此行(通过构建配置中的测试步骤)时,会引发以下错误:

google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. 
Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. 
For more information, please see https://cloud.google.com/docs/authentication/getting-started
Run Code Online (Sandbox Code Playgroud)

这让我很困惑,因为根据文档:

默认情况下,Cloud Build 使用特殊服务帐户代表您执行构建。此服务帐号称为 Cloud Build 服务帐号,当您在 Google Cloud 项目中启用 Cloud Build API 时,它会自动创建。 在这里阅读

如果未设置环境变量 GOOGLE_APPLICATION_CREDENTIALS,ADC 将使用附加到正在运行代码的资源的服务帐户。 在这里阅读

那么为什么默认调用无法访问 Cloud Build 服务帐户凭据呢?

python service-accounts google-cloud-platform dockerfile google-cloud-build

9
推荐指数
1
解决办法
5782
查看次数

PermissionDenied:403 IAM 权限“dialogflow.intents.list”

我正在尝试使用 Dialogflow 的 V2 API 获取我的 Dialogflow 代理中的意图列表,但出现以下错误:


PermissionDenied:“projects/xxxx/agent”上的 403 IAM 权限“dialogflow.intents.list”被拒绝。

我采取了以下步骤:

  1. 我为它创建了一个新代理(启用了 V2 API)和一个新的服务帐户。
  2. 我下载了 JSON 密钥并将我的 GOOGLE_APPLICATION_CREDENTIALS 变量设置为其路径。

以下是我的代码:

import dialogflow_v2 as dialogflow

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="/home/user/folder/service-account-key.json"

client=dialogflow.IntentsClient()

parent = client.project_agent_path('[PROJECT_ID]')

for element in client.list_intents(parent):
    pass
Run Code Online (Sandbox Code Playgroud)

我制作了各种代理和服务帐户,甚至将角色从管理员更改为客户端,但找不到任何解决方案。我尝试了以下解决方案但没有用

尝试的解决方案:DialogFlow PermissionDenied:403 IAM 权限“dialogflow.sessions.detectIntent”

chatbot service-accounts google-cloud-platform dialogflow-es

8
推荐指数
3
解决办法
9842
查看次数