Этот пост был вызван недавним Джефф Барр Срочный и важный блог
Если вы используете RDS или Aurora, вы, вероятно, недавно получили электронное письмо с этой темой:
Важное напоминание: обновить сертификаты Amazon RDS SSL/TLS к 5 февраля 2020
Если вы работаете много учетных записей AWS или поменяли это изменение на задней горелке, ваш почтовый ящик может выглядеть так:
Я был немного обеспокоен, когда я впервые увидел это общение в октябре. А Лот Больше людей теперь обеспокоены тем, как крайний срок нависается, и кампания AWS Campaint Email поднималась. Вам даже нужно увольнять модаль после входа в консоль AWS RDS в минуту, чтобы подтвердить эти изменения!
Это влияет на вас?
Первое, что вы должны сделать, это выяснить, влияет на вас этот вопрос. Если вы не сделаете соединения SSL к вашей базе данных, эта проблема, вероятно, не влияет на вас.
Если вы используете IAM Аутентификация базы данных Это определенно влияет на вас!
Первое, что нужно сделать, это обновить приложение для поддержки нового сертификата.
Обновите ваше приложение
Примечание: Если у вас нет какой-либо среды для песочницы/постановки, она стоит крутить кластер RDS/Aurora с существующим террафором, чтобы вы могли проверить все это безопасно
Есть 100 с возможных языков/клиентов, которые вы можете использовать для взаимодействия с RDS, поэтому эта часть зависит от вас. Я дам самый низкий общий пример знаменателя в Bash к концу этого поста. Но вам нужно обновить сертификат, который вы используете для подключения к RDS.
AWS обновил свой комбинированный CA Bundle, чтобы включить как старый, так и новый сертификат, чтобы избежать сценария куриного и яиц. я то
RDS-CA-2015-root.pem
будет работать только с экземплярами RDS, сконфигурированных для использования сертификата старого 2015 годаrds-ca-2019-root.pem
будет работать только с экземплярами RDS, настроенных на использование нового сертификата 2019
Используя RDS-Combined-Ca-bundle.pem
Сертификат в нашем приложении мы можем обновить базовый сертификат RDS без выпуска. Эти сертификаты доступны в S3. Ссылки, а также дополнительная документация доступны в Официальная документация AWS
Изменения террафора
Как правило, когда я получаю уведомление, подобное это от AWS, моя первоначальная мысль: «Я надеюсь, что смогу добиться этого с Terraform», когда вы начнете использовать инфраструктуру в качестве кода, который вы хотите, чтобы каждое изменение было организовано этим инструментом. Из-за границ изменений чувствуют себя грязные, и вы хотите, чтобы все было приведено в управление версией кода.
Оба AWS_DB_INSTANCE
и AWS_RDS_CLUSTER_INSTANCE
Ресурсы поддерживают ca_cert_identifier.
аргумент Вы можете обновить каждый ресурс, чтобы иметь ca_cert_identifier.
аргумент Вы, вероятно, хотите раскрыть это как переменную, чтобы другие потребители этого модуля есть выбор. Вы все еще можете нести ответственность за этот код через 5 лет, когда сертификат 2024 откатывается!
resource "aws_db_instance" "db" { # truncated for brevity tags = "${var.tags}" apply_immediately = "${var.apply_immediately}" ca_cert_identifier = "${var.ca_cert_identifier}" }
Давайте обновим нашу переменную в RDS-CA-2019
Так что наше AWS_RDS_CLUSTER_INSTANCE
Ресурс настроен на использование нового сертификата.
variable "ca_cert_identifier" { default = "rds-ca-2019" description = "Allows you to modify the underlying RDS certificate" }
Теперь мы можем запустить План террафора
В точке вы можете получить ошибку, как это:
Error: module.your_module.aws_db_instance.db: "ca_cert_identifier": this field cannot be set
Это потому, что вы пишете лучшие практики Terraform и закрепили вашу версию поставщика!
provider "aws" { version = "~> 1.52" region = "${var.aws_region}" }
Ваш текущий поставщик не имеет поддержки для обновления ca_cert_identifier
Отказ Мы закрепляем поставщики Terraform по той же причине, причем мы планируем программные библиотеки. Во избежание нарушения изменений и других сюрпризов из вышеупомянутого. Как правило, вы можете отправиться в REPO GitHub для провайдера AWS и узнайте A) Если то, что вы пытаетесь сделать, поддерживается. B) Какой версия провайдера она была введена.
В этом случае (и большинство случаев) сопровождающие провайдера находятся на вершине вещей, и поддержка обновления сертификата было введено в V2.37.0
провайдера. Мы можем просто поднять нашу минимальную версию поставщика
provider "aws" { version = "~> 2.37" region = "${var.aws_region}" }
Давайте сделаем еще один план.
~ module.your_module.aws_db_instance.db ca_cert_identifier: "rds-ca-2015" => "rds-ca-2019" Plan: 0 to add, 1 to change, 0 to destroy.
Теперь мы получаем ожидаемый план.
Однако это изменение не будет применено немедленно. Многие изменения ресурсов RDS применяются в следующем окне обслуживания. В зависимости от рабочей нагрузки это может быть желаемый подход. Мы можем запустить Террафом применяется
и сделайте изменение.
Вы можете заметить, что если вы делаете другой План
Похоже, наше изменение ничего не сделало. Это потому, что сертификат не будет изменен до перезагрузки во время окна обслуживания. Чтобы проверить нашу работу, мы можем использовать AWS CLI
aws rds describe-db-instances --db-instance-id your-db-identifier | jq '.DBInstances[].PendingModifiedValues' { "CACertificateIdentifier": "rds-ca-2019" }
Здесь мы можем видеть этот экземпляр в ожидании модификаций.
Применяя немедленно
В этом конкретном случае я хочу сделать изменение сразу, чтобы я мог сделать соединение от моего клиента и убедиться, что цепочка сертификата работает как ожидалось,
Я рекомендую разоблачить apply_imded_|. Переменная на модулях, которые создают ресурсы RDS.
variable "apply_immediately" { default = false description = "Should modifications be applied immediately? Otherwise they are applied at next maintenance window" }
Это имеет разумное значение по умолчанию ложь
, но у нас все еще есть гибкость, чтобы применить изменения немедленно. В производственной среде может быть, кто-то еще в вашей команде, должен одобрить запрос на тягу, чтобы сделать это изменение, и ваш PR-тело объяснит ваше обоснование для изменения. После того, как изменение сделано, вы установили apply_imded_|. Вернуться к
ложный
После установки нашего apply_imded_|. Переменная к
истинный Наш план выглядит так:
~ module.your_module.aws_db_instance.db apply_immediately: "false" => "true" ca_cert_identifier: "rds-ca-2015" => "rds-ca-2019" Plan: 0 to add, 1 to change, 0 to destroy.
Для меня это применение заняло 90 секунд. Регистрация экземпляра RDS перезагрузилась и теперь имеет новый сертификат.
Пример Bash подключения к экземпляру RDS с аутентификацией SSL и IAM. Следующий код должен работать до и после обновления вашего сертификата
wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem TOKEN="$(aws rds generate-db-auth-token --hostname the_host --port 3306 --region eu-west-1 --username db_user)" mysql -h the_host --port=3306 --ssl-ca=rds-combined-ca-bundle.pem --enable-cleartext-plugin -u db_user --password=$TOKEN"
Я надеюсь, что это поможет кому-либо, что имеет рабочие нагрузки Terraformed RDS.
Оригинал: «https://dev.to/conzy/how-to-update-your-terraformed-rds-aurora-certificates-3dnl»