AWS JDBC Wrapper๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ IAM ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์Šˆ์™€ ๋ฌธ์ œ๋“ค์„ ๊ฒฝํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ธ€์—์„œ ๋‹ค๋ฃจ๊ฒŒ ๋  ๋‚ด์šฉ์€ ํšŒ์‚ฌ ๋งฅ๋ถ์—์„œ ์—ฐ๊ฒฐ์ค‘์ด๋˜ JDBC ์ปค๋„ฅ์…˜์ด ์ ์‹ฌ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ์ž ์ž๊ธฐ ์ƒํƒœ์— ๋“ค์–ด๊ฐ„ ํ›„ ์˜คํ›„ ์—…๋ฌด๋ฅผ ์œ„ํ•ด ์ž ์ž๊ธฐ ์ƒํƒœ์—์„œ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ IAM ์ธ์ฆ์ด ์‹คํŒจํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๊ฒฝํ—˜ํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ์ด์™€ ๊ฐ™์ด DB ์—ฐ๊ฒฐ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ JDBC์— ๋Œ€ํ•œ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด HikariCP์™€ AWS JDBC Wrapper Driver์— ๋Œ€ํ•œ ๋กœ๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๊ฒ€ํ† ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FATAL: PAM authentication failed for user

๋จผ์ €, ์ ์‹ฌ์„ ๋จน๊ณ ๋‚˜์„œ ์ธํ…”๋ฆฌ์ œ์ด ์ฝ˜์†”์— ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ๊ฑด Aurora PostgreSQL์— ๋Œ€ํ•œ PAM Authentication ์ธ์ฆ์ด ์‹คํŒจํ–ˆ๋‹ค๋Š” ์˜ค๋ฅ˜ ๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค. AWS IAM Authentication Plugin์—์„œ๋Š” IAM ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์œ„ํ•ด Aurora PostgreSQL๋กœ SigV4 ์š”์ฒญ์„ ๋ณด๋‚ด์–ด IAM ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ(PAM ์ธ์ฆ)์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, RdsUtilities๋ฅผ ํ†ตํ•ด ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๋Š”๋ฐ ์ธ์ฆ ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ๋ฐœ๊ธ‰ํ•˜์—ฌ ์š”์ฒญํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ด์ง€๋งŒ ์ธํ…”๋ฆฌ์ œ์ด์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํฌ๋ฆฌํ‹ฐ์ปฌํ•œ ์ด์Šˆ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์™œ AWS ํ”„๋กœํŒŒ์ผ๋กœ ์ง€์ •๋œ IAM ์—ญํ• ๋กœ ์ธ์ฆ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ProfileCredentialProvider๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ํ…๋ฐ ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋˜ ๊ฒƒ์ด ์ž ์ž๊ธฐ ์ƒํƒœ๋กœ ์˜ค๋žซ๋™์•ˆ ์œ ์ง€๋˜์—ˆ์„๋•Œ๋Š” ์™œ ์ธ์ฆ์— ์‹คํŒจํ•˜๋Š” ๊ฑธ๊นŒ์š”?

HikariCP Configuration Logging

logging.level:
    com.zaxxer.hikari.HikariConfig: TRACE

์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ HikariCP ์„ค์ •๊ฐ’์„ ๋กœ๊ทธ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด com.zaxxer.hikari.HikariConfig ์— ๋Œ€ํ•œ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ DEBUG ์ด์ƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. IAM ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •๊ฐ’์„ ์ง€์ •ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์–ด๋–ป๊ฒŒ ์„ค์ •๋˜๊ณ  ์žˆ๋Š”์ง€๋„ ๊ฒ€ํ† ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, wrapperPlugins ์— iam ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง€์ •ํ•œ ๊ฒƒ ์ด์™ธ์—๋Š” ๋ณ„๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

AWS JDBC Wrapper Logging

logging.level:
  software.amazon.jdbc.Driver: trace
  software.amazon.jdbc.plugin.iam.IamAuthConnectionPlugin: trace

AWS JDBC Wrapper์— ๋Œ€ํ•œ ์ „์ฒด ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, software.amazon.jdbc ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ TRACE๋กœ ์„ค์ •ํ•˜๊ณ  ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์›ํ•˜๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋กœ๊ทธ ๋ ˆ๋ฒจ๋งŒ ์กฐ์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. software.amazon.jdbc.Driver ๋Š” AWS JDBC Wrapper๋ฅผ ํ†ตํ•ด JDBC ์—ฐ๊ฒฐ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋กœ๊ทธ๋กœ ์ถœ๋ ฅ๋˜๋ฉฐ IamAuthConnectionPlugin ๋Š” IAM ํ”„๋กœํŒŒ์ผ์— ๋Œ€ํ•œ ์ธ์ฆ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฐœ์ƒ์ค‘์ธ PAM ์ธ์ฆ ์‹คํŒจ์— ๋Œ€ํ•œ ์›์ธ์€ ๋ช…ํ™•ํ•˜๊ฒŒ ํŒŒ์•…์ด ๋˜์งˆ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. AWS CLI๋กœ ์ธ์ฆ ํ† ํฐ์„ ์ง์ ‘ ๋ฐœ๊ธ‰ํ•˜๊ณ  PSQL์„ ์‚ฌ์šฉํ•ด์„œ ์—ฐ๊ฒฐ ํ•ด๋ณผ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์–‘ํ•˜๊ฒŒ ๊ฒ€ํ† ํ•ด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ž ์ž๊ธฐ ์ƒํƒœ์—์„œ ๋ฒ—์–ด๋‚œ ๋งฅ๋ถ์—์„œ ๊ฒฝํ—˜ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ž ์ž๊ธฐ ์ƒํƒœ์™€๋Š” ์ƒ๊ด€์—†์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ„ํ—์ ์œผ๋กœ JDBC ์—ฐ๊ฒฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ฆ์ƒ๋„ ๊ฒฝํ—˜ํ–ˆ์—ˆ๋Š”๋ฐ ์ด๊ฒƒ์€ Wireguard์— ์˜ํ•œ ํด๋ผ์ด์–ธํŠธ ์ถฉ๋Œ ๋ฌธ์ œ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.