🔐

SSH port forwarding しつつ IAM database authentication する方法

2023/06/02に公開

背景

自分の PC から好きなクライアントで VPC 内に隔離されている Aurora MySQL にアクセスしたいというニーズはあると思います。

自分でも調べてみたのですが SSH port forwarding しつつ IAM database authentication する方法、そのものをまとめている記事は見つけられなかったので、まとめておきます。

方法

IAM database authentication 自体の説明や設定方法は IAM database authentication - Amazon Aurora を参照してください。

  • local_port: ローカル PC 側で待ち受けるポート
  • db_host: gateway_host から Aurora MySQL にアクセスするときに使うホスト名。Aurora MySQL のエンドポイントでなく Route53 で設定したエイリアス等でも OK
  • remote_port: Aurora MySQL が待ち受けているポート。デフォルトなら 3306
  • login_user: gateway_host にログインするためのユーザー名
  • gateway_host: VPC 内にアクセス可能なホスト
  • mysql_user: AWSAuthenticationPlugin を使用可能に設定してある Aurora MySQL のユーザー
  • ca_file: SSL の証明書バンドル。Connecting to your DB cluster using IAM authentication from the command line: AWS CLI and mysql client - Amazon Aurora を参照
ssh -fNL ${local_port}:${db_host}:${remote_port} ${login_user}@${gateway_host}
pid=$(pgrep -f ${local_port})
mysql --protocol tcp -u ${mysql_user} -h localhost -P ${local_port} --ssl-ca=${ca_file} \
  -p$(aws rds generate-db-auth-token --hostname ${rds_endpoint} --port 3306 --username ${mysql_user})
kill ${pid}

どこで生成したトークンでも使えるというのがポイントだと思います。
ちなみに Aurora MySQL のエンドポイントは writer のものでも reader のものでも認証することができました。

Discussion