AWS 기술 블로그

지니뮤직의 다중 계정 관리 방안과 통합 데이터 관리 및 시각화 전략

지니뮤직은?

지니뮤직(geniemusic)은 음악을 사랑하는 사람들의 삶을 보다 더 행복하게 해준다는 비전을 가지고 있는 음악 스트리밍 서비스 기업입니다. 안정적인 음악사업을 기반으로 공연, AI콘텐츠창작, 도서영역으로 사업다각화를 추진해 외연확장을 통한 성장을 이뤄내고 있으며, 앞으로 AI음악플랫폼 genie의 경쟁력 강화, 커넥티드 환경에서 음악 사용성 증대, AI창작기반 융합콘텐츠사업 혁신을 다각적으로 추진해 기업성장을 이끌 것입니다.

배경

자사 개발팀에서 Amazon EKS migration을 위한 AWS EBA(Experience-Based Acceleration) 를 진행하면서 AWS 계정 내에서 사용되는 다양한 개발 서비스에 대한 권한 및 보안 설정에 제약 사항이 발생했고 이로 인해 진행에 어려움이 있었습니다. 권한 관리가 어려워지면서 일부 영역에서 Full Access 권한이 부여되는 상황이 발생하게 되었습니다.

이를 계기로 권한 체계를 강화해야 할 필요성을 느끼고 다양한 해결책을 모색하기 시작했습니다. 기존의 Amazon VPC 분리 환경을 벗어나 계정이 증가함에 따라 Multi-Account 환경에서 리소스를 효과적으로 관리하는 것이 어려운 과제였습니다. 각 계정 사용자에 대한 관리 부족으로 인한 보안 문제가 예상되기 때문입니다. 따라서 계정을 통합하고 강화된 권한 체계를 수립해야 했으며 추가적으로 Multi-Account들을 효과적으로 모니터링할 방법도 고려했습니다.

이 게시물에서는 Multi-Account 환경에서의 운영 및 관리를 위해 계정 인증을 통합하고 권한을 관리하는 과정을 자세히 설명할 것입니다. 또한, 이러한 작업을 시각적으로 모니터링하기 위한 해결책에 대해서도 다룰 예정입니다.

통합 계정

아키텍쳐 설계

계정 통합 및 권한 체계 확립을 위해 Architecture를 설계할 때 당사 환경에 맞는 AWS Control Tower 라는 기능을 고려했습니다. 다만 해당 기능으로 인해 일부 종속되는 항목들이 발생하여 확장이 가능한 구성을 채택했고 사용하면서 부족한 부분을 개선하기로 진행하기로 하였습니다.

[그림 1] 기존 AWS Multi Account Architecture

아래와 같이 기존 구성에서의 네 가지 이슈사항을 진단하였고 이를 토대로 저희가 구성하고자 하는 Architecture를 설계하였습니다.

이슈사항

구성하고자 했던 아키텍처를 설계할 때 아래와 같은 이슈가 있었습니다.

  1. 사용자 관리 : 다수의 계정으로 인하여, IAM 유저가 계정 별로 생성 또는 삭제 됨 (N개 IAM 유저)
  2. 권한 관리 : datalake 구조의 중앙화를 목표로 data는 쌓이지만, 직관성 있는 도구 필요
  3. 보안 체계 강화 : 계정이 늘어남에 따라, AWS 내 로그 성 데이터의 중앙화가 필요
  4. 거버넌스 방식의 고도화 : Data의 중앙화를 통한 거버넌스를 목표로 직관성 있는 도구 필요

이러한 이슈사항을 해결하기 위해 STS를 통한 권한 및 사용자관리, 로그 중앙화, Amazon QuickSight 등을 활용한 계정 구성 및 프로세스 Architecture를 아래와 같이 구성하였습니다.

계정 구성 및 프로세스

[그림 2] 신규 AWS Multi Account Architecture

1. 통합 로그인 account의 정책 구성

  • “통합 로그인 account” 계정에서 특정 IAM User가 IAM STS(Security Token Service)를 사용 할 수 있도록 역할 부여를 진행하여, 해당 역할에 접근 할 수 있도록 group 별 STS 역할을 분리 적용 하였습니다.

[그림 3] IAM User에 IAM STS 사용 권한 부여

  • 부여된 STS 역할을 통하여, 접근하려는 Service 계정의 id값과 계정 정책을 매칭 시켜서, 혹여나 잘못 전환되거나, 허가되지 않은 계정이 전환되는 상황을 사전에 방지 하였습니다.

추가로 MFA의 강제성을 위하여, 계정 별 역할 수임시에 MFA가 없다면 전환되지 않도록 추가 정책을 적용하였습니다.

  1. 통합 계정 구성 예시
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "InfraPolicy",
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Resource": [
            "arn:aws:iam::Account A:role/A-role",
            "arn:aws:iam::Account B:role/C-role",
            "arn:aws:iam::Account C:role/D-role",
            "arn:aws:iam::Account C:role/A-role"
          ]
        }
      ]
    }
  2. Service Account A 구성 예시
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::통합Account:root"
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "Bool": {
              "aws:MultiFactorAuthPresent": "true"
            }
          }
        }
      ]
    }
    

역할 전환을 하여 부여 받은 정책이 상시 권한이 되지 않고, 사용자들의 업무시간을 고려하여 최대 세션 시간을 4시간으로 지정하였습니다.

[그림 4] 역할 전환의 최대 세션 지속 시간을 4시간으로 설정

2. 보안 체계 강화

계정이 늘어남에 따라 Amazon CloudTrail 로그를 특정 계정(통합 로그인 account)에 중앙화하는 방식을 채택 하였고 통합 로그인 account가 아닌 향후 확장성을 고려 하여 Audit 계정을 추가 생성하였습니다.

Amazon Cloudtrail의 로그 중앙화를 위해, 추적 로깅 기능을 활용하여, Audit용 계정의 Amazon S3에 모든 계정의 로그를 쌓기 시작하였습니다.

[그림 5-1] 추적 로깅 활성화

[그림 5-2] Account 별 추적 로깅을 Audit 계정에 중앙화

3. 로그 중앙화를 통한 활용 방안 검토

통합 로그인 account를 통하여 일부 문제를 해소하고 완료가 되어 감에 따라 중앙화를 통한 시각화 방법을 모색했습니다. 결과적으로 한눈에 볼 수 있는 고유한 BI(Business Intelligence) 도구 또는 대시보드의 필요성을 느끼게 되었습니다.

Amazon Quicksight를 활용한 Observabillity

다수의 서비스를 체계적으로 관리하기 위해 서비스 단위로 계정을 분리하여 사용하고 있습니다. 그러나 리소스들이 분산되어 있어 관리가 어렵고 계정들의 업데이트되는 리소스를 실시간으로 파악하는 것은 쉽지 않은 일입니다. 이러한 문제점들을 개선하기 위해 AWS의 다양한 서비스를 활용하여 계정 단위로 분산되어 있는 리소스들을 효율적으로 수집, 가공 및 시각화하여 관리할 수 있습니다. 이를 통해 리소스 관리의 어려움을 극복하고 실시간으로 업데이트되는 리소스를 파악하며 보다 효율적인 의사 결정을 할 수 있게 됩니다.

Amazon Quicksight 시각화를 위한 활용 서비스

AWS Config

각 계정의 리소스 구성 상태를 모니터링하고 관리할 수 있습니다. AWS Config는 리소스의 구성 변경 사항을 추적하고, 규정 준수를 검사하며, 구성 변경 내역을 기록합니다. 이를 통해 리소스의 변경 사항을 실시간으로 감지하고, 문제가 발생할 가능성이 있는 구성 오류를 사전에 예방할 수 있습니다.

Amazon S3

계정별로 분산되어 있는 데이터를 중앙 집중화하여 저장할 수 있습니다. 이를 통해 데이터의 일관성과 가용성을 유지하면서 필요한 경우에는 데이터를 쿼리하여 검색할 수 있습니다. Amazon S3의 내구성이 높고 안전한 객체 스토리지 기능을 활용하여 데이터를 보호할 수 있습니다.

Amazon Athena

서버 없이 대화식 쿼리 서비스를 제공하여 S3에 저장된 데이터를 쿼리하고, SQL을 사용하여 데이터를 분석할 수 있습니다. 복잡한 데이터 파이프라인을 구축하지 않고도 데이터에 대한 직접적인 분석을 수행할 수 있습니다.

Amazon QuickSight

데이터를 시각화하고 대시보드 및 보고서를 생성할 수 있습니다. Amazon QuickSight는 BI 및 시각화 도구로써 데이터를 직관적으로 분석하고 리소스에 대한 가시성을 높일 수 있습니다. 다양한 데이터 소스와의 연동과 협업 기능을 제공하여 효율적인 데이터 관리와 의사 결정을 지원합니다.

수집 데이터 선정

로그인 Account를 생성하고 각 Service Account로의 접근을 위해 STS Assume Role을 적용하여, Multi Account 환경의 통합 계정을 구성하였습니다. 다음 단계로 분산되어 있는 Data들의 중앙화를 위해 Audit Account를 별도로 생성하였고, AWS 서비스 중 가장 많이 사용하거나 보안의 기본이 되는 접근통제를 기준으로 수집해야 할 주제들을 정하여 데이터를 선정하였습니다. 각 주제와 데이터들에 대한 내용은 다음과 같습니다.

  1. 계정 권한 관리
    IAM User/Group : Account별 User/Group List, Role, Policy들을 수집하여 비인가된 사용자, 권한에 대한 모니터링
  2. AWS 자산 식별 및 관리
    VPC : Resource ID, 설정된 네트워크 정보들을 수집하여 IP 대역 관리
    EC2 : Instance ID/Type/State, IP 정보 등을 수집하여 EC2 자산 식별 및 관리
    RDS : Instance Type/State, Endpoint, Port 등을 수집하여 RDS 자산 식별 및 관리
    S3 : Bucket Name/Public Access Setting 들을 수집하여 S3 자산 식별 및 관리
  3. AWS 보안 관리
    Console 접근 이력 : 비정상적인 접근 행위에 대한 모니터링

[그림 6] 로그 수집 및 활용 구성도

  1. 통합 수집 : 분산되어 있는 각 계정의 Resource 현황들을 Audit 계정에 Aggregation 하여 Amazon S3에 저장
  2. 데이터 가공 : Amazon Athena를 통해 저장된 데이터들을 가공하여 분석에 용이한 형태로 변경
  3. Amazon Quicksight 활용을 통한 로그 시각화

계정 별 로그 수집 단계

Audit 계정

각 Service 계정들의 AWS Config Snapshot을 S3로 수집
Amazon Athena에서 시각화 대상 데이터를 선정하여 전처리 진행
전처리된 데이터를 이용하여 Amazon Quicksight 대시보드 생성

  • 단계 1 : S3 bucket 생성
  • 단계 2 : AWS Config 데이터를 위한 Amazon Athena 테이블 생성
  • 단계 3 : Amazon Quicksight 대시보드 생성

Service 계정

로그 구성 단계

1) Audit 계정에서 데이터를 통합 수집할 Amazon S3 bucket 하나를 생성합니다.

[그림 7] 데이터 통합 수집을 위한 S3 bucket 생성

2) 각 Service 계정에서 AWS Config 에 Delivery 설정을 진행합니다. S3 bucket은 Audit 계정에서 생성했던 bucket의 이름을 설정하여 Config에서 생성된 데이터들을 모두 Audit 계정으로 전송되도록 설정합니다.

[그림 8] Config에서 생성된 데이터들을 모두 Audit 계정으로 전송

3) 저희는 Daliy로 Resource 변화에 대한 파악을 위해 Delivery 설정을 통해 24시간 주기로 Snapshot를 저장하고 있습니다.

[그림 9] 24시간 주기로 Config Snapshot 저장

“delivery-channel.json” 파일에 저장한 다음 “TwentyFour_Hours”의 “deliveryFrequency”를 사용하여 “configSnapshotDeliveryProperties” 속성을 포함하도록 업데이트합니다.

# 24시간 주기로 configSnapshot을 S3 bucket에 저장

cat <<EOF > delivery-channel.json
{
  "configSnapshotDeliveryProperties": {
  "deliveryFrequency": "TwentyFour_Hours"
},
  "name": "default",
  "s3BucketName": "genie-****-log"
}
EOF

4) Audit 계정에서 취합된 S3 데이터를 가공하기 위해 Amazon Athena에 Table을 Create 합니다. AWS Config 데이터의 Json 형태를 Table화 해야 하므로 Column name과 type을 미리 정의하였으며 쿼리 성능 향상을 위해 Partition Projection을 진행하였습니다.

CREATE EXTERNAL TABLE config_log (
		fileversion STRING,
		configsnapshotid STRING,
		configurationitems ARRAY < STRUCT <
				configurationItemVersion : STRING,
				configurationItemCaptureTime : STRING,
				configurationStateId : BIGINT,
				awsAccountId : STRING,
				configurationItemStatus : STRING,
				resourceType : STRING,
				resourceId : STRING,
				resourceName : STRING,
				ARN : STRING,
				awsRegion : STRING,
				availabilityZone : STRING,
				configurationStateMd5Hash : STRING,
				configuration : STRING,
				supplementaryConfiguration : MAP <STRING, STRING>,
				tags: MAP <STRING, STRING> ,
				resourceCreationTime : STRING >
		>
)
PARTITIONED BY (
		account string,
		region string,
		day string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
		'case.insensitive'='false',
		'mapping.fileversion'='fileVersion',
		'mapping.configsnapshotid'='configSnapshotId',
		'mapping.configurationitems'='configurationItems',
		'mapping.configurationitemversion'='configurationItemVersion',
		'mapping.configurationitemcapturetime'='configurationItemCaptureTime',
		'mapping.configurationstateid'='configurationStateId',
		'mapping.awsaccountid'='awsAccountId',
		'mapping.configurationitemstatus'='configurationItemStatus',
		'mapping.resourcetype'='resourceType',
		'mapping.resourceid'='resourceId',
		'mapping.resourcename'='resourceName',
		'mapping.arn'='ARN',
		'mapping.awsregion'='awsRegion',
		'mapping.availabilityzone'='availabilityZone',
		'mapping.configurationstatemd5hash'='configurationStateMd5Hash',
		'mapping.supplementaryconfiguration'='supplementaryConfiguration',
		'mapping.configurationstateid'='configurationStateId'
)
LOCATION
		's3://genie-audit-config-log/AWSLogs/'
TBLPROPERTIES (
		'projection.enabled'='true',
		'projection.account.type'='enum',
		'projection.account.values'='3863********,5736********,7469********,0003********,0247********,3553********,0825********,7738********',
		'projection.region.type'='enum',
		'projection.region.values'='us-east-2,us-east-1,us-west-1,us-west-2,af-south-1,ap-east-1,ap-south-1,ap-northeast-3,ap-northeast-2,ap-southeast-1,ap-southeast-2,ap-northeast-1,ca-central-1,eu-central-1,eu-west-1,eu-west-2,eu-south-1,eu-west-3,eu-north-1,me-south-1,sa-east-1',
		'projection.day.format'='yyyy/M/dd',
		'projection.day.interval'='1',
		'projection.day.interval.unit'='DAYS',
		'projection.day.range'='2019/1/01,NOW',
		'projection.day.type'='date',
		'storage.location.template'='s3://genie-audit-config-log/AWSLogs/${account}/Config/${region}/${day}/ConfigSnapshot'
)

5) Amazon Athena 에 생성된 데이터를 기반으로 하여 Amazon Quicksight를 통해 다양한 시각화 도구를 활용하여 인사이트를 얻을 수 있게 되었습니다.

[그림 10] AWS 리소스 변화량 및 콘솔 로그인 체크를 위한 시각화

[그림 11] AWS 리소스 사용 내용 요약 시각화

[그림 12] AWS IAM 사용자/그룹 및 role부여 시각화

결론

지니뮤직은 권한 및 관리 체계 확립을 향상시키기 위해 통합 계정 구축과 Quicksight를 활용하였습니다. 이를 통해 아래와 같은 효과를 얻을 수 있었습니다.

통합 계정

통합 계정은 Multi-account 사용 시의 편의성을 향상시키면서 동시에 IAM 계정 및 권한의 보안 측면을 강화할 수 있었습니다. 사용자 경험을 개선하고 관리 측면에서의 용이성을 도모하며 동시에 보안을 강화함으로써 효과적인 인프라 구축의 핵심이 되었습니다.

Quicksight

Quicksight를 활용하여 AWS 내의 핵심 정보를 직관적으로 확인할 수 있는 BI 대시보드를 구축함으로써 각 계정의 현황을 신속하게 파악할 수 있었습니다. 이는 전반적인 인프라 관리 및 의사결정에 필수적인 도구로서의 역할을 수행하고 있습니다.

Next Step

통합 계정과 Quicksight의 구축으로 Multi-account 사용에 따른 보안 및 관리적 이슈를 최소화했지만, 실제 사용자들의 피드백과 관리적 도전에 대한 계속적인 검토와 보완이 필요합니다. 사용자 편의성을 개선하고 관리적 이슈를 식별하며 더욱 효율적인 운영을 위해 지속적인 노력이 진행될 것입니다.

AWS를 활용하는 것은 빠르고 효율적이지만, 사용자, 관리자, 보안에 대한 고민은 항상 필수입니다. 앞으로도 변화하는 환경에 적응하며 AWS의 기술과 서비스를 최대한 활용해 보다 안전하고 효율적인 비즈니스 인프라를 유지해 나갈 것입니다. AWS를 활용하는 것은 끊임없는 발전과 혁신을 필요로 하는 여정이며, 이를 통해 높은 수준의 서비스 제공을 지속적으로 추구하고자 합니다.

김범기

지니뮤직에서 Server 및 Storage Engineer로 일하며, 인프라 설계, 구축, 운영 업무를 담당하고 있습니다. 안정적인 서비스 제공을 위해 노력하고 있으며, 클라우드 환경에서의 현대화 과정에 필요한 기술을 습득하고 있습니다.

이두신

지니뮤직에서 Security Engineer로서 지니뮤직 온프레미스/클라우드 인프라의 보안 설계 및 구축, 운영을 담당하며, 해킹과 데이터 유출로부터 고객의 데이터를 보호하고 있습니다. 더욱 효율적인 업무를 위한 자동화와 오픈소스에 관심이 많습니다.

TaeHoon Kyeong

TaeHoon Kyeong

경태훈 솔루션즈 아키텍트는 미디어 및 엔터테인먼트 고객들이 비즈니스 목표를 달성할 수 있도록 최적의 클라우드 아키텍처를 설계할 수 있도록 돕습니다. 또한, 미디어 및 엔터테인먼트 산업 영역에 생성형AI 기술 적용 방안을 검토하는 워킹 그룹 활동을 하고 있습니다. 과거에는 SAP 데브옵스 개발자로 근무한 경험이 있습니다.

SooMin Kim

SooMin Kim

김수민 Customer Solutions Manager는 고객의 클라우드 여정에서 발생하는 다양한 과제를 해결하고 클라우드 전환을 가속화함으로써 고객의 비즈니스 가치 실현을 지원하는 프로그램 매니저 역할을 수행하고 있습니다.

Taekyung Han

Taekyung Han

As a Solutions Architect, Taekyung Han works with customers to create the optimized architecture to achieve customer's business outcomes. With backend engineer and DevOps experience, I provide technical help on how to configure a secure cloud environment. 한태경 솔루션즈 아키텍트는 AWS 클라우드 고객을 대상으로 고객의 비즈니스 성과 달성을 위해 고객과 함께 최적의 아키텍처를 구성하는 역할을 수행하고 있습니다. 백엔드 엔지니어와 DevOps 경험을 기반으로 안전한 클라우드 환경을 구성하는 방법에 대한 기술적인 도움을 드리고 있습니다.