A5:SQL Mk-2

開発のこと、日々のこと

A5:SQL Mk-2 で AWS の Secrets Manager からパスワードを取得してDB接続する

| 0件のコメント

AWS のシークレットマネージャーからパスワードを取得してDBに接続したいことがあります。AWSマネジメントコンソールから読み取ってもよいですが、ローテーションされていると毎回参照するのも大変です。

A5:SQL Mk-2ではコマンド実行でワンタイムパスワードを取得して、DB接続する機能があります。以下のようなシークレットからパスワードを取得して、DB接続するパターンを考えてみます。

次のような GetPassword.bat バッチファイルを用意します。

@echo off

rem aws コマンドのために、AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY を引数から取得
set AWS_ACCESS_KEY_ID=%2
set AWS_SECRET_ACCESS_KEY=%3
set AWS_REGION=%4

rem 取得したいシークレットの名前または ARN
set SECRET_ID=%1

rem ------------------------------
rem Secrets Manager から password を取得
rem ------------------------------
powershell -NoProfile -Command ^
    "(aws secretsmanager get-secret-value --secret-id %SECRET_ID% --query SecretString --output text | ConvertFrom-Json).password"

awsコマンドがインストールされている必要があります。awsコマンドを使用するために、AWSアクセスキー・AWSシークレットアクセスキー・AWSリージョンが必要となります。
このため引数として、シークレット名・AWSアクセスキー・AWSシークレットアクセスキー・AWSリージョン を渡します。コマンドラインから実行すると以下のようにパスワードが標準出力に出力されます。
(AWSアクセスキー・AWSシークレットアクセスキー はマスクしています。)

A5:SQL Mk-2 では、データベース登録画面の「その他」タブで「ワンタイムパスワード生成コマンド」の欄に以下のように入力します。

ワンタイムパスワード入力例

C:\…\GetPassword.bat <シークレット名> <AWSアクセスキー> <AWSシークレットアクセスキー> <AWSリージョン>

A5:SQL Mk-2のログイン時、パスワードは空のままにします。

以上で接続すると、GetPassword.bat が実行され、その実行結果(標準出力)をパスワードとしてDBに接続されます。

上記の例では、AWSアクセスキー・AWSシークレットアクセスキーをバッチファイルの引数として渡していますが、OSの環境変数としてあらかじめ設定する・バッチファイルに埋め込むなど使いやすいように改造して使ってみてください。

コメントを残す

必須欄は * がついています