ヤマムギ

growing hard days.

*

VPC内のLambdaからVPCエンドポイント経由でSecrets Managerを使う

      2021/05/18

InternetGatewayのないVPCでMySQLに対して一日数回のレポーティングのための抽出処理をするLambdaがあるとします。
MySQLのパスワードは定期更新が必要で、パスワード管理もしたくないので、AWS Secrets Managerを使いたいとします。
そうなると、VPCエンドポイントを使うことになると思いますので、上記の構成を試しました。

MySQL(Aurora Serverless)の準備

MySQLはAurora Serverlessを使ってみました。

作業用のEC2から、SQLコマンドでサンプルテーブルとレコードを作成しました。

VPCエンドポイントの作成

VPCエンドポイントを作成する前に、Secrets ManagerのエンドポイントのDNSを確認しておきました。

パブリックIPアドレスが引けました。

Secrets Manager用のVPCエンドポイントを作成しました。

作成完了して利用可能になったあと、もう一度DNSを確認しました。

プライベートIPアドレスが引けました。

Secrets Managerシークレットの作成

「RDSデータベースの認証情報」としてシークレットを作成しました。
Auroraインスタンスを選択して、ローテーション構成を設定するだけでした。

Lambdaのサンプルコード

LambdaでVPC起動を指定して作りました。

IAMロールに設定したSecrets Manager向けのIAMポリシーはこちらです。

ランタイムはPython 3.8です。
pymysqlはレイヤーから使っています。
シークレットを作成すると、サンプルコードが生成されているので、それを使いまわしました。

途中でパスワードをprintしてますが、これはローテーションの動作確認のためなので、本番でやっちゃうとだめですね。
せっかくパスワードを知らなくてもいい運用にしているのに、CloudWatch Logsにパスワードが記録されてしまいます。

このコードを実行しました。

テーブルに保存されたレコードを取得できました。
パスワードは初期に設定した “demo-password”なことがわかりました。

パスワードのローテーション

パスワードをローテーションするためのLambdaが自動的に作成されているのですが、これVPC設定されてないので、このままだとデータベースに接続できません。
昔作ったときは自動的に設定されていたと思うのですが、今回は環境上のなんらかの条件が違ったのかもしれません。

なにはともあれ、データベースに対して接続できないとパスワード更新もできませんので、VPCの設定をします。
もちろんセキュリティグループIDはAurora側のセキュリティグループでインバウンド許可のソースにする必要があります。

そしてSecrets Managerの[すぐにシークレットをローテーションさせる]を実行しました。

そして、Lambda関数を[テスト]ボタンから再実行しました。

ローテーションにより更新されたパスワードでデータベースに接続できたことがわかりました。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS , , ,

ad

ad

  関連記事

S3バケットにWebフォントをアップロードしてCORSを設定する

Webフォントファイルは、モジワク研究さんのマメロンを使用させていただきました。 …

Amazon Route 53プライベートホストゾーン設定

Amazon Route 53プライベートホストゾーンを作成してみました。 Ro …

Amazon EC2 インスタンスメタデータサービス(IMDS) v2のみにしました

今さらながらですが、EC2 インスタンスメタデータサービス(IMDS) v2を確 …

AWS Lambda(Python3.7)でPandocを実行する際にCSSもLayerから読み込む

Pandocで必要そうなオプションを確認しておく 先日の「AWS Lambda( …

ChatGPT APIをTeamsボットから使いました(AWS Lambda(Python) + API Gateway)

ChatGPT APIが有償で利用可能になったので、会社のTeamsボットに実装 …

CloudFrontディストリビューションを別アカウントへ移動する

すでにCNAMEを設定しているCloudFrontディストリビューションを、別ア …

AWS Transit Gateway Network ManagerにTransit Gatewayを登録してルートアナライザーで確認

グローバルネットワークの作成 VPC左ペインのメニュー Transit Gate …

AWS X-Ray SDK for PythonをOrganizations組織内にLambda Layersで共有しました

ローカルでパッケージ作成 インストールコマンドはこちらAWS X-Ray SDK …

Amazon InspectorによるLambda関数の脆弱性検出結果を確認しました

AWS re:Invent 2022期間内に発表されましたAmazon Insp …

EC2 Windows インスタンス PowerShellでメタデータを見る

Linuxインスタンスならcurlコマンドで確認すればいいのですが、Window …