首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过描述过滤GCP IAM策略

通过描述过滤GCP IAM策略
EN

Stack Overflow用户
提问于 2022-08-03 15:00:46
回答 1查看 80关注 0票数 0

我试图过滤附加在服务帐户上的IAM策略

代码语言:javascript
复制
gcloud iam service-accounts get-iam-policy foo@bar.iam.gserviceaccount.com --project foobar --filter="description:'*migration'"

这会抛出WARNING: The following filter keys were not present in any resource : description

有没有一种基于IAM策略描述的过滤方法?

编辑:我的用法是通过集群过滤IAM策略。对于SQL实例,我添加了一个带有集群名称的标签,但是对于命令gcloud iam service-accounts返回的策略,我们没有标签,所以我决定将集群添加到描述中,并通过description过滤集群名称。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-03 17:01:55

请看我上面的评论,不清楚你想要过滤什么。

以下是您所述需求的具体解决方案。根据我的评论,这是一种奇怪的方法,我不明白你为什么要这么做,但假设你真的这么做了:

代码语言:javascript
复制
# List SOURCE Policy's Service Account emails
SOURCE="[SERVICE-ACCOUNT-EMAIL]"
EMAILS=$(\
  gcloud iam service-accounts get-iam-policy ${SOURCE} \
  --flatten="bindings[].members[]" \
  --filter="bindings.members:serviceAccount" \
  --format="value(bindings.members.split(\":\").slice(1:))" \
  |sort | uniq)

# Search pattern
FILTER="*migration"
# Iterate over them
for EMAIL in ${EMAILS}
do
  # Extract the Service Account's description
  DESCRIPTION=$(\
    gcloud iam service-accounts describe ${EMAIL} \
    --format="value(description)")
  if [[ ${DESCRIPTION} == ${FILTER} ]]
  then
    print "[%s] %s" ${EMAIL} ${DESCRIPTION}
  fi
done

这里有一个解决方案,可以普遍应用于过滤gcloud

gcloud在使用--format--filter--flatten方面很复杂(见下文)。

--filter只是(!?)当您有多个资源来筛选(通常是从list而不是getdescribe)命令时,就会非常有用。

在默认输出中很难看到这一点,但是,如果使用例如--format=json,您将立即看到gcloud ... get返回一个资源,而gcloud ... list返回一个list ([])。

后者可以被过滤。

有各种解决办法:

gcloud

使用gcloud的优势在于它是一种工具,可以将它们全部用于rool。

使用--flatten将单个资源转换为列表,以便您可以使用--filter

代码语言:javascript
复制
ROLE="roles/owner"
FILTER="bindings.role=\"${ROLE}\""

# Return all matching members
FORMAT="value(bindings.members[])"

# Return 1st matching member
FORMAT="value(bindings.members[0])"

# Return 1st matching member's email address
FORMAT="value(bindings.members[0].split(\":\").slice(1:))"

gcloud iam service-accounts get-iam-policy ${EMAIL} \
--project=${PROJECT} \
--flatten="bindings[]" \
--filter="${FILTER}" \
--format="${FORMAT}"

jq

UNIX哲学是一种工具,它能做一件事,并且做得很好。jq是一个优秀的JSON (!)处理工具,并与gcloud --format=json很好地结合

代码语言:javascript
复制
FILTER="
  .bindings[]
  |select(.role==\"${ROLE}\").members[0]
  |split(\":\")[1]
"
gcloud iam service-accounts get-iam-policy ${EMAIL} \
--project=${PROJECT} \
--format=json \
| jq -r "${FILTER}"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73223673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档