AWS-Secrets-Manager

Secrets ManagerでAuroraの認証情報をローテーションしてみて詰まったポイント

はじめに

新年明けましておめでとうございます、omkです。

Auroraの認証情報のローテーションで勝手にローテーションしてくれる~と思っていたのですが、設定で途中何点か上手くいかなかったので躓いたポイントを整理していきます。

Secrets Managerでのローテーションについて

RDSやDynamoDBなどの認証情報はSecrets Managerで一定の周期で自動ローテーションすることが可能です。
要件としてデータベースユーザーのパスワードを定期的に変える必要がある場合などに有用です。
また、Secrets MAnagerに認証情報を置いておくことでパスワードを直接書かなくて良い、自分で管理せずにセキュアにアクセス出来るという利点があります。

やってみた

Auroraインスタンスはすでに作成されている前提で進めます。
今回はAurora3.0のクラスターをシングルで作成しています。

シークレット作成

まず、シークレットを作成していきます。
DBを指定し、DBのユーザー名とパスワードを渡します。

適当なシークレット名をつけます。

自動ローテーションを有効にしてLambda関数を作ります。

これで保存すればシークレットの設定は完了です。
しばらく待てばローテーション構成が有効になります。

ここから少し詰まったので丁寧に記載していきます。

詰まったポイント

ローテーションを実行してもローテーションされない問題が発生しました。
再度実行してみても前回のローテーションが完了していないとの旨のエラーが表示されます。

↓答えは全部ここにありました。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/rotate-secrets-manager-secret-vpc/

折角なので自分なりに細かく説明してみようと思いますが説明不要な場合はリンクを見るのが速いと思います。

試しにAuroraがパブリックサブネットにあってパブリックアクセス可能でセキュリティグループを全開放している状態では難なくローテーションできました。
※セキュリティ的に好ましくないので真似しないでください。

てなわけでネットワーク/アクセス制御部分で何らかの問題が発生していることがわかりました。
自動ローテーションは認証情報のローテーション機能を提供するLambda関数が作られ、これを実行することで実現されていますので、LambdaとAuroraの連携周りで問題があることが想定されます。

よってLambdaからAuroraへアクセス出来ること、LambdaからSecrets Managerにアクセス出来ること、の2点をクリアします。

まず、前者について記載します。
ここで考慮することはVPC、サブネットがRDSに到達するものであること(ルーティング設定があることやNACLで許可されていること)、LambdaのセキュリティグループでAuroraへのアウトバウンドが許可されていること、AuroraのインバウンドでLambdaからのアクセスが許可されていることです。

次に後者についてです。
LambdaからSecrets ManagerにアクセスするにはVPCにネットワーク外への経路が存在する必要があります。
LambdaにはパブリックIPやEIPは設定出来ないので、NATもしくはVPCエンドポイントが必要となります。

以上をまとめまして、

  • Auroraと同じVPCの、プライベートサブネットでLambdaを起動する
  • Lambdaのセキュリティグループではアウトバウンドを許可する
  • AuroraのセキュリティグループでLambdaのセキュリティグループからのインバウンドを許可する
  • Lambdaのプライベートサブネットに「com.amazonaws.ap-northeast-1.secretsmanager」のVPCエンドポイントを設定する
    (Lambdaの環境変数にSecrets ManagerのURLが設定されていてこれにアクセスしているみたいなので、プライベート名前解決出来るようにしておくことで、Secrets Manager宛てのトラフィックをエンドポイントに流せます)
  • エンドポイントのセキュリティグループはLamdbaから443を許可する

の設定で対応できました。

シークレットの画面に戻って「すぐにシークレットをローテーションさせる」を選択することでその場でローテーション出来ます。
画面上部に緑帯が出たら正常にローテーションされていますので「シークレットの値を取得する」を押してシークレットの内容が変わっていることを確認します。

お見せしませんが変わりました。

おわりに

自分でパスワードを管理する必要が無いので便利です。
シークレットを作る段階で案内があるともっといいですね。
料金が気になる場合は、自動ローテーションはありませんが、パラメータストアのSecureStringで似た感じで管理出来ます。

以上、ありがとうございました。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA