#amazon-web-services #aws-lambda #terraform #amazon-kms #aws-parameter-store
Вопрос:
У меня есть следующий код машинописи, который генерирует ключ, который мне нужно сохранить в KMS
import {LocalCryptUtils} from 'crypt-util';
const fs = require('fs');
const cryptUtils = new LocalCryptUtils();
cryptUtils.createMasterPrivateKey();
var file = fs.createWriteStream('../../config/derived.txt')
file.write('{n');
file.write(` "public_key_derived" : "${cryptUtils.derivePublicKey(0, 0)}", n`)
file.write(` "public_address_derived" : "${cryptUtils.deriveAddress(0, 0)}" n`)
file.end('}n');
console.log(`{ "masterKey" : "${cryptUtils.exportMasterPrivateKey()}" }`);
Все ресурсы, которые я нашел в Интернете, объясняют, как включать переменные KMS или хранилища параметров в лямбда-функцию. Но мое требование состоит в обратном. Мне нужно использовать лямбда-функцию для генерации ключа и хранения в KMS, а также еще одну функцию меньшего размера для генерации ключа и хранения в хранилище параметров. В результате используйте это в ECS Fargate.
Я был бы признателен за ваше руководство в этом вопросе.
пс. Я использую Terraform в качестве инструмента IaC.
Комментарии:
1. Я не уверен, что полностью понимаю, чего вы пытаетесь достичь. KMS может создавать ключи, управляемые клиентами, позвонив по docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html API, но это генерирует ключ и не дает вам доступа к нему. Затем вы вызываете API KMS для шифрования или дешифрования данных с помощью этого ключа. Не могли бы вы объяснить, чего вы пытаетесь достичь как целостной вещи, а не как шаги, которые, по вашему мнению, вам нужно сделать, чтобы достичь этого, пожалуйста?
2. @ydaetskcoR Я удалил свой предыдущий комментарий, так как понял, что он снова не предоставил достаточной информации. Итак, здесь я даю ему еще один шанс; Мы используем этот код для генерации ключа
the key
и хранения его вручную в хранилище параметров, а затем шифруем его с помощью KMS. Затем предоставил правильные разрешения для использования ECSthe key
Fargate везде, где требуется приложение. Я обеспокоен этой частью генерации этого ключа и думаю, что лучше избавиться от него, но я не вижу функции генерации в параметре хранилища или Менеджере секретов. Всегда ли такие ключи генерируются за пределами infra и хранятся вручную в AWS?3. Вероятно, все еще недостаточно контекста, чтобы понять, почему вы делаете это очень специфично, но, возможно, я смогу объяснить, что мы делаем, когда нам нужно сгенерировать какую-то секретную строку или ключ для использования службой. Мы используем
random_password
ресурс, чтобы заставить Terraform генерировать что-то на лету и хранить это в файле состояния (который защищен отдельно), а затем использоватьaws_ssm_parameter
ресурс для хранения в SSM.4. Для служб ECS вы можете использовать
secrets
в определении задачи ECS ссылку на параметр SSM по его ARN, а затем мы разрешаем роли выполнения задачи разрешения IAM получить его и расшифровать (мы шифруем с помощью ключа CMK KMS, чтобы запретить пользователям, использующим только чтение, читать секреты). Затем служба просто считывает его из переменной среды во время выполнения.5. @ydaetskcoR вы действительно объяснили, что именно я искал. Поэтому я думаю, что нам просто нужно преобразовать то, что у нас есть в параметрах этого кода, чтобы создать пароль для
random_password
ресурса terraform. Насколько я проверил документацию, в этом ресурсе есть много параметров, которые вы можете настроить для создания пароля. Но этот сгенерированный пароль является своего рода одноразовым поколением или, возможно, меняется очень редко. Мы должны как-то предотвратить его восстановление, когда происходит обновление ресурсов и сценариев терраформирования, у вас есть представление об этом?