查找与存储桶关联的服务帐户的权限
Find permissions of service account associated with buckets
我已经使用命令创建了一个服务帐户
gcloud iam service-accounts create test-sa --display-name "TEST SA"
然后我继续为该服务帐户授予 GCS 存储桶的管理员权限。
gsutil iam ch serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com:admin gs://<BUCKET>
现在我想要一种方法来检查 roles/permissions 被授予服务帐户的内容。
一种方法是执行以下操作:
gcloud projects get-iam-policy <PROJECT> \
--flatten="bindings[].members" \
--format='table(bindings.role)' \
--filter="bindings.members: serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com"
但是上面的命令returns是空的。
但是如果我得到存储桶的 ACL,我可以清楚地看到存储桶的成员和角色。
gsutil iam get gs://<BUCKET>
{
"bindings": [
{
"members": [
"serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com"
],
"role": "roles/storage.admin"
},
{
"members": [
"projectEditor:<PROJECT>",
"projectOwner:<PROJECT>"
],
"role": "roles/storage.legacyBucketOwner"
},
{
"members": [
"projectViewer:<PROJECT>"
],
"role": "roles/storage.legacyBucketReader"
}
],
"etag": "CAI="
}
有人可以指导我如何查看与服务帐户关联的 buckets/permissions 而不是相反吗?
您可以在 Project/Folder/Organization 等资源和存储桶、对象、计算引擎实例、KMS 密钥等单个资源上分配权限。没有一个命令可以检查所有内容。
在项目级别权限是项目范围的。在资源层面,比如一个对象,只影响那个对象。您需要检查所有内容才能确切地知道 what/where IAM 成员拥有权限。
由于您在 Bucket ACL 级别授予权限并且未使用服务帐户 iam-binding,
gcloud projects get-iam-policy
命令不会 return 此权限。
您只能通过查询存储桶 ACL 来获取它。
这里的问题是您将项目级角色与存储桶级角色混合在一起,方法是直接将权限分配给存储桶(存储桶级角色),然后在项目级别进行检查。您可以找到有关此 over here.
的更多信息
这就是为什么在检查项目 (cloud projects get-iam-policy ) 或存储桶 (gsutil iam get gs://) 时得到不同结果的原因。
您应该坚持使用桶级角色或项目级角色,并避免混合使用这 2 个角色,就好像您开始混合使用它们一样,要知道每个用户拥有和曾经是什么角色会变得很棘手。
根据您计划管理的存储桶数量,您可能更容易坚持使用存储桶级别的角色,并在检查用户权限时只遍历存储桶列表,因为您可以非常方便地执行此操作轻松使用 Cloud SDK 进行少量 for 循环,例如:
for i in $(cat bucket-list.txt)
do
gsutil iam get gs://$i
done
希望你觉得这有用。
我已经使用命令创建了一个服务帐户
gcloud iam service-accounts create test-sa --display-name "TEST SA"
然后我继续为该服务帐户授予 GCS 存储桶的管理员权限。
gsutil iam ch serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com:admin gs://<BUCKET>
现在我想要一种方法来检查 roles/permissions 被授予服务帐户的内容。
一种方法是执行以下操作:
gcloud projects get-iam-policy <PROJECT> \
--flatten="bindings[].members" \
--format='table(bindings.role)' \
--filter="bindings.members: serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com"
但是上面的命令returns是空的。
但是如果我得到存储桶的 ACL,我可以清楚地看到存储桶的成员和角色。
gsutil iam get gs://<BUCKET>
{
"bindings": [
{
"members": [
"serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com"
],
"role": "roles/storage.admin"
},
{
"members": [
"projectEditor:<PROJECT>",
"projectOwner:<PROJECT>"
],
"role": "roles/storage.legacyBucketOwner"
},
{
"members": [
"projectViewer:<PROJECT>"
],
"role": "roles/storage.legacyBucketReader"
}
],
"etag": "CAI="
}
有人可以指导我如何查看与服务帐户关联的 buckets/permissions 而不是相反吗?
您可以在 Project/Folder/Organization 等资源和存储桶、对象、计算引擎实例、KMS 密钥等单个资源上分配权限。没有一个命令可以检查所有内容。
在项目级别权限是项目范围的。在资源层面,比如一个对象,只影响那个对象。您需要检查所有内容才能确切地知道 what/where IAM 成员拥有权限。
由于您在 Bucket ACL 级别授予权限并且未使用服务帐户 iam-binding,
gcloud projects get-iam-policy
命令不会 return 此权限。
您只能通过查询存储桶 ACL 来获取它。
这里的问题是您将项目级角色与存储桶级角色混合在一起,方法是直接将权限分配给存储桶(存储桶级角色),然后在项目级别进行检查。您可以找到有关此 over here.
的更多信息这就是为什么在检查项目 (cloud projects get-iam-policy ) 或存储桶 (gsutil iam get gs://) 时得到不同结果的原因。
您应该坚持使用桶级角色或项目级角色,并避免混合使用这 2 个角色,就好像您开始混合使用它们一样,要知道每个用户拥有和曾经是什么角色会变得很棘手。
根据您计划管理的存储桶数量,您可能更容易坚持使用存储桶级别的角色,并在检查用户权限时只遍历存储桶列表,因为您可以非常方便地执行此操作轻松使用 Cloud SDK 进行少量 for 循环,例如:
for i in $(cat bucket-list.txt)
do
gsutil iam get gs://$i
done
希望你觉得这有用。