AWS

AWS Secrets Manager란?(OAuth, SSO)

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

Overview

AWS Secrets Manager에 대해서 공부해보려고 한다.

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 함수 및 리소스 권한을 구성하면 중요한 정보가 정기적으로 업데이트되어 무단 액세스의 위험을 줄이고 애플리케이션 및 인프라의 전반적인 보안을 향상시킬 수 있다.

 

 

 

 


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