我试图过滤附加在服务帐户上的IAM策略
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过滤集群名称。
发布于 2022-08-03 17:01:55
请看我上面的评论,不清楚你想要过滤什么。
以下是您所述需求的具体解决方案。根据我的评论,这是一种奇怪的方法,我不明白你为什么要这么做,但假设你真的这么做了:
# 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而不是get或describe)命令时,就会非常有用。
在默认输出中很难看到这一点,但是,如果使用例如--format=json,您将立即看到gcloud ... get返回一个资源,而gcloud ... list返回一个list ([])。
后者可以被过滤。
有各种解决办法:
gcloud
使用gcloud的优势在于它是一种工具,可以将它们全部用于rool。
使用--flatten将单个资源转换为列表,以便您可以使用--filter
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}"UNIX哲学是一种工具,它能做一件事,并且做得很好。jq是一个优秀的JSON (!)处理工具,并与gcloud --format=json很好地结合
FILTER="
.bindings[]
|select(.role==\"${ROLE}\").members[0]
|split(\":\")[1]
"
gcloud iam service-accounts get-iam-policy ${EMAIL} \
--project=${PROJECT} \
--format=json \
| jq -r "${FILTER}"https://stackoverflow.com/questions/73223673
复制相似问题