Вопрос или проблема
Я пытаюсь сохранить файл 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 байт, что не соответствует вашему исходному файлу.
Причины возникновения проблемы
-
Поддержка бинарных данных в Localstack: Несмотря на то, что Localstack предоставляет функциональность AWS, существует вероятность, что его поддержка бинарных данных в Secrets Manager может быть ограничена или иметь некоторые баги. Localstack активно обновляется, и некоторые особенности функциональности AWS могут отсутствовать или работать неправильно по сравнению с реальной средой AWS.
-
Ошибка в коде Terraform: Хотя вы упомянули, что код работает корректно на реальном AWS, стоит проверить, действительно ли все параметры настроены правильно для Localstack. Например, стоит убедиться, что вы используете правильные конфигурации для взаимодействия с Localstack и что файл
my_certificate.p12
корректно загружен.
Решения и рекомендации
-
Проверьте документацию Localstack: Убедитесь, что вы используете последнюю версию Localstack и ознакомьтесь с его документацией. Иногда существуют известные проблемы или ограничения, которые могут объяснить ваше поведение.
-
Испробуйте код для загрузки без
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")) }
-
Проверьте температуру Localstack: Убедитесь, что Localstack работает на актуальной версии и не содержит известных ошибок. Обновите его, если это необходимо.
-
Альтернатива с использованием других инструментов: Если проблема не решается, подумайте о возможности использования других тестовых инструментов, таких как Local AWS. Это поможет вам проверить, работает ли ваш код с реальной средой.
-
Обратитесь к сообществу: Если ни одно из решений не приносит успеха, подумайте о том, чтобы обратиться к сообществу пользователей Localstack через GitHub или специализированные форумы. Возможно, кто-то уже сталкивался с подобной проблемой и предложит решение.
Заключение
Проблема с хранением бинарных секретов в Localstack может быть вызвана различными факторами, включая возможные баги или ограничения данного инструмента. Однако, применив предложенные рекомендации и внеся изменения в ваш Terraform код, вы сможете лучше разобраться с проблемой. Если трудности сохраняются, обращение к сообществу разработчиков может помочь найти более конкретные решения.