Assume Role 방식

개요

Assume Role 방식은 AWS의 STS AssumeRole 을 이용해, CloudOps 수집 계정이 고객 계정의 IAM 역할(Role)을 임시로 위임받아 리소스를 수집하는 방식입니다. 장기 자격증명(Access Key)을 직접 제공하지 않고, 읽기 전용 역할 하나만 생성하므로 보안상 권장됩니다.

ℹ️

동작 방식

고객 계정에 읽기 전용 IAM 역할을 만들고, 그 역할의 신뢰 정책(Trust Policy) 에 CloudOps 수집 계정을 신뢰 주체로 등록합니다. CloudOps 는 수집할 때마다 이 역할을 가정(AssumeRole)해 단기 임시 자격증명을 발급받아 사용합니다. 발급되는 자격증명은 단기(기본 1시간)입니다.

Assume Role 방식은 다음 설정 정보가 필요합니다.

  • Account ID: AWS 계정을 생성할 때 자동으로 부여되는 12자리 고유 식별자입니다.
  • Role ARN: 생성한 IAM 역할의 고유 식별자입니다. CloudOps 가 가정(AssumeRole)할 대상이며, 역할 생성 후 확인할 수 있습니다.
  • External ID: 신뢰 관계 검증용 비밀 식별자로, 제3자의 무단 AssumeRole(confused deputy 공격)을 방지합니다. CloudOps 콘솔의 클라우드 계정 등록 화면에서 자동으로 생성·표시되므로, 그 값을 그대로 사용합니다.
ℹ️
수집 리전은 지정하지 않습니다. CloudOps 는 부여된 역할로 고객 계정의 활성화된 모든 리전을 자동으로 탐색(ec2:DescribeRegions)해 수집합니다. 별도로 리전을 지정할 필요가 없습니다.

역할을 생성하는 방법은 두 가지입니다. 환경에 맞는 방법을 선택하세요.


1. AWS 콘솔에서 수동 생성

IAM 역할 생성 시작

AWS 콘솔 에 접속해 [IAM > 액세스 관리 > 역할] 메뉴에서 [역할 만들기] 를 클릭합니다.

IAM 역할 만들기

신뢰할 수 있는 엔터티 선택 — 사용자 지정 신뢰 정책

신뢰할 수 있는 엔터티 유형에서 [사용자 지정 신뢰 정책(Custom trust policy)] 을 선택합니다.

사용자 지정 신뢰 정책 선택

이어서 신뢰 정책 편집기에 아래 JSON 을 붙여넣습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudOpsAssumeRole",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<CLOUDOPS_ACCOUNT_ID>:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "<EXTERNAL_ID>"
        }
      }
    }
  ]
}
  • <CLOUDOPS_ACCOUNT_ID> : CloudOps 가 제공하는 수집 계정 ID 입니다.
  • <EXTERNAL_ID> : CloudOps 콘솔의 클라우드 계정 등록 화면에서 확인한 External ID 입니다.

신뢰 정책 JSON 입력

권한 정책 부착

권한 정책에서 ReadOnlyAccess 를 부착합니다. ReadOnlyAccess 로 검색하면 이름에 해당 단어가 포함된 서비스별 정책이 많이 나오므로, 필터 유형을 [AWS managed - job function](직무 기능)으로 지정하면 모든 서비스에 대한 읽기 전용 정책인 ReadOnlyAccess 를 바로 찾을 수 있습니다. (ARN: arn:aws:iam::aws:policy/ReadOnlyAccess)

ReadOnlyAccess 권한 부착

역할 이름 지정 및 생성

역할 이름(예: CloudOpsCollectorRole)을 입력하고 신뢰 정책·권한을 검토한 뒤 [역할 생성] 을 클릭합니다.

Role ARN 확인

생성된 역할의 상세 페이지에서 Role ARN 을 복사합니다. CloudOps 등록 시 이 값을 사용합니다.

arn:aws:iam::<고객_ACCOUNT_ID>:role/CloudOpsCollectorRole

2. CloudFormation 으로 생성

AWS 의 세부 설정을 직접 다루지 않고 빠르게 역할을 만들고 싶다면 CloudFormation 을 사용합니다.

ℹ️
필요 권한 — CloudFormation 으로 IAM 역할을 만들려면, 스택을 생성하는 사용자에게 CloudFormation 권한(cloudformation:CreateStack 등)과 IAM 역할 생성 권한(iam:CreateRole · iam:AttachRolePolicy · iam:PassRole · iam:TagRole 등)이 필요합니다. 스택 생성 시 [IAM 리소스 생성 승인(CAPABILITY_NAMED_IAM)] 체크가 요구됩니다. 보통 관리자 권한(예: AdministratorAccess) 사용자가 수행하면 충분합니다.

템플릿 준비

아래 CloudFormation 템플릿을 .yaml 파일로 저장합니다.

AWSTemplateFormatVersion: "2010-09-09"
Description: CloudOps cross-account collector role (read-only).

Parameters:
  CloudOpsAccountId:
    Type: String
    Description: CloudOps 가 제공하는 수집 계정 ID (12자리).
    AllowedPattern: "^[0-9]{12}$"
  ExternalId:
    Type: String
    Description: CloudOps 콘솔에서 확인한 External ID.
    MinLength: 4
    NoEcho: true
  RoleName:
    Type: String
    Default: CloudOpsCollectorRole

Resources:
  CloudOpsCollectorRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Ref RoleName
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              AWS: !Sub "arn:aws:iam::${CloudOpsAccountId}:root"
            Action: "sts:AssumeRole"
            Condition:
              StringEquals:
                "sts:ExternalId": !Ref ExternalId
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/ReadOnlyAccess"

Outputs:
  RoleArn:
    Description: 생성된 Role ARN. CloudOps 등록 시 사용하세요.
    Value: !GetAtt CloudOpsCollectorRole.Arn

스택 생성

[CloudFormation > 스택 > 스택 생성 > 새 리소스 사용(표준)] 에서 위 템플릿 파일을 업로드합니다.

파라미터 입력

파라미터
CloudOpsAccountIdCloudOps 제공 수집 계정 ID
ExternalIdCloudOps 콘솔에서 확인한 External ID
RoleName생성할 역할 이름 (기본 CloudOpsCollectorRole)

Role ARN 확인

[IAM 리소스 생성 승인] 에 체크하고 스택을 생성합니다. 완료되면 [Outputs] 탭의 RoleArn 값을 확인합니다.


다음 단계

역할 생성이 끝나면 Role ARNExternal ID 로 CloudOps 에 계정을 연동합니다.

v1.1.0