isPowerfulBlog

[AWS] Secrets manager로 AWS 리소스 접근하기, AWS CLI 본문

Infra

[AWS] Secrets manager로 AWS 리소스 접근하기, AWS CLI

왕밤빵도라에몽 2024. 3. 27. 23:51

1. AWS CLI 용 액세스 키 생성

사용자 > 보안자격증명 > 액세스 키 > 액세스 키 만들기
에서 AWS CLI용 액세스 키를 생성한다.

image

  • 다양한 옵션이 있다. 나는 로컬 코드용 Access key를 이전에 발급 받아두었는데, 이걸 코드에서 사용하기 위해서 AWS CLI용 액세스 키를 또 발급 받는거다!
  • 나중에 ec2 배포할 때에는 AWS 컴퓨팅 서비스에서 실행되는 애플리케이션 옵션으로 발급 다시 받아야겠다.

2. AWS CLI 설치

CLI에서 aws리소스에 접근할 수 있도록 하기 위해서 아래 방법으로 AWS CLI를 설치한다.
AWS CLI 설치

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install

3. AWS CLI 설정

cli에서 액세스 권한 설정을 위해 다음과 같은 config 설정을 해준다.

$ aws configure

AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: 
Default output format [None]:
  • AWS Access Key ID랑 AWS Secret Access Key는 아까 발급 받은 CLI용 Key를 입력하면 된다.
  • output format은 안 적어도 된다
$cat ~/.aws/credentials

[default]
aws_access_key_id = A.................
aws_secret_access_key = r......................
  • 입력 잘 했나 체크하고,
$ aws sts get-caller-identity

{
    "UserId": "A.................",
    "Account": "0...............",
    "Arn": "arn:aws:iam::.........:user/user_name"
}
  • account 연결이 잘 되었나 체크한다.

이제 시크릿 매니저 사용할 준비는 완료!

4. AWS Secrets Manager 새 보안암호 생성

로컬 API키 저장 옵션으로 선택하고,
이전에 발급받았던 로컬코드용 AWS ACCESS KEY를 입력한다.

image

이후 이름 설정 외에 별다른 옵션없이 생성해주면 된다.

5. 코드에 연결

생성 제일 마지막 페이지에서 아래처럼 샘플 코드를 제공해준다. 정말 그대로 복사해서 붙여넣기 하면된다.!!

image

나는 아래처럼 리턴해주는 부분만 추가해서 사용했다.

def get_aws_access_key():

    secret_name = "..."
    region_name = "..."

    # Create a Secrets Manager client
    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=region_name
    )

    try:
        get_secret_value_response = client.get_secret_value(
            SecretId=secret_name
        )
    except ClientError as e:
        raise e

    secret = get_secret_value_response['SecretString']
    return secret

비고

이전에 팀원들과 front, back, ml integration test를 진행할 때, 각자 api key를 저장해놓은 env파일을 주고받아야했던 귀찮음이 있었다. (깃허브에서 공유할 수가 없으니ㅠㅠ)
파트별로 개발 언어가 다르다보니 저장 형태도 제각각이었다.
이거 참 귀찮고 문제다 싶어서 찾은 대안이 시크릿 매니저였다.

내가 느낀 시크릿매니저 장점

  • 모든 security key값을 한 곳에서 관리할 수 있다.
  • 개발 언어와 프레임워크가 모두 달라도 security key값 사용 방식 만큼은 통일이 가능하다.
  • integration test를 위해서 security key들을 따로 주고 받을 필요가 없다!
  • 보안 이슈가 없어진 env파일들은 이제 github에서 공유도 가능해졌다.
  • 정말 정말 편하다