필자는 SpringBoot를 이용하여 application.properties에 들어가야할 민감한 정보인 API키, 데이터베이스 자격 증명, 등 해당 데이터를 AWS Secrets manager에 저장하여 lambda를 이용하여 데이터를 호출 하였다.
1. Secrets Manager에서 시크릿 생성
2. 다른 유형의 보안 암호를 클릭하여 키/값 구조인 JSON형태로 원하는 데이터를 저장
- 이후 임의로 보안 암호 이름을 입력해주고 다음을 누른다
- 교체는 건드리지 않고 다음을 누르고 검토부분에서 샘플코드를 복사한 후 저장 한다(이후에 해도 무관)
- 이 코드는 이후 람다 함수 코드에 사용할 예정이다.
- ARN을 복사해놓는다
3. AWS Lambda에서 함수를 생성한다
- 임의로 함수 이름을 설정하고 런타임에 자신이 사용할 언어를 선택하여 생성 버튼을 누른다
- 런타임에서 파이썬을 선택하면 aws 코드 소스에서 테스트가 가능하다
4. Secret Manager의 데이터를 람다 함수를 통해 호출
- Secrets Manager데이터를 불러오려면 읽기위한 권한을 설정해줘야 한다
- lambda함수의 구성 => 권한을 선택 후 역할 이름을 클릭하여 IAM으로 들어간다
- 권한추가를 눌러 인라인 정책 생성을 클릭한다
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:secretsmanager:region:account-id:secret:prod/dbCredentials"
}
]
}
- JSON을 클릭후 위의 코드를 복사하여 아래와 같이 붙혀넣기 후 아까 secret manager에서 복사한 ARN을 Resource부분에 넣어준다
- 임의로 정책이름을 정하고 정책 생성을 눌러준다
5. lambda함수로 secret manager 데이터 호출하기
- lambda_function.py에 있던 코드는 지우고 아까 람다 함수에서 사용한다고 했던 secret manager의 코드를 붙혀넣는다
- 필자는 아래의 코드와 같이 로그 및 오류 처리를 한 코드로 커스텀 하여 사용하였다( 이 코드를 복사 붙혀넣기해도 무관)
import boto3
import json
import logging
from botocore.exceptions import ClientError
# 로깅 설정
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def get_secret(event, context):
secret_name = "AWS_SpringBoot_key"
region_name = "ap-northeast-2"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
try:
# Secrets Manager에서 시크릿 가져오기
logger.info("Retrieving secret from Secrets Manager")
get_secret_value_response = client.get_secret_value(SecretId=secret_name)
secret = get_secret_value_response['SecretString']
# 시크릿 값을 JSON 형식으로 반환
logger.info("Secret retrieved successfully")
return {
'statusCode': 200,
'body': json.loads(secret)
}
except Exception as e:
# 오류 처리
logger.error(f"Error retrieving secret: {e}")
return {
'statusCode': 500,
'body': str(e)
}
- 이후 Test의 드롭박스를 클릭하여 configure 이벤트를 클릭하고 아래와 같이 임의로 이벤트 이름을 입력해주고 저장한다
- 마지막으로 런타임 설정에서 편집을 눌러 핸들러의 함수 이름을 바꿔준다
- 핸들러는 {파일명.함수이름} 으로 수정하여야지 코드가 제대로 실행이 된다
- deploy를 실행 하고 test를 할시에 아까 넣었던 secret manager의 값을 받아올 수 있게 된다
※ 환경 변수로 직접 데이터 설정하기
필자는 accessKey와 secretKey를 EC2 콘솔에 연결하여 환경변수로 직접 지정해주었다.
- Linux/MacOS
export 환경변수 키값=환경변수 벨류값
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
- window
setx AWS_ACCESS_KEY_ID "YOUR_ACCESS_KEY"
setx AWS_SECRET_ACCESS_KEY "YOUR_SECRET_KEY"
'AWS' 카테고리의 다른 글
AWS, Elastic Beanstalk에서 cloudFront이용한 https통신 (0) | 2024.08.23 |
---|---|
S3,cloudFront와 Router53연결하여 라우팅 지정하기 (0) | 2024.08.20 |
ACM ssl 도메인 인증서 발급 (0) | 2024.08.20 |
linux에 데이터베이스 mysql 및 redis 설치 및 연결 (0) | 2024.08.19 |
s3와cloudfront연동된 프로젝트 Github Action CICD 배포하기 (0) | 2024.01.15 |