application.yml에서 AWS 환경변수를 지워도 동작하는 이유
728x90
반응형

 

들어가기 앞서 개발 환경을 간단하게 나열해본다.

  • Spring boot 3 + Kotlin
  • Gradle
  • 사용하는 AWS 서비스 정보는 아래 내용을 참고할 것

 

아래와 같은 질문을 받은 적이 있다. 

이 정보가 있다가 사라졌는데... 없어도 잘 동작하는 이유(?)가 뭘까요?

붉은 색으로 표시된 부분을 제거했음에도 동작하였다. 어떻게 가능할까?

 

S3부터 SQS까지 여러 AWS 서비스를 사용하고 있음에도 위 정보가 없이 잘 동작했다. 불필요한 정보를 노출시키는 것보다 제거하는 것이 나을 것으로 판단해서 삭제를 했지만 삭제하면서도 어떻게 이게 동작하는지 궁금했다. 아래는 사용하고 있는 패키지 목록이다. Spring Cloud AWS를 사용하고 있는 것을 알 수 있다.

 

// build.gradle.kts
dependencyManagement {
    imports {
        mavenBom("io.awspring.cloud:spring-cloud-aws-dependencies:3.0.0")
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:2022.0.2")
    }
}
dependencies {
    implementation("io.awspring.cloud:spring-cloud-aws-starter-s3")
    implementation("io.awspring.cloud:spring-cloud-aws-sqs")
    implementation("io.awspring.cloud:spring-cloud-aws-autoconfigure")
}

 

이유는 간단하다. CLI 자격 증명 파일이 존재하기 때문이다. AWS CLI를 설치하면 aws configure 명령어로 AWS Access Key ID와 AWS Secret Access Key를 포함하여 여러 정보를 입력할 수 있다. 이 정보는 credentials 파일(CLI 자격 증명 파일)에 저장된다.

 

$ cat ~/.aws/credentials
[default]
aws_access_key_id = <위에서 발급한 Key id>
aws_secret_access_key = <위에서 발급한 Secret Access Key>

 

만약 이 자격 증명 파일이 없으면 어떻게 될까? 아래와 같은 오류 메세지를 확인할 수 있다. 내용을 읽어보면 credentials 파일을 불러오는 과정에서 에러가 나타난 것을 알 수 있다.

 

Caused by: software.amazon.awssdk.core.exception.SdkClientException: Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain(...생략...) : [...생략...]

 

 

추가 : 2023.10.04

credentials을 입력해도 제대로 동작하지 않을 수 있다. 이럴 때 config 파일에 region을 입력하는 등의 조치를 취해보자. (참고)

$ cat ~/.aws/config
[default]
region = ap-northeast-2

 

 

참고자료
- AWS의 accessKey, secretAccessKey를 안전하게 관리하기

.

728x90
반응형