在 Google 云中查找早于 89 天的 IAM SA 密钥

Finding IAM SA Keys Older than 89 Days in Google Cloud

我正在尝试编写一个脚本来找出所有存在时间超过 89 天的 IAM 服务密钥以满足我们的安全要求,但我正在打结。

迄今为止我最好的尝试:

gcloud iam service-accounts keys list --quiet --managed-by=user --iam-account $SERVICE_ACCOUNT_EMAIL --filter='createTime<=P89D' --format='csv[no-heading](KEY_ID)'

但这似乎捕获了所有的键。我正在努力了解 Google 的过滤器配置。欣然接受任何指点。

底层 REST 方法是 projects.serviceAccounts.keys.list and the result is a ServiceAccountKey which contains valid[Before|After]Time which are strings in the protobuf Timestamp

因此,我认为这需要是日期的字符串比较 (!) 或比较持续时间(但我不熟悉持续时间格式以及如何比较)。

您可以将 validAfterTime 转换为持续时间,即 --filter=validAfterTime.duration()(参见 duration),然后比较 (!) 但作为持续时间

或者构建一个在您范围内的日期并按原样进行比较。以下为hacky,请谨慎操作:

PROJECT=...
ACCOUNT=...

PAST=$(date -d "-90 days" +%Y-%m-%dT%H:%M:%SZ)

EMAIL="${ACCOUNT}@${PROJECT}.iam.gserviceaccount.com"

gcloud iam service-accounts keys list \
--iam-account=${EMAIL} \
--project=${PROJECT} \
--filter="validAfterTime<${PAST}"

我认为有更好的方法来做到这一点!

我最终将上述方法与在脚本中生成的 ISO 日期一起使用,现在似乎可以正常工作了。感觉应该用过滤器很好地处理这种事情,但让它工作比 bash date

花费更多的时间