ヤマムギ

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

  関連記事

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

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

AWS DeepLensセットアップの儀

AWS DeepLensのセットアップを開始します。 AWS DeepLensを …

S3インベントリ設定でインベントリファイルの作成を設定

インベントリレポートファイルはオブジェクトの一覧情報です。 日次、週次で定期作成 …

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

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

Amazon BedrockがGAしたので触りました(boto3からも)

Amazon Bedrock Is Now Generally Availabl …

YouTubeチャンネル「ヤマムギ」をはじめました

YouTubeチャンネル「ヤマムギ」をはじめました。 2021年GWチャレンジと …

AWS CodeCommit 認証情報ヘルパーをmacOSに設定しました

AWS CLI 認証情報ヘルパーを使用して Linux, macOS, or U …

EC2 Ubuntu DesktopにRDP

Ubuntu Desktopが必要になりましたので、こちらのAWS EC2でデス …

Amazon Location Service入門ワークショップ-トラッカー

トラッカーでデバイスの位置や移動履歴を追跡できます。 関連記事 Amazon L …

AWS Systems Manager Session Managerでログを有効にする

AWS Systems Manager Session Managerでのコマン …