Localstack — Невозможно сохранить бинарный секрет с использованием Secrets Manager?

Вопрос или проблема

Я пытаюсь сохранить файл PKCS#12 в SecretsManager Localstack. У меня есть следующий код terraform для этого:

data "local_file" "keystore" {
    filename = "${path.module}/my_certificate.p12"
}

resource "aws_secretsmanager_secret" "keystore" {
    provider = aws.localstack
    name = "test"

    recovery_window_in_days = 0
}

resource "aws_secretsmanager_secret_version" "keystore" {
    provider = aws.localstack
    secret_id = aws_secretsmanager_secret.keystore.id
    secret_binary = data.local_file.keystore.content_base64
}

Команда terraform apply завершилась успешно, но когда я извлекаю его с помощью этой команды…

aws secretsmanager get-secret-value --region us-east-1 --endpoint-url http://localhost:4566 --secret-id test --version-stage AWSCURRENT --query 'SecretBinary' --output text | base64 --decode > testout.p12

…я получаю только значение размером 230 байт, которое не является моим файлом PKCS#12. Сначала я думал, что это проблема с моим кодом terraform, но я изменил его, чтобы использовать настоящий AWS provider вместо localstack, и все работало хорошо. Когда я получаю значение секрета, оно совпадает с файлом PKCS#12, который я ожидал.

Localstack не поддерживает бинарные секреты? Я не видел документации, указывающей на то, что это ограничение. Я делаю что-то не так здесь?

Ответ или решение

Проблема с хранением бинарных секретов в Localstack: Решение и Рекомендации

Если вы столкнулись с проблемой хранения бинарного секрета в AWS Secrets Manager при использовании Localstack, вы не одиноки. Рассмотрим вашу ситуацию, предложим возможные решения и объясним, почему вы можете сталкиваться с такими трудностями.

Описание проблемы

Вы пытаетесь сохранить файл PKCS#12 с помощью Terraform в Localstack, но при извлечении секрета получаете байтовое значение, не соответствующее ожидаемому файловому содержимому. Код Terraform выглядит следующим образом:

data "local_file" "keystore" {
    filename = "${path.module}/my_certificate.p12"
}

resource "aws_secretsmanager_secret" "keystore" {
    provider = aws.localstack
    name = "test"

    recovery_window_in_days = 0
}

resource "aws_secretsmanager_secret_version" "keystore" {
    provider = aws.localstack
    secret_id = aws_secretsmanager_secret.keystore.id
    secret_binary = data.local_file.keystore.content_base64
}

При выполнении команды для извлечения секрета вы получаете всего лишь 230 байт, что не соответствует вашему исходному файлу.

Причины возникновения проблемы

  1. Поддержка бинарных данных в Localstack: Несмотря на то, что Localstack предоставляет функциональность AWS, существует вероятность, что его поддержка бинарных данных в Secrets Manager может быть ограничена или иметь некоторые баги. Localstack активно обновляется, и некоторые особенности функциональности AWS могут отсутствовать или работать неправильно по сравнению с реальной средой AWS.

  2. Ошибка в коде Terraform: Хотя вы упомянули, что код работает корректно на реальном AWS, стоит проверить, действительно ли все параметры настроены правильно для Localstack. Например, стоит убедиться, что вы используете правильные конфигурации для взаимодействия с Localstack и что файл my_certificate.p12 корректно загружен.

Решения и рекомендации

  1. Проверьте документацию Localstack: Убедитесь, что вы используете последнюю версию Localstack и ознакомьтесь с его документацией. Иногда существуют известные проблемы или ограничения, которые могут объяснить ваше поведение.

  2. Испробуйте код для загрузки без content_base64: Попробуйте интерпретировать содержимое вашего файла напрямую, минуя базовое кодирование в base64.

    Измените ваш код следующим образом:

    resource "aws_secretsmanager_secret_version" "keystore" {
       provider = aws.localstack
       secret_id = aws_secretsmanager_secret.keystore.id
       secret_binary = base64encode(file("${path.module}/my_certificate.p12"))
    }
  3. Проверьте температуру Localstack: Убедитесь, что Localstack работает на актуальной версии и не содержит известных ошибок. Обновите его, если это необходимо.

  4. Альтернатива с использованием других инструментов: Если проблема не решается, подумайте о возможности использования других тестовых инструментов, таких как Local AWS. Это поможет вам проверить, работает ли ваш код с реальной средой.

  5. Обратитесь к сообществу: Если ни одно из решений не приносит успеха, подумайте о том, чтобы обратиться к сообществу пользователей Localstack через GitHub или специализированные форумы. Возможно, кто-то уже сталкивался с подобной проблемой и предложит решение.

Заключение

Проблема с хранением бинарных секретов в Localstack может быть вызвана различными факторами, включая возможные баги или ограничения данного инструмента. Однако, применив предложенные рекомендации и внеся изменения в ваш Terraform код, вы сможете лучше разобраться с проблемой. Если трудности сохраняются, обращение к сообществу разработчиков может помочь найти более конкретные решения.

Оцените материал
Добавить комментарий

Капча загружается...