我试图使用Java客户机将数据从S3传输到GCS,但我遇到了这个错误。
由于权限不足,无法获取Google云存储(GCS)存储桶的位置。请验证是否已授予必要的权限。
我正在使用具有项目所有者角色的服务号,它应该授予对所有项目资源的无限制访问权限。
服务帐户的格式通常project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com。要查找服务帐户的格式,请使用googleServiceAccounts.getAPI调用。如果你没有找到它,使用前面提到的约定来分配下面的角色(为我工作)
然后为其分配角色:
roles/storage.objectViewer
roles/storage.legacyBucketReader
roles/storage.legacyBucketWriter
感谢@thnee的评论,我能够拼凑出一个terraform脚本,将权限添加到隐藏的存储传输服务帐户:
data "google_project" "project" {}
locals {
// the project number is also available from the Project Info section on the Dashboard
transfer_service_id = "project-${data.google_project.project.number}@storage-transfer-service.iam.gserviceaccount.com"
}
resource "google_storage_bucket" "backups" {
location = "us-west1"
name = "backups"
storage_class = "REGIONAL"
}
data "google_iam_policy" "transfer_job" {
binding {
role = "roles/storage.legacyBucketReader"
members = [
"serviceAccount:${local.transfer_service_id}",
]
}
binding {
role = "roles/storage.objectAdmin"
members = [
"serviceAccount:${local.transfer_service_id}",
]
}
binding {
role = "roles/storage.admin"
members = [
"user:<GCP console user>",
"serviceAccount:<terraform user doing updates>",
]
}
}
resource "google_storage_bucket_iam_policy" "policy" {
bucket = "${google_storage_bucket.backups.name}"
policy_data = "${data.google_iam_policy.transfer_job.policy_data}"
}
请注意,这将删除存储桶上存在的OWNER
和READER
的默认ACL。这将阻止您访问控制台中的铲斗。因此,我们添加了角色/存储。管理员
返回所有者用户和进行更改的terraform服务帐户。
谷歌传输服务使用内部服务号来回移动数据。此帐户是自动创建的,不应与您自己创建的服务帐户混淆。
您需要为该用户授予一个名为“遗留bucket writer”的权限。
这是写在留档,但它很容易错过:
https://cloud.google.com/storage-transfer/docs/configure-access
我正在使用Spring引导连接到谷歌云存储。 我能够连接到一个文件,并从谷歌云存储桶中读取内容。 但是我不能得到谷歌云存储桶中所有文件的列表。 请帮帮我。 这很有效 这不工作。 有什么原因吗?
我想向成千上万,也许是数百万的用户授予对谷歌云存储桶的访问权限。我最初的计划是通过IAM角色使用他们的REST api授予访问权限。然而,在这个配额上 每个存储桶最多有100名成员拥有旧版IAM角色,每个存储桶最多有1500名成员拥有所有IAM角色。成员的示例包括个人用户、组和域。请参阅IAM标识。 这是否意味着,我只能为1500人提供阅读权限?如果是这样的话,有什么办法可以让成千上万的人进入?
我在谷歌云存储桶中有文件。 如何将这些文件设置为Cloudflare CDN的原点? (Cloudflare控制面板似乎只想要根域上的网站...?)
我希望有一个私有的Python包,可以从用户友好的(或者可以说开发人员友好的URL)访问,比如https://storage.googleapis.com/pypi-packages/my-package/my-package-1.0.0.tar.gz。 我希望这个包可以从其他谷歌云平台工具访问,如Dataflow,Cloud ML,Composer或GKE 你认为这是可行的吗?
我打算将包含所有文件和目录的整个目录从一个谷歌云存储桶递归复制到另一个谷歌云存储桶。 从本地到Google云存储桶,以下代码运行良好: 如何在同一个项目中将目录从一个bucket递归复制到另一个bucket?
我有一个存储图像的存储桶,当我使用图像的公共URL检索图像时,它会在浏览器中下载图像,而不是在浏览器中显示图像,我如何查看图像而不是下载图像。我为上传的图片使用以下URL。 https://www.googleapis.com/download/storage/v1/b/image-downloader-bucket/o/a06266f6-6082-468e-92ca-f918a48533a8?g