AWS

AWS Secrets Manager란?(OAuth, SSO)

Somaz 2023. 4. 1. 20:00
728x90
반응형

Overview

 

AWS Secrets Manager는 AWS에서 제공하는 보안 자격 증명 및 비밀 관리 서비스로,
애플리케이션, 데이터베이스, API 키, SSH 키 등 민감한 정보를 안전하게 저장하고 관리할 수 있도록 도와준다.

 

기존에는 애플리케이션 내에서 환경 변수 또는 구성 파일을 사용하여 자격 증명을 관리하는 경우가 많았으나,
이 방식은 보안 위험이 크고 유지 관리가 어려운 단점이 있다.

 


AWS Secrets Manager는 이를 해결하기 위해 IAM 기반의 세부적인 접근 제어, 자동 교체(Rotation), AWS 서비스와의 통합 등을 지원한다.

 

 

https://www.slideshare.net/AmazonWebServices/aws-secrets-manager

 

 

 

 

 


 

AWS Secrets Manager란?

AWS Secrets Manager는 AWS(Amazon Web Services)에서 제공하는 비밀 관리 서비스로, 자체 인프라 운영에 대한 선행 투자 및 지속적인 유지 관리 비용 없이 애플리케이션, 서비스 및 IT 리소스에 대한 액세스를 보호할 수 있다.

 

Secrets Manager는 데이터베이스 자격 증명, 온프레미스 리소스 자격 증명, SaaS 애플리케이션 암호 및 SSH(Secure Shell) 키와 같은 중요한 정보를 관리하고 보호하는 데 도움이 된다.

 

 

 


 

 

 

 

 

AWS Secrets Manager의 주요 기능

 

비밀 보안 및 관리

Secrets Manager를 사용하면 비밀을 안전하게 저장, 교체 및 검색할 수 있다. 암호는 AWS Key Management Service(KMS)를 사용하여 암호화되므로 중요한 데이터가 보호된다.

 

세분화된 액세스 제어

세분화된 권한을 정의하여 AWS Identity and Access Management(IAM) 정책을 사용하여 특정 비밀에 액세스하거나 수정할 수 있는 사람을 제어할 수 있다. 이렇게 하면 승인된 사용자와 애플리케이션만 중요한 정보에 액세스할 수 있다.

 

자동화된 암호 교체

Secrets Manager는 암호 자동 교체를 지원하므로 정기적으로 액세스 자격 증명을 변경하여 강력한 보안 태세를 유지할 수 있다. 사용자 지정 교체 일정을 설정하고 AWS Lambda와 통합하여 사용자 지정 교체 기능을 생성할 수 있다.

 

감사 및 모니터링

Secrets Manager는 AWS CloudTrail과 통합되어 비밀에 대한 액세스를 모니터링하고 기록할 수 있다. 이를 통해 규정 준수를 유지하고 잠재적인 보안 위험을 식별할 수 있다.

 

다른 AWS 서비스와의 통합

Secrets Manager는 Amazon RDS, Amazon DocumentDB 및 Amazon Redshift와 같은 다른 AWS 서비스와 함께 사용하여 데이터베이스 자격 증명을 관리할 수 있다. 또한 Secrets Manager를 AWS CloudFormation 및 AWS Elastic Beanstalk와 함께 사용하여 애플리케이션 비밀을 관리할 수 있다.

 

교차 계정 액세스

Secrets Manager를 사용하면 여러 AWS 계정에서 암호를 공유할 수 있으므로 다중 계정 환경에서 공유 리소스에 대한 액세스를 보다 쉽게 ​​관리하고 유지할 수 있다.

 

프로그래밍 방식으로 암호에 액세스

애플리케이션 및 자동화 스크립트와의 통합을 간소화하는 AWS SDK, CLI 또는 API를 사용하여 프로그래밍 방식으로 암호에 액세스할 수 있다.

 

 

 

 


 

 

AWS Secret Manager CLI 

aws secretsmanager help

AVAILABLE COMMANDS
       o cancel-rotate-secret

       o create-secret

       o delete-resource-policy

       o delete-secret

       o describe-secret

       o get-random-password

       o get-resource-policy

       o get-secret-value

       o help

       o list-secret-version-ids

       o list-secrets

       o put-resource-policy

       o put-secret-value

       o remove-regions-from-replication

       o replicate-secret-to-regions

       o restore-secret

       o rotate-secret

       o stop-replication-to-replica

       o tag-resource

       o untag-resource

       o update-secret

       o update-secret-version-stage

       o validate-resource-policy

 

 

 

 

 


 

 

AWS Secret Manager 유형

AWS Secrets Manager를 사용하면 다양한 유형의 암호 값을 저장할 수 있다.

  1. 데이터베이스 자격 증명
  2. API 키
  3. OAuth 토큰
  4. SSH 키
  5. TLS/SSL 인증서 및 개인 키
  6. 일반 텍스트 또는 JSON 형식의 기타 민감한 정보

 

 

1. 데이터베이스 자격 증명

MySQL 데이터베이스에 대한 자격 증명을 저장하려는 경우 다음과 같이 JSON 형식으로 비밀 값을 생성할 수 있다.

{
  "username": "myDatabaseUser",
  "password": "mySecurePassword",
  "host": "myDatabaseHost",
  "port": 3306
}

 

 

2. API 키

 

Stripe과 같은 타사 서비스에 대한 API 키와 비밀 키가 있다고 가정한다. 다음과 같이 비밀 값으로 저장할 수 있다.

{
  "api_key": "sk_test_1234567890abcdef",
  "secret_key": "sh_test_1234567890abcdef"
}

 

 

3. OAuth 토큰

 

Google API와 같은 서비스에 대한 OAuth 액세스 토큰 및 갱신 토큰을 저장하려는 경우 비밀 값은 다음과 같다.

{
  "access_token": "ya29.1234567890abcdef",
  "refresh_token": "1/1234567890abcdef",
  "client_id": "myClientID.apps.googleusercontent.com",
  "client_secret": "myClientSecret"
}

 

 

4. SSH 키

 

SSH 개인 키를 안전하게 저장하기 위해 비밀 값을 일반 텍스트 또는 base64 인코딩 텍스트로 생성할 수 있다.

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAz0FzLw1bmK5OzYDhLTVlLQzPgh6T9T...
... (rest of the private key) ...
-----END RSA PRIVATE KEY-----

 

 

 

 

 


 

 

 

 

 

 

OAuth 토큰이란?

OAuth 토큰이 무엇일까? 한번 공부해보도록 하자.

 

OAuth(Open Authorization)는 애플리케이션이 사용자 암호를 공유하지 않고 타사 서비스의 사용자 계정에 대한 제한된 액세스 권한을 얻을 수 있도록 하는 개방형 표준 인증 프레임워크이다.

 

OAuth 토큰은 사용자를 대신하여 보호된 리소스에 대한 액세스 권한을 부여하기 위해 OAuth 공급자(예: Google, Facebook 또는 Twitter)에서 발급한 자격 증명이다.

 

 

 

 

OAuth 토큰 두 가지 주요 유형

 

  • 액세스 토큰(Access token)
    • 액세스 토큰은 사용자가 애플리케이션에 부여한 권한을 나타내는 단기 자격 증명이다.
    • 액세스 토큰은 애플리케이션에서 타사 서비스의 사용자 리소스에 액세스하는 데 사용된다. 그리고 만료 시간이 있으며 그 후에는 더 이상 유효하지 않으며 새로 고쳐야 한다.

 

  • 새로 고침 토큰(Refresh token)
    • 새로 고침 토큰은 수명이 긴 자격 증명으로 만료 시 새 액세스 토큰을 얻는 데 사용할 수 있다.
    • 새로 고침 토큰은 일반적으로 사용자가 자주 재인증할 필요 없이 사용자 리소스에 대한 액세스를 유지하기 위해 애플리케이션에서 사용된다.

 

 

 

OAuth 인증과정

https://openapi.shinhan.com/dev-guide

  1. 사용자는 "로그인" 버튼 또는 응용 프로그램의 유사한 메커니즘을 클릭하여 프로세스를 시작한다.
  2. 애플리케이션이 사용자를 OAuth 공급자의 인증 페이지로 리디렉션한다. 여기에서 특정 리소스(예: 프로필 데이터, 이메일 또는 사진)에 대한 애플리케이션 액세스 권한을 부여하라는 메시지가 사용자에게 표시된다.
  3. 사용자가 요청한 권한을 부여하면 OAuth 공급자는 애플리케이션에 인증 코드를 발급한다.
  4. 애플리케이션은 OAuth 공급자의 토큰 끝점에 서버 간 요청을 만들어 액세스 토큰 및 선택적으로 새로 고침 토큰에 대한 인증 코드를 교환한다.
  5. 이제 애플리케이션은 액세스 토큰을 사용하여 부여된 권한 범위 내에서 타사 서비스의 사용자 리소스에 액세스할 수 있다.

 

 

OAuth 토큰을 사용하여 애플리케이션은 사용자 암호를 직접 처리하지 않고도 사용자 데이터에 안전하게 액세스할 수 있으므로 무단 액세스 위험이 줄어들고 시스템의 전반적인 보안이 향상된다.

 

쉽게 말하자면, 우리가 특정 쇼핑몰 또는 카카오, 네이버, 페이스북, 구글, 트위터와 같은 인기 서비스의 기존 계정을 사용하여 웹사이트나 애플리케이션에 로그인하거나 가입하는 과정을 단순화하는 데 자주 사용된다.

이를 "소셜 로그인" 또는 "단일 사인온(SSO)"이라고도 한다.

 

OAuth 토큰을 사용하여 SSO(Single Sign-On) 기능을 구현할 수 있다. SSO는 사용자가 단일 로그인 자격 증명 세트로 여러 애플리케이션 또는 서비스에 액세스할 수 있도록 하는 사용자 인증 프로세스이다.

 

OAuth는 토큰을 활용하여 사용자를 인증하고 다양한 서비스 또는 애플리케이션에 대한 액세스 권한을 부여함으로써 SSO를 활성화하는 데 사용되는 널리 사용되는 프로토콜 중 하나이다.

 

OAuth는 일반적으로 SSO에 사용되지만 이 목적을 위한 유일한 프로토콜은 아니다.

SAML(Security Assertion Markup Language) 및 OpenID Connect(OAuth 2.0의 확장)와 같은 다른 인증 및 권한 부여 프로토콜도 SSO를 구현하는 데 사용할 수 있다.

 

 

 

 

 


 

 

 

 

 

SSO(Single Sign-On)란?

https://aws.amazon.com/ko/what-is/sso/

 

 

SSO에 대해서도 간단히 공부해보자.

 

SSO(Single Sign-On)는 사용자가 단일 로그인 자격 증명 세트로 여러 애플리케이션 또는 서비스에 액세스할 수 있도록 하는 인증 프로세스이다.

 

SSO의 주요 목표는 서로 다른 서비스에 대해 여러 사용자 이름과 암호를 기억하고 관리할 필요성을 줄여 사용자 경험을 단순화하고 능률화하는 것이다.

 

SSO는 중앙 ID 공급자(IdP)로 사용자를 인증하는 방식으로 작동한다. 그런 다음 연결된 다양한 애플리케이션 또는 서비스에 액세스하는 데 사용할 수 있는 토큰 또는 어센셜을 발급한다.

 

사용자가 하나의 애플리케이션에 로그인하면 SSO 메커니즘이 인증 상태를 다른 애플리케이션과 공유하므로 사용자가 다시 로그인하지 않고도 액세스할 수 있다.

 

일반적인 SSO 프로토콜 및 기술에는 OAuth, OpenID Connect 및 SAML(Security Assertion Markup Language)이 포함된다.

 

 

 

 

SSO 프로세스

  1. 사용자가 애플리케이션에 로그인하면 앱은 SSO 토큰을 생성하고 인증 요청을 SSO 서비스로 보낸다. 
  2. 이 서비스는 사용자가 이전에 시스템에서 인증되었는지 확인한다. 인증된 경우, 애플리케이션에 인증 확인 응답을 전송하여 사용자에게 액세스 권한을 부여한다. 
  3. 사용자에게 유효한 보안 인증 정보가 없는 경우 SSO 서비스는 사용자를 중앙 로그인 시스템으로 리디렉션하고 사용자에게 사용자 이름과 암호를 제출하라는 메시지를 표시한다.
  4. 사용자가 정보를 제출하면 이 서비스는 사용자 보안 인증 정보를 확인하고 긍정적인 응답을 애플리케이션으로 보낸다. 
  5. 그렇지 않으면 오류 메시지가 표시되고 보안 인증 정보를 다시 입력해야 한다. 로그인 시도가 여러 번 실패하면 서비스에서 사용자가 일정 기간 동안 더 이상 시도하지 못하도록 차단할 수 있다. 

 

 

 

 


 

 

 

AWS Secret Manager 교체 구성(Rotation Configuration)과 리소스 권한(Resource Permissions)이란?

AWS Secrets Manager는 암호를 자동으로 교체하는 내장 기능을 제공하여 액세스 자격 증명과 같은 중요한 정보를 정기적으로 변경하여 강력한 보안 상태를 유지하는 데 도움이 된다. 교체 구성 및 리소스 권한은 암호 교체를 설정하고 관리하는 데 중요한 역할을 한다.

 

 

교체 구성(Rotation Configuration)

 

교체 빈도(Rotation frequency)

보안 암호가 교체되는 빈도를 결정하는 암호 교체 빈도를 구성할 수 있다. 최소 1일, 최대 제한 없이 사용자 지정 일수로 설정할 수 있습니다. 일반적인 관행은 비밀을 30일 또는 90일마다 교체하는 것이다.

 

교체 Lambda 함수(Rotation Lambda function)

실제 교체를 수행하려면 새 비밀 값을 생성하고 연결된 리소스를 업데이트(ex: 데이터베이스 자격 증명 업데이트)하기 위한 논리가 포함된 AWS Lambda 함수를 생성해야 한다.

Secrets Manager는 Amazon RDS, Amazon DocumentDB 및 Amazon Redshift와 같은 일부 AWS 서비스에 대해 사전 구축된 Lambda 함수를 제공한다. 특정 사용 사례에 대한 사용자 지정 Lambda 함수를 생성할 수도 있다.

 

교체 트리거(Rotation Trigger)

교체 기한이 되면 Secrets Manager는 구성된 Lambda 함수를 자동으로 호출하여 암호 ARN, 버전 및 기타 메타데이터와 같은 암호에 대한 필수 정보를 전달한다.

 

 

 

리소스 권한(Resource Permissions)

 

Secrets Manager 권한

교체를 활성화하려면 Lambda 함수를 호출하고 암호를 업데이트하는 데 필요한 권한을 Secrets Manager에 부여해야 한다. 이는 필요한 정책이 포함된 AWS Identity and Access Management(IAM) 역할을 생성하고 이를 Lambda 함수와 연결하여 수행할 수 있다.

 

Lambda 함수 권한

Lambda 함수에는 암호와 연결된 리소스에 액세스하고 수정할 수 있는 권한이 필요하다(예: 자격 증명을 업데이트할 수 있는 데이터베이스 권한). 이는 필요한 정책이 있는 IAM 역할을 Lambda 함수에 연결하여 달성할 수 있다.

 

애플리케이션 권한

비밀에 액세스하는 애플리케이션 및 서비스에는 비밀 값을 읽는 데 필요한 권한이 있어야 한다. IAM 정책을 사용하여 특정 사용자, 역할 또는 서비스에 세분화된 액세스 제어를 부여할 수 있다.

 

 

 

마지막으로 AWS Secrets Manager 교체 구성 및 리소스 권한은 자동 암호 교체를 설정하는 데 필수적이다.

교체 빈도, Lambda 함수 및 리소스 권한을 구성하면 중요한 정보가 정기적으로 업데이트되어 무단 액세스의 위험을 줄이고 애플리케이션 및 인프라의 전반적인 보안을 향상시킬 수 있다.

 

 

 

 

 


 
 
 
 

AWS Secrets Manager와 Parameter Store 차이점

AWS에는 Secrets Manager 외에도 AWS Systems Manager Parameter Store 라는 비슷한 서비스가 있다. 두 서비스의 차이점을 명확히 이해하면, 언제 어떤 서비스를 사용해야 할지 판단하는 데 도움이 된다.

  
Feature AWS Secrets Manager AWS Systems Manager Parameter Store
주요 목적 보안이 필요한 비밀번호, API 키, 인증 정보 관리 애플리케이션 설정값, 구성 매개변수 저장
자동 교체 지원 ✅ (Lambda 함수 활용) ❌ (직접 갱신 필요)
IAM 기반 세분화된 액세스
암호화 방식 AWS KMS (기본 적용) 선택적 AWS KMS 적용 가능
버전 관리 ✅ (버전 별 조회 가능) ✅ (기본적으로 지원)
요금 유료 (저장된 개수 & API 호출 횟수 기반) 무료(기본), 고급 기능은 유료
사용 사례 DB 자격 증명, API 키, OAuth 토큰 애플리케이션 설정값, 일반 환경 변수

 

 

언제 AWS Secrets Manager를 사용해야 할까?

  • 자동 비밀번호 교체가 필요한 경우 (DB 인증 정보, OAuth 토큰)
  • 암호화된 보안 정보 저장이 필요한 경우 (AWS KMS 자동 암호화)
  • IAM 권한을 기반으로 특정 애플리케이션만 접근하도록 제어하고 싶은 경우

 

 

언제 Parameter Store를 사용해야 할까?

  • 일반적인 환경 변수나 애플리케이션 설정값을 관리할 때
  • Secrets Manager 비용이 부담될 때
  • 자동화된 비밀번호 교체가 필요하지 않은 경우
 
 
 
 
 

 

 

 

 

 

 

 

AWS Secrets Manager를 안전하게 활용하는 Best Practices

AWS Secrets Manager를 사용할 때, 보안성을 강화하기 위해 다음과 같은 Best Practices를 적용하는 것이 좋다.

 

 

1) 최소 권한 원칙 적용 (Least Privilege)

  • IAM 정책에서 특정 애플리케이션 또는 역할에 필요한 비밀만 접근할 수 있도록 제한
  • secretsmanager:GetSecretValue 권한을 최소한의 사용자/서비스에만 부여
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:MyDatabaseSecret-*"
    }
  ]
}

 

 

2) 비밀 자동 교체(Rotation) 활성화

  • 정기적으로 비밀번호를 교체하고, 만료된 자격 증명을 자동 업데이트
  • Amazon RDS 및 기타 서비스와의 자동 교체 기능을 활용하여 보안 유지
aws secretsmanager rotate-secret --secret-id MyDatabaseSecret

  • AWS Lambda를 활용한 비밀번호 교체 자동화
    • AWS Secrets Manager는 RDS, DocumentDB, Redshift 와 통합된 자동 교체 기능을 제공
    • 다른 서비스의 경우 AWS Lambda를 사용하여 커스텀 로직을 추가 가능

 

3) AWS KMS 키 별도로 관리

  • AWS Secrets Manager의 비밀번호는 기본적으로 AWS 관리 KMS 키로 암호화됨
  • 중요한 보안 정보라면 별도의 고객 관리형 KMS 키(CMK)를 사용하여 보안 강화
aws secretsmanager create-secret --name MySecureKey \\
    --kms-key-id arn:aws:kms:us-east-1:123456789012:key/my-custom-key-id

 
 
 

4) Secrets Manager 로그 및 모니터링 활성화

  • AWS CloudTrail 을 통해 누가 어떤 비밀에 접근했는지 기록
  • AWS CloudWatch Logs 를 설정하여 비정상적인 접근 감지
aws logs create-log-group --log-group-name /aws/secretsmanager
aws logs put-retention-policy --log-group-name /aws/secretsmanager --retention-in-days 90

 

 

 

 

 

 


 

 

 

 

 

AWS Secrets Manager 활용 예제 (실전 적용)

실무에서 AWS Secrets Manager를 활용하는 방법을 예제로 정리해보자.

 

1) AWS Secrets Manager에서 비밀번호 가져오기 (AWS SDK 활용)

import boto3
import json

def get_secret():
    client = boto3.client('secretsmanager', region_name="us-east-1")

    response = client.get_secret_value(SecretId="MyDatabaseSecret")

    secret = json.loads(response['SecretString'])

    return secret['username'], secret['password']

username, password = get_secret()
print(f"DB Username: {username}, Password: {password}")

  • Python boto3 라이브러리를 사용하여 AWS Secrets Manager의 비밀을 조회하는 예제
  • SecretId 를 사용하여 저장된 JSON 형식의 비밀번호를 가져오고, 필요한 값을 추출

 

 

2) AWS Lambda에서 자동 비밀번호 교체 구현 (RDS)

AWS Lambda를 사용하여 RDS 데이터베이스 비밀번호를 자동으로 교체하는 예제다.

import boto3
import json

def lambda_handler(event, context):
    client = boto3.client('secretsmanager')
    secret_id = "MyDatabaseSecret"

    # 새로운 비밀번호 생성
    new_password = "NewSecureP@ssw0rd"

    # 비밀번호 업데이트
    client.put_secret_value(SecretId=secret_id, SecretString=json.dumps({"password": new_password}))

    print(f"Updated password for {secret_id}")

  • Lambda 함수를 사용하여 Secrets Manager의 비밀번호를 주기적으로 변경
  • AWS Lambda 트리거를 설정하여 30일마다 자동 실행 가능

 

 

 


 

 

 

 

Kubernetes External Secrets Manager(ESM)에서 비밀번호 가져오기

Kubernetes 환경에서는 External Secrets Manager (ESM) 을 사용하여 AWS Secrets Manager의 비밀을 가져올 수 있다.

 

 

1. External Secrets Manager 설치 (Helm 사용)

helm repo add external-secrets https://charts.external-secrets.io
helm install external-secrets external-secrets/external-secrets

 

 

 

2. AWS IAM 권한 설정

External Secrets가 AWS Secrets Manager에서 비밀을 가져오려면 IAM Role을 설정해야 한다.

  • AWS에서 IAM 역할을 생성
  • 다음 정책을 추가
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:MyDatabaseSecret-*"
    }
  ]
}

 

EKS의 Service Account에 해당 IAM 역할을 연결

eksctl create iamserviceaccount \\
  --name external-secrets-sa \\
  --namespace default \\
  --cluster my-cluster \\
  --attach-policy-arn arn:aws:iam::123456789012:policy/ExternalSecretsPolicy \\
  --approve

 

 

 

3. Kubernetes SecretStore 생성

SecretStore를 생성하여 AWS Secrets Manager와 연결해야 한다.

apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
  name: aws-secrets
  namespace: default
spec:
  provider:
    aws:
      service: SecretsManager
      region: us-east-1
      auth:
        jwt:
          serviceAccountRef:
            name: external-secrets-sa

 

 

✅ 설명

  • provider.aws.service: SecretsManager → AWS Secrets Manager와 연결
  • region: us-east-1 → AWS 리전 설정
  • serviceAccountRef: external-secrets-sa → IAM 역할과 연결된 서비스 계정 사용

 

 

 

4. ExternalSecret 리소스 생성

Kubernetes에서 ExternalSecret을 생성하여 AWS Secrets Manager의 비밀번호를 Kubernetes Secret으로 저장하는 과정이다.

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: my-database-secret
  namespace: default
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: aws-secrets
    kind: SecretStore
  target:
    name: my-db-secret
    creationPolicy: Owner
  data:
  - secretKey: username
    remoteRef:
      key: MyDatabaseSecret
      property: username
  - secretKey: password
    remoteRef:
      key: MyDatabaseSecret
      property: password

 

 

설명

  • refreshInterval: 1h → 1시간마다 AWS Secrets Manager에서 업데이트된 값을 가져옴
  • secretStoreRef.name: aws-secrets → 위에서 생성한 SecretStore를 사용
  • target.name: my-db-secret → Kubernetes에서 생성할 Secret의 이름
  • remoteRef.key: MyDatabaseSecret → AWS Secrets Manager에서 가져올 비밀의 Key
  • remoteRef.property: username/password → 가져올 속성 지정

 

 

5. Kubernetes Pod에서 Secret 사용

이제 my-db-secret 을 Pod에서 환경 변수로 사용할 수 있다.

yaml
복사편집
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app-image
        env:
        - name: DB_USERNAME
          valueFrom:
            secretKeyRef:
              name: my-db-secret
              key: username
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-db-secret
              key: password

 

 

설명

  • env.valueFrom.secretKeyRef 를 사용하여 my-db-secret 에서 값 가져오기
  • DB_USERNAMEmy-db-secret 에서 username 값 로드
  • DB_PASSWORDmy-db-secret 에서 password 값 로드

 

 

 

 


 

 

 

 

 

 

마무리

AWS Secrets Manager는 애플리케이션 및 인프라에서 중요한 자격 증명을 안전하게 관리하는 필수 서비스다.
IAM 정책과 KMS 암호화를 적용하여 보안을 강화하고, 자동 교체(Rotation) 기능을 활용하면 자격 증명을 안전하게 유지할 수 있다.


또한, Kubernetes 환경에서는 External Secrets Manager(ESM)과 연동하여 AWS Secrets Manager를 효과적으로 활용할 수 있다.

 

  • AWS Secrets Manager의 기능 및 활용 방법
  • AWS CLI 및 SDK를 이용한 자격 증명 조회 및 관리
  • AWS Secrets Manager vs Parameter Store 차이점
  • OAuth 토큰과 SSO 개념 및 인증 방식
  • Kubernetes 환경에서 External Secrets Manager(ESM) 활용법
  • Lambda를 활용한 비밀번호 자동 갱신(Rotation)

 

 

 

 

 

 

 


Reference

AWS Secrets Manager란 무엇인가요?

Oauth토큰이란?

신한은행 OpenAPI

SSO란?

 

728x90
반응형

'AWS' 카테고리의 다른 글

AWS VPC란?  (0) 2023.04.07
AWS Cloudfront란? / Canary 및 Blue-Green 배포  (0) 2023.04.03
AWS CLI 정리  (0) 2023.03.31
AWS IAM이란?  (0) 2023.03.30
AWS S3 권한이란?  (0) 2023.03.29