[DAC] Cross Account Role 설정 가이드 in AWS

[DAC] Cross Account Role 설정 가이드 in AWS

이 문서는 다른 계정의 리소스 정보 동기화 절차만을 제공하며, 다른 계정의 리소스에 접속할 수 있는 절차는 제공하지 않습니다. 다른 계정의 리소스에 접속하기 위해서는 VPC Peering Connections, Transit Gateways, Private Links 등을 활용하여 별도의 통신 구간 허용 작업을 수행하여야 합니다.

Overview

QueryPie 가 설치되는 Account 와 실제 동기화 대상 리소스의 Account 가 분리되어 있는 경우, QueryPie 가 설치 되어있는 Account 에서는 STS(Security(QueryPie) Token Service)를 통해 대상 리소스의 Account IAM Role 로 부터 임시 자격 증명 (Token)을 요청 받아 리소스 정보들을 동기화 할 수 있습니다.

아래 절차는 QueryPie instance 가 설치된 계정 (이하 Security(QueryPie) Account) 에서 동기화 대상 리소스가 존재하는 계정 (이하 Target Account) 으로 부터 임시 자격 증명을 획득하여 리소스 정보를 동기화 하는 절차를 안내합니다.

image-20250422-005207.png

절차를 진행하시기 전에, 다음 세 가지 사항을 사전에 숙지해 주시기 바랍니다:

  • AssumeRole 동작은 Security(QueryPie) Account 측에서만 수행됩니다.

  • Target Account에서는 직접적으로 AssumeRole을 호출하지 않습니다.

  • 대신, Target Account에서는 외부 계정이 해당 Role을 Assume할 수 있도록 Trust Relationship을 적절히 설정해 주셔야 합니다.

1. Security(QueryPie) Account : QueryPie 에서 수행해야 하는 작업

1.1 Cloud Provider 에서 External ID 발급 및 추출

image-20250328-071039.png
Databases → Cloud Providers → Create Provider
  • Name: 식별 가능한 이름 입력

  • Region: 리소스를 수집한 리전 지정 ( e.g. Asia Pacific (Seoul) )

  • Credential: Cross Account Role

    • Follow the steps down below. 클릭

    • 하단에 생성되는 External ID 를 복사하여 보관

External ID 는 생성 시 마다 Create Provider 버튼을 클릭하여 진입하는 시점 마다 신규 생성이 됩니다. 이 문서의 절차를 진행하는 동안에는 유실 또는 변경 되지 않도록 주의가 필요합니다.

 

1.1.1 EKS일 경우

  • 이동 : Amazon Elastic Kubernetes Service > Clusters > clustername > Access 탭 > Pod Identity associations > Create 클릭

  • 아래 선택 후 Create

  • image-20251028-051430.png

    이동 : IAM > Roles > IAM role 확인 > Permissions 탭

  • 아래 내용 policy 만들어서 부여

  • { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Resource": "*" } ] }
  • 이동 : Trust relationships 탭

  • 아래 내용 부여

  • { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }

 

 

2. Target Account : 리소스를 보유한 계정에서의 수행 작업

2.1 IAM Role 생성

IAM → Access management → Roles → Create role
image-20241210-155032.png
  • Trusted entitiy type : AWS account

  • An AWS account : Another AWS account

    • Account ID : Security(QueryPie) Account의 AWS Account ID 입력

    • Options

      • Require external ID (Best practice when a third party will assume this role) 활성화 → QueryPie 에서 복사한 External ID 입력

  • Next 클릭

  • Add permission : QueryPie instance 와 연동할 리소스의 퍼미션 추가 (e.g. AmazonRDSReadOnlyAccess)

  • Next 클릭

image-20241210-155424.png
  • Role name : 식별 가능한 이름 입력

  • Create Role 클릭

 

2.1.1 EKS일 경우

  • 이동 : IAM > Roles > 좀 전에 만든 Role name : 식별 가능한 이름검색하여 클릭

  • 이동 : Trust relationships 탭

  • 아래와 같이 수정

  • image-20251028-050629.png
  • { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAssumeWithExternalId", "Effect": "Allow", "Principal": { "AWS": "pod 에 준 role" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "fc6d67e4-ed12-4e27-9d07-feb3e6b664ac" } } }, { "Effect": "Allow", "Principal": { "AWS": "pod 에 준 role" }, "Action": "sts:TagSession" } ] }

3. Security(QueryPie) Account : QueryPie instance를 보유한 계정에서의 수행 작업

3.1. sts:AssumeRole Policy 생성

IAM → Access management → Policies → Create policy
  1. Policy editor 를 Visual → JSON 으로 변경 후, 아래 형식의 Policy 를 추가

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "<CrossAccount Role ARN from Target Account>" } ] }
  • Next 클릭

  • Policy name : 식별 가능한 Policy name 입력

  • Create policy 클릭

3.2. (Instance 에 IAM Role 미 등록 시) IAM Role 생성 및 QueryPie instance에 적용

IAM → Access management → Roles → Create role
  • Trusted entitiy type: AWS service

  • Use case:

    • Service or use case: EC2

  • Next 클릭

image-20250328-074138.png
  • Permissions policies: 위에서 생성한 sts:AssumeRole Policy 추가

  • Next 클릭

image-20250328-074540.png
  • Role name: 식별 가능한 Role name 입력

  • Description: 필요 시 수정

  • Create role 클릭

image-20250328-074913.png
EC2 → instances → Actions → Security(QueryPie) → Modify IAM Role
image-20250328-075042.png
  • IAM role: 위에서 생성한 IAM role 선택

  • Update IAM role 클릭

3.3. (Instance 에 IAM Role 사전 등록 시) QueryPie instance에 적용한 IAM Role에, sts:AssumeRole Policy를 추가

EC2 → instances → Security(QueryPie) → IAM Role
  • Permissions → Add permissions → Attach policies 클릭

  • 위에서 생성한 Policy 를 검색하여 선택

  • Add perimissions 클릭

3.4. QueryPie 에서 Target Account 에서 생성한 Role ARN 을 붙여넣기 후 저장

image-20241210-160023.png

 

image-20241210-155853.png
  • Target Account 에서 생성한 IAM Role 의 ARN 정보를 복사 → Security(QueryPie) Account 의 QueryPie Cloud Provider 설정에 추가 후 저장

FAQ

Dry run 또는 Synchronize 시, QueryPie가 임시 자격 증명을 부여 받는 주기가 어떻게 될까요?

Cross Account Role 동기는 Dry Run / Synchronize 시 마다 임시권한을 요청하여 획득하는 방식입니다.

요청 시 마다 획득하는 임시권한의 유효 시간은 AWS 에서 최소 단위로 지정하고 있는 1시간 입니다.