Ротация ключей хранилища Hashicorp с использованием дат

Я разрабатываю серверную службу, которая предоставляет API. Я решил использовать хранилище для хранения токенов для доступа к этим API.

Сейчас я храню и вращаю ключи вручную в хранилище. Это мой пример кода для чтения секретов из хранилища.

      func (v *vImpl) readSecret (name string)  {
    secret, err := v.client.Logical().Read(path)
    if err != nil {
        return nil, err
    }
    /* process secrets*/

}

При чтении секрета из хранилища я хотел бы проверить, хранился ли ключ в хранилище в течение последних 6 месяцев. Если да, то я хотел бы повернуть его.

Есть ли способ проверить, когда ключ был добавлен в хранилище?

1 ответ

По своей сути механизм ключей/значений Vault не хранит метаданные, например временные метки создания секретов. Тем не менее, в экосистеме Vault есть идиоматические способы достижения ваших целей:

Использование механизма секретов ключей/значений с версиями. Если вы используете версию 2 механизма секретов K/V (kv-v2), каждый раз, когда вы создаете или обновляете секрет, создается новая версия этого секрета. Конечная точка метаданных предоставляет информацию обо всех версиях секрета, включая отметки времени создания.

Чтобы получить время создания конкретной версии, вы должны использовать конечную точку метаданных:

        secret, err := v.client.Logical().Read(fmt.Sprintf("%s/metadata/%s", mountPath, name))
if err != nil {
    return nil, err
}
versions := secret.Data["versions"].(map[string]interface{})
// Assuming you want the first version
versionData := versions["1"].(map[string]interface{})
createdAtStr := versionData["created_time"].(string)
createdAt, _ := time.Parse(time.RFC3339, createdAtStr)

if time.Since(createdAt) > time.Duration(6)*time.Month {
    // Rotate the key
}
Другие вопросы по тегам