μΈν 리μ μ΄ AWS Toolkit μ μ격 μ¦λͺ
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 μ΅μ μ κ·Έλλ‘ μ¬μ©νκ³ μ μ¬μ λ¨Ήκ³ λ νμλ μΈμ¦ μ€ν¨ μ€λ₯λ 무μνκ³ κ·Έλ₯ μ ν리μΌμ΄μ μ λ€μ μ€ννκΈ°λ‘ νμ΅λλ€.