小编Tas*_*sZG的帖子

通过Python中的服务帐户访问Google Cloud Storage的权限

我正在尝试获取一个服务帐户,以便从 Python 脚本中在 Google Cloud Storage 中创建 blob,但我遇到了凭据问题。

1) 我为我的项目创建服务帐户,然后下载 json 格式的密钥文件:

"home/user/.config/gcloud/service_admin.json"
Run Code Online (Sandbox Code Playgroud)

2)我为服务帐户提供必要的凭据(通过子流程中的 gcloud)

 roles/viewer, roles/storage.admin,  roles/resourcemanager.projectCreator, roles/billing.user
Run Code Online (Sandbox Code Playgroud)

然后我想访问GCS中的一个bucket

from google.cloud import storage
import google.auth

credentials, project = google.auth.default()
client = storage.Client('myproject', credentials=credentials)
bucket = client.get_bucket('my_bucket')
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会导致:

google.api_core.exceptions.Forbidden: 403 GET
https://www.googleapis.com/storage/v1/b/my_bucket?projection=noAcl:
s_account@myproject.iam.gserviceaccount.com does not have
storage.buckets.get access to my_bucket
Run Code Online (Sandbox Code Playgroud)

如果我设置环境变量,我的运气会更好一些

export GOOGLE_APPLICATION_CREDENTIALS="home/user/.config/gcloud/service_admin.json"
Run Code Online (Sandbox Code Playgroud)

并重新运行脚本。但是,我希望这一切都在创建帐户的脚本的一个实例中运行,并继续在存储桶中创建必要的文件。如果我知道我的 json 凭证文件在哪里,如何访问 my_bucket。

google-cloud-storage google-cloud-platform google-cloud-python

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

Redis ReJSON 模块是否与 Google Memorystore 兼容?

Redis ReJSON 模块是否与 Google Memorystore 兼容?我想将 JSON 存储在 memorystore 中,我可以使用 ReJSON 模块吗?

google-cloud-platform google-cloud-memorystore

5
推荐指数
1
解决办法
664
查看次数

从 Google Cloud Storage 存储桶进行 pip 安装

我想从 Google Cloud Storage 存储桶安装 Python 包 (my-package-1.0.0.tar.gz)。

它适用于公开可用的存储桶(允许在 GCS 存储桶上进行公共读取访问?)或签名的 URL(https://cloud.google.com/storage/docs/access-control/signing-urls-with-helpers)。不过我想知道是否还有其他解决方案。

我想要一个私有的Python包,可以从用户友好的(或者我可以说开发人员友好的url)访问,例如https://storage.googleapis.com/pypi-packages/my-package/my-package -1.0.0.tar.gz

我希望可以从其他 Google Cloud Platform 工具(例如 Dataflow、Cloud ML、Composer 或 GKE)访问此软件包

你认为这是可行的吗?

pip python-2.7 google-cloud-platform python-wheel

5
推荐指数
1
解决办法
3262
查看次数

是否可以从另一个项目连接到 Google Cloud Memorystore?

我在同一地区(欧洲西部 2)有 2 个不同的项目(项目 A 和项目 B)。我在项目 A 中创建了一个 Memorystore 实例。因此,我可以从项目 A 连接到 Memorystore,但我也尝试从项目 B 连接到同一个 Memorystore,但没有成功。

我做错了什么?甚至可以将多个项目连接到同一个基本 Memorystore 吗?

google-app-engine google-cloud-platform google-cloud-networking google-cloud-memorystore

5
推荐指数
1
解决办法
1668
查看次数

Google PubSub 和来自 TOPIC 的重复消息

如何防止在 Google Cloud PubSub 中发生重复的 msg?

说,我有一个代码来处理它订阅的味精。

说,我有 2 个节点具有相同的服务,具有此代码。

一旦收到消息但尚未确认,另一个节点将收到相同的消息。这就是问题所在,我们有两个重复的 msgs

void messageReceiver(PubsubMessage pubsubMessage, AckReplyConsumer ackReply) {

        submitHandler.handle(toMessage(pubsubMessage))
                .doOnSuccess((response) -> {
                    log.info("Acknowledging the successfully processed message id: {}, response {}", pubsubMessage.getMessageId(), response);
                    ackReply.ack();  // <---- acknowledged
                })
                .doOnError((e) -> {
                    log.error("Not acknowledging due to an exception", e);
                    ackReply.nack();
                })
                .doOnTerminate(span::finish)
                .subscribe();
    }
Run Code Online (Sandbox Code Playgroud)

解决这个问题的方法是什么?这是正常行为吗?

java google-cloud-platform google-cloud-pubsub

3
推荐指数
2
解决办法
6870
查看次数

为 PHP7.2 创建 Google Cloud Storage 上传 URL

我觉得我在这里遗漏了一些东西,但是在标准环境中使用 PHP 5.5 的 Google App Engine 上,我可以非常轻松地为我的用户创建上传 URL 来上传文件,而不会在 PHP 中浪费时间,如下所示:

<?php
use google/appengine/api/cloud_storage/CloudStorageTools;

?><form action="<?php echo CloudStorageTools::createUploadUrl('my/upload/handler.php'); ?>" method="post">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>
Run Code Online (Sandbox Code Playgroud)

当然大大简化了(因为该 URL 只能持续 60 秒)。

但是,此 API 似乎不适用于运行 PHP 7.2 的应用程序引擎,我确实需要使用它,而且我似乎找不到用于获取上传 URL 的替代 API;这些真的停产了吗?

还有其他非常有用的功能,例如getImageURL()获取缩略图等。当然,很多文档仍然指向上述处理用户上传到应用引擎站点的方法!

那么如何在较新的 API 中创建和使用上传 URL?

google-app-engine google-cloud-storage google-cloud-platform php-7.2

2
推荐指数
1
解决办法
847
查看次数

Docker“登录成功”但仍然无法推送到 GCP 私有注册表

我在将 docker 映像推送到我的私有 GCP 注册表时遇到问题。我从 Google Cloud Platform 创建了一个具有所有者角色的新服务帐户。然后,我创建了一个服务密钥,并将 json 文件的内容(从服务帐户下载)复制到 Gitlab CI/CD 变量的 $GCP_SERVICE_KEY 变量中。

这是我的.gitlab-ci.yaml文件:

image: python:3.6

stages:
  - push

before_script:
  - mkdir -p $HOME/.docker
  - echo "$GCP_SERVICE_KEY" >> "$HOME/.docker/config.json"

dockerpush:
  stage: push
  image: docker:stable
  services:
    - docker:dind
  script:
    - docker build --build-arg MONGODB_URI=$MONGODB_URI -t my_image_name .
    - docker login -u _json_key --password-stdin https://gcr.io < $HOME/.docker/config.json
    - docker tag my_image_name eu.gcr.io/my_project_id/my_image_name
    - docker push eu.gcr.io/my_project_id/my_image_name
Run Code Online (Sandbox Code Playgroud)

当我检查控制台日志时,我看到“登录成功”。但我无法推送到我的 GCP 注册表。我检查了项目 ID、用户的角色,一切似乎都正常。但为什么我仍然看到“未经授权”的错误?

$ docker login -u _json_key -p "$GCP_SERVICE_KEY" …
Run Code Online (Sandbox Code Playgroud)

continuous-integration push docker google-cloud-platform gitlab-ci

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

调用 fork() 后使用 Python SDK 将数据上传到 Google Storage 时出现 403 错误

我正在尝试在 Linux 主机 (Ubuntu 18.04) 上的分叉进程中使用 Python SDK 将内容上传到 Google 存储桶操作失败,状态代码为 403:

google.api_core.exceptions.Forbidden: 403 POST https://www.googleapis.com/upload/storage/v1/b/temp-compare/o?uploadType=multipart :('请求失败,状态码',403,'预期之一', )

示例代码:

import random
import string
import json
import os
import requests
from datetime import datetime, timedelta
from google.cloud import storage

def upload_to_bucket(plainText):
    gcp_client = storage.Client.from_service_account_json("/path/to/google-bucket-credentials.json")
    bucket = gcp_client.get_bucket('bucket_name')
    bucket_file_name = random_file_name('json', 10)
    blob = bucket.blob(bucket_file_name)
    blob.upload_from_string(plainText)
    url = blob.generate_signed_url(expiration=datetime.utcnow() + timedelta(hours=48), method="GET")
    return url

def random_file_name(ext, length):
    return "%s.%s" % (''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(length)), ext)


if __name__ == "__main__": …
Run Code Online (Sandbox Code Playgroud)

fork google-cloud-storage google-cloud-platform python-3.6

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