我有一个Google存储桶gs:// kd-non-prod-test /存储桶和3个服务 帐户用户
bucket-poc-user-1@xxxx.iam.gserviceaccount.com
bucket-poc-user-2@xxxx.iam.gserviceaccount.com
bucket-poc-user-3@xxxx.iam.gserviceaccount.com
在存储桶中,我创建了3个目录
- gs://kd-non-prod-test/for-user1
- gs://kd-non-prod-test/for-user2
- gs://kd-non-prod-test/for-user3
我想向其各自的用户提供对目录的读取,写入和列表访问。
示例-
只有 bucket-poc-user-1@xxxx.iam.gserviceaccount.com 用户将仅在 gs:// kd-non-prod-test上具有读取,写入和列表/ for-user1 目录。
要存储/更新到相应目录的对象应具有 与目录具有相同的访问权限
示例
如果管理员用户在gs://kd-non-prod-test/for-user1/sample.txt
目录内创建文本文件
那么bucket-poc-user-1@xxxx.iam.gserviceaccount.com也应在gs://kd-non-prod-test/for-user1/sample.txt
上具有与目录gs://kd-non-prod-test/for-user1/
相同的访问权限
为我提供解决方案。 谢谢。
答案 0 :(得分:0)
您可以授予整个项目或整个存储桶的权限。看一下Cloud IAM Roles for Cloud Storage。它指定 int count = 0;
long remainingBytes = end - start + 1;
long position = start;
byte[] buffer = new byte[ReadStreamBufferSize];
byte[] temp = new byte[ReadStreamBufferSize];
inputStream.Position = start;
int item = 1;
do
{
try
{
byte[] byteAry = new byte[ReadStreamBufferSize];
if (System.IO.File.Exists("D:\\test\\pp" + item + ".wav")){
byteAry = System.IO.File.ReadAllBytes("D:\\test\\pp" + item + ".wav");
}
else
{
break;
}
temp = temp.Concat(byteAry).ToArray();
inputStream = new MemoryStream(temp);
if (remainingBytes > ReadStreamBufferSize)
count = inputStream.Read(buffer, 0, ReadStreamBufferSize);
else
count = inputStream.Read(buffer, 0, (int)remainingBytes);
outputStream.Write(buffer, 0, count);
}
catch (Exception error)
{
Debug.WriteLine(error);
break;
}
position = inputStream.Position + 100;
end = inputStream.Length;
remainingBytes = end - position + 1;
item++;
} while (position <= end);
答案 1 :(得分:0)
如安德烈(Andrei)所述,您不能授予存储桶中文件夹的权限。
如果您确实想在用户“文件夹”之间划分权限,则应直接将存储桶创建为“文件夹”,在其中向特定用户授予权限。
应该给你这样的东西:
- gs://for-user1-test
- gs://for-user2-test
- gs://for-user3-test
如果您想让管理员有权访问所有gcs,则应授予他存储管理员角色,以便他可以访问和读取任何存储桶。
但是我不知道这是否真的是一个可用的解决方案,因为您最终将拥有与用户一样多的存储桶,而如果有数百个存储桶,则可能会变得困难。