ヤマムギ

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認定クラウドプラクティショナー 改訂第2版」という本を書きました。

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

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

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

 - AWS , , ,

ad

ad

  関連記事

API Gateway Lambdaプロキシ統合で渡されるリクエストを確認しました

API Gatewayの統合リクエストでLambdaを指定するときにプロキシ統合 …

Amazon Location Service入門ワークショップ-ルート計算

Amazon Location Service入門ワークショップのアプリで、ルー …

php-fpm で Out of memoryが発生した際にメール通知する(AWS CloudWatch , Amazon SNS)

AWS CloudWatch LogsエージェントでAmazon EC2上のNg …

Cloud9環境を共有した際の環境認証

Cloud9を環境を構築したIAMユーザー以外に共有したとき、その環境から実行す …

既存のAWSアカウントをAWS Control Towerに追加

Account Factoryからは既存アカウントは追加できない? AWS Co …

百聞は一見にしかず!AWSセルフペースラボの無料ラボ!

※2019年5月12日現在に試してみた記録です。 AWSセルフペースラボとは A …

Systems Manager セッションマネージャアクセスのCloud9(SSHなし)

作成画面 いつからできるようになっていたのか気づいてなかったのですが、Cloud …

特定AWSアカウント特定リージョンのSNSトピックを削除するLambda(Python)

やりたいこと 特定アカウント内特定リージョン内のSNSトピックを全部削除したいで …

JAWS-UG関西IoT専門支部 ✕ SORACOM UG 関西「Wio LTE + 絶対圧センサーで遊ぼう!」ワークショップにいってきた

JAWS-UG関西IoT専門支部 ✕ SORACOM UG 関西「Wio LTE …

AMIをOrganizations組織で共有しました

よく使うAMIをOrganizations組織内のリソースパブリッシュ用のアカウ …