AWS Toolkit에 μ˜ν•œ 자격 증λͺ…에 λŒ€ν•΄ aws-toolkit-jetbrains의 #5428 이슈 λŒ“κΈ€λ‘œ 남겨놓은 뢀뢄에 λŒ€ν•΄ μ •λ¦¬ν•œ κ²ƒμž…λ‹ˆλ‹€.

μ§€λ‚œ AWS JDBC Wrapper λ””λ²„κ·Έν•˜κΈ°μ— μ–ΈκΈ‰λœ 점심 μ‹œκ°„ 이후에 잠자기 μƒνƒœμ—μ„œ λ²—μ–΄λ‚˜λ©΄μ„œ IAM 인증이 μ‹€νŒ¨ν•˜λŠ” μƒνƒœμ— λŒ€ν•œ 원인을 μ•Œκ²Œλ˜μ—ˆλŠ”λ°μš”. 결둠을 λ¨Όμ € λ§ν•΄λ³΄μžλ©΄ AWS Toolkit ν”ŒλŸ¬κ·ΈμΈμ—μ„œλŠ” AWS_PROFILE ν™˜κ²½ λ³€μˆ˜κ°€ μ•„λ‹Œ AWS_SESSION_TOKEN ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•œλ‹€λŠ” 것 μž…λ‹ˆλ‹€. 버그가 μ•„λ‹ˆλΌ AWS 곡식 λ¬Έμ„œ λ˜λŠ” ν”ŒλŸ¬κ·ΈμΈ μ„€μ •μ—μ„œλ„ 상세 λ‚΄μš©μ΄ κΈ°μž¬λ˜μ–΄μžˆμ§€ μ•Šμ€ 자격 증λͺ…을 μ„€μ •ν•˜λŠ” λ°©μ‹μ˜ 차이둜 μΈν•œ μ¦μƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

λ¨Όμ €, AWS JDBC Wrapper의 IAM Authentication Plugin은 IAM 기반 인증을 μœ„ν•΄ 자격 증λͺ…을 λ°œκΈ‰ν•˜λŠ” κ³Όμ •μ—μ„œ κΈ°λ³Έ 자격증λͺ… ν”„λ‘œλ°”μ΄λ” 체인을 μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€. κ·Έλž˜μ„œ 자격증λͺ…을 λΆˆλŸ¬μ˜€λŠ” μˆœμ„œμ— λ”°λΌμ„œ ProfileCredentialsProvider λ³΄λ‹€λŠ” EnvironmentVariableCredentialsProviderκ°€ λ¨Όμ € μ‚¬μš©λ˜κΈ° λ•Œλ¬Έμ— AWS_PROFILE λ³΄λ‹€λŠ” AWS_SESSION_TOKEN ν™˜κ²½ λ³€μˆ˜μ— μ˜ν•œ μž„μ‹œ 자격 증λͺ…을 μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€. μ €λŠ” AWS Toolkit ν”ŒλŸ¬κ·ΈμΈ μ„€λͺ…μ—μ„œ λ§ν•˜λŠ” ν™˜κ²½ λ³€μˆ˜κ°€ AWS_PROFILE 일 것이라고 μ˜€ν•΄ν•˜κ³  μžˆμ—ˆλŠ”λ° AWS Connection μ˜΅μ…˜μ„ μ‚¬μš©ν•  λ•Œ System.getEnv λ₯Ό ν˜ΈμΆœν•΄λ³΄λ‹ˆ AWS_PROFILE ν™˜κ²½ λ³€μˆ˜κ°€ μ•„λ‹Œ AWS_SESSION_TOKEN 이 μ§€μ •λœ 것을 확인할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ¬Όλ‘  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  λ•Œ AWS_PROFILE ν™˜κ²½ λ³€μˆ˜λ₯Ό μ§€μ •ν•˜μ§€ μ•Šκ³  AWS Toolkit의 AWS Connection μ˜΅μ…˜μ„ μ‚¬μš©ν–ˆμœΌλ―€λ‘œ AWS_SESSION_TOKEN ν™˜κ²½ λ³€μˆ˜λ‘œ 적용된 μƒνƒœμ˜€λ˜ κ²λ‹ˆλ‹€.

AWS Toolkit 자격증λͺ… 디버그

Error occurred while opening a connection: 'org.postgresql.util.PSQLException: FATAL: PAM authentication failed for user "iam_user"'
[cluster-endpoint]:5432/?DBUser=iam_user&Action=connect&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEPb*******&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250307T060442Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=******2WAAH%2F20250307%2Fap-northeast-2%2Frds-db%2Faws4_request&X-Amz-Signature=6d0f87518f4e6ed80dc857deb398984f66ba8922bcf150e32471dc4a6fc9679d

IamAuthConnectionPlugin의 둜그 λ ˆλ²¨μ„ TRACE둜 μ„€μ •ν•˜λ©΄ AWS Connection을 μ‚¬μš©ν•˜λŠ” 경우 μž„μ‹œ 자격증λͺ… 방식이기 λ•Œλ¬Έμ— IamAuthUtils.generateAuthenticationToken 호좜 결과둜 λ™μΌν•œ 토큰이 λ°˜ν™˜λ˜λŠ” 것을 둜그둜 확인할 수 있고 AWS_PROFILE ν™˜κ²½ λ³€μˆ˜ λ˜λŠ” default ν”„λ‘œνŒŒμΌμ„ μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” 맀번 μƒˆλ‘œμš΄ 토큰이 λ°˜ν™˜λ˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. AwsCredentialsManager.setCustomHandler ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ„œ AwsCredentialsProviderλ₯Ό λ³„λ„λ‘œ μ§€μ •ν• μˆ˜λ„ μžˆμ§€λ§Œ AWS Connection μ˜΅μ…˜ μ‚¬μš©μœΌλ‘œ μΈν•œ μ΄μŠˆμ—λŠ” 해결책이 되질 μ•ŠμŠ΅λ‹ˆλ‹€.

IAM Authentication ν”ŒλŸ¬κ·ΈμΈμ˜ iamExpiration νŒŒλΌλ―Έν„°

자격증λͺ… 문제λ₯Ό κ²€ν† ν•˜λŠ” κ³Όμ •μ—μ„œ iam ν”ŒλŸ¬κ·ΈμΈμ„ μ μš©ν•  λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” iamExpiration νŒŒλΌλ―Έν„°λ₯Ό 확인할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 그런데, 이 νŒŒλΌλ―Έν„°λŠ” IAM 자격 증λͺ…μ˜ 만료 μ‹œκ°„μ΄ μ•„λ‹ˆλΌ 토큰이 λ‚΄λΆ€μ μœΌλ‘œ μΊμ‹œλ˜λŠ” μ‹œκ°„μ— λŒ€ν•œ μ„€μ •μž„μ— μ£Όμ˜ν•΄μ•Όν•©λ‹ˆλ‹€. AWS JDBC Wrapper μ—μ„œ IAM ν”ŒλŸ¬κ·ΈμΈμ˜ λ™μž‘μ„ μ‚΄νŽ΄λ³΄λ©΄ 자격증λͺ… ν”„λ‘œλ°”μ΄λ”λ‘œλΆ€ν„° 전달받은 토큰을 SigV4 μš”μ²­ μ‹œ X-Amz-Security-Token 으둜 μ „λ‹¬ν•˜κ²Œ 되고 기본적으둜 IamAuthCacheHolder에 15λΆ„κ°„ μΊμ‹œλ˜λ„λ‘ μ„€μ •λ˜μ–΄ μž¬μ‚¬μš©λ˜λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬λ‘œμ„œλŠ” AWS Connection κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 경우 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ‹€μ‹œ μ‹€ν–‰ν•˜λŠ” λ™μž‘μ„ μˆ˜ν–‰ν•΄μ•Όλ§Œ ν•˜λŠ”λ° 둜컬 개발 μ‹œ 자주 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ‹€μ‹œ λΉŒλ“œν•˜κ±°λ‚˜ μž¬μ‹€ν–‰ν•˜λŠ” κ²½μš°κ°€ 많기 λ•Œλ¬Έμ— κ·Έλ ‡κ²Œ λΆˆνŽΈν•œ 뢀뢄은 μ•„λ‹ˆλΌκ³  μƒκ°λ˜μ–΄ AWS_PROFILE ν™˜κ²½ λ³€μˆ˜λ‘œ κΈ°λ³Έ ν”„λ‘œνŒŒμΌμ„ μ§€μ •ν•˜λŠ” λ°©λ²•μœΌλ‘œ λŒμ•„κ°€μ§€ μ•Šκ³  AWS Connection μ˜΅μ…˜μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κ³  점심을 λ¨Ήκ³  λ‚œ ν›„μ—λŠ” 인증 μ‹€νŒ¨ 였λ₯˜λŠ” λ¬΄μ‹œν•˜κ³  κ·Έλƒ₯ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ‹€μ‹œ μ‹€ν–‰ν•˜κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€.