AWS 기술 블로그

SageMaker Studio에서 TIP와 S3 Access Grants를 활용한 Athena 쿼리 실행하기

개요

기업 환경에서 여러 데이터 과학자가 Amazon SageMaker Studio를 공유하여 사용할 때, 사용자별로 세밀한 데이터 접근 권한을 관리하고 감사 추적을 수행하는 것은 중요한 보안 요구사항입니다. 그러나 기존의 IAM Role 기반 접근 방식에서는 SageMaker Studio의 모든 사용자가 동일한 Execution Role을 공유하게 되어, 개별 사용자를 식별하고 차별화된 권한을 부여하는 것이 어려웠습니다.

IAM Identity Center가 제공하는 Trusted Identity Propagation(TIP) 기능은 이러한 문제를 해결합니다. TIP를 활성화하면 AWS IAM Identity Center(IdC)의 사용자 ID가 SageMaker Studio 세션을 통해 다른 AWS 서비스로 전파되어, 사용자별로 세밀한 접근 제어와 완전한 감사 추적이 가능해집니다.

이 블로그에서는 SageMaker Studio에서 TIP를 활성화하고, S3 Access Grants 및 Lake Formation과 연동하여 Athena 쿼리를 실행하는 엔드투엔드 구현 방법을 단계별로 안내합니다.

구성 아키텍처

이 솔루션은 IAM Identity Center, SageMaker TIP, S3 Access Grants, Lake Formation, Athena를 통합하여 엔터프라이즈급 데이터 거버넌스를 구현합니다. 아키텍처는 사용자 인증, 권한 관리, 데이터 접근, 감사 추적의 4개 계층으로 구성됩니다.

SageMaker Studio TIP와 S3 Access Grants, Lake Formation, Athena 통합 아키텍처

그림: SageMaker TIP 아키텍처 개요

이 솔루션은 다음과 같은 AWS 서비스들을 통합하여 구성됩니다:

  • IAM Identity Center: 중앙 집중식 사용자 인증 및 ID 관리
  • SageMaker Studio with TIP: 사용자 ID 전파가 활성화된 데이터 과학 플랫폼
  • S3 Access Grants: 사용자별 세밀한 S3 접근 권한 및 임시 자격증명 발급
  • Lake Formation: 데이터 카탈로그에 대한 테이블/컬럼 수준 권한 관리
  • Athena with TIP Workgroup: IAM Identity Center 인증 모드로 TIP를 지원하는 쿼리 엔진
  • CloudTrail: onBehalfOf 필드를 통한 완전한 감사 추적

Trusted Identity Propagation(TIP) 구성 방법 및 장점

여러 데이터 과학자가 하나의 SageMaker Studio Domain을 공유하면, 모든 노트북이 동일한 Execution Role 권한으로 실행됩니다. 이때 Athena나 S3 같은 데이터 서비스 입장에서는 ‘어떤 Role이 호출했는지’만 보일 뿐 ‘어떤 사용자가 호출했는지’는 알 수 없습니다. 사용자마다 접근 권한을 다르게 부여할 수도, 문제가 생겼을 때 행위자를 추적할 수도 없는 것이 기존 방식의 한계입니다.

Trusted Identity Propagation(TIP)은 이 문제를 간단한 아이디어로 해결합니다. 사용자가 IAM Identity Center(IdC)로 로그인하면 SageMaker가 그 사용자의 ID를 Role 세션에 이름표처럼 붙이고, 이후 노트북에서 Athena, S3 Access Grants, Lake Formation을 호출할 때마다 이 이름표가 함께 전달됩니다. 덕분에 각 서비스는 공유 Role 권한과 별개로 ‘실제 사용자’를 기준으로 접근을 허용하거나 거부할 수 있습니다.

구성 방법의 핵심은 한 가지입니다. Execution Role의 Trust Policy에 sts:AssumeRole 외에 sts:SetContext 액션을 추가로 허용하는 것입니다. 이 액션이 있어야 SageMaker가 Role 세션에 사용자 컨텍스트를 주입할 수 있습니다. 아래 그림처럼 요청 흐름 자체는 동일하지만, sts:SetContext 유무에 따라 서비스가 사용자를 식별할 수 있는지와 CloudTrail에 남는 기록이 달라집니다.

sts:SetContext 설정 유무에 따른 요청 흐름과 CloudTrail 감사 기록 비교

그림: sts:SetContext 유무에 따른 요청 흐름과 CloudTrail 기록 비교

구분 TIP 미사용 TIP 사용
Trust Policy sts:AssumeRole만 허용 sts:AssumeRole + sts:SetContext 허용
서비스가 보는 요청 주체 공유 Role (모든 사용자 동일) 공유 Role + 실제 사용자 ID
사용자별 권한 제어 불가능 — Role 단위 권한만 적용 가능 — S3 Access Grants·Lake Formation과 연동
CloudTrail 감사 기록 Role ARN만 기록되어 행위자 불명 onBehalfOf 필드에 사용자 ID까지 기록

사전 준비 사항

이 가이드를 시작하기 전에 AWS 환경과 필요한 리소스를 준비해야 합니다. 특히 S3 버킷과 VPC 설정은 사전에 완료되어 있어야 원활하게 진행할 수 있습니다.

  • AWS 계정 및 적절한 관리자 권한
  • SageMaker Studio를 생성할 VPC와 서브넷 (테스트 편의상 public internet access 사용, 프로덕션 환경에서는 VPC 전용 구성을 권장)
  • 테스트용 S3 버킷 2개:
  • Athena 쿼리 결과 저장용 버킷 (예: sagemaker-tip-access-test-{account-id})
  • 데이터 테이블 저장용 버킷 (예: glue-table-test-{account-id})
  • CloudTrail 활성화

구성 절차

IAM Identity Center 설정

IAM Identity Center는 AWS 계정 전체에서 사용자 ID를 중앙 집중식으로 관리하는 서비스입니다. TIP를 사용하려면 반드시 IAM Identity Center를 활성화하고 사용자를 생성해야 합니다.

Identity Center 활성화

AWS Console에서 IAM Identity Center 서비스로 이동합니다.

IAM Identity Center 서비스의 활성화 버튼

IAM Identity Center 서비스 소개 페이지. “Enable IAM Identity Center” 버튼을 클릭하여 활성화합니다.

IAM Identity Center 계정 인스턴스 활성화 설정

“Enable an account instance of IAM Identity Center” 설정 페이지. Organizations 연동 및 리전을 확인합니다.

Enable되고 나면 아래와 같이 구성된 사항을 확인할 수 있습니다.

활성화된 IAM Identity Center 대시보드

IAM Identity Center 활성화 완료 후 Dashboard 화면. 왼쪽 메뉴에서 Users, Groups, Settings 등을 확인할 수 있습니다.

MFA는 기본적으로 강제되도록 구성되어 있습니다. 빠른 테스트를 위해 Settings > Authentication 탭에서 MFA를 비활성화하고 진행할 수 있지만, 프로덕션 환경에서는 MFA 사용을 권고합니다.

IAM Identity Center Settings의 Authentication 및 MFA 설정

Settings > Authentication 탭. Multi-factor authentication의 “Configure” 버튼을 클릭합니다.

IAM Identity Center 다중 인증 구성 화면

Configure multi-factor authentication 화면. 테스트를 위해 “Never (disabled)”를 선택한 모습입니다.

테스트 사용자 생성

Identity Center 콘솔에서 Users 메뉴로 이동합니다.

IAM Identity Center Users 목록의 Add user 버튼

Users 관리 페이지. “No users found” 상태에서 “Add user” 버튼을 클릭합니다.

Add user 버튼을 클릭하여 사용자 정보를 입력합니다:

IAM Identity Center 테스트 사용자 정보 입력

Specify user details 화면. Username, Email address, First name, Last name, Display name을 입력합니다.

  • Username: emma
  • Email address: 사용자 이메일
  • First name / Last name: 입력
  • Display name: 입력
  • Password: “Generate a one-time password that you can share with this user.” 옵션 선택 (일회용 패스워드)

IAM Identity Center 사용자 생성 중 그룹 할당 단계

Add user to groups (optional) 화면. 이번 가이드에서는 그룹을 건너뛰고 진행합니다.

Groups는 건너뛰고 사용자를 생성합니다.

테스트 사용자 생성 후 일회용 비밀번호 확인 화면

사용자 생성 완료 후 일회용 비밀번호 확인 화면. AWS access portal URL과 one-time password가 표시됩니다.

Identity Center 인스턴스 ARN 확인

나중에 필요하므로 Identity Center 인스턴스 ARN을 메모해둡니다:

IAM Identity Center Settings의 인스턴스 정보

IAM Identity Center Settings 페이지. Identity Center instance name, Region, Organization ID 등을 확인할 수 있습니다.

  • 형식: arn:aws:sso:::instance/ssoins-xxxxxxxxxxxxx
  • Settings 메뉴에서 확인 가능

사용자 ID 확인

  1. Identity Center 콘솔에서 Users 메뉴로 이동합니다.
  2. 생성한 사용자(emma)를 클릭합니다.
  3. User ID 값을 복사하여 메모해둡니다 (예: 34e86dbc-70b1-7000-19e9-052a443e60ad).

SageMaker Execution Role 생성

TIP가 작동하려면 SageMaker가 현재 작업에 사용자 컨텍스트를 주입할 수 있어야 합니다. 이를 위해 SageMaker Execution Role의 Trust Policy에 sts:SetContext 액션이 포함되어야 합니다. 이 섹션에서는 TIP를 지원하는 Execution Role을 생성하고, S3 Access Grants 및 Lake Formation과 연동하기 위한 권한을 설정합니다.

IAM Role 생성

IAM Console에서 Roles > Create role을 선택합니다.

Trusted entity type에서 AWS service를 선택합니다.

SageMaker 실행 역할을 위한 신뢰 엔터티 선택

Select trusted entity 화면. Use case에서 “SageMaker”를 선택합니다.

SageMaker – Execution을 선택하고 다음으로 진행합니다.

권한 정책 연결

아래 그림과 같이 권한을 연결합니다.

SageMaker 실행 역할의 AmazonSageMakerFullAccess 권한 선택

Add permissions 화면. AmazonSageMakerFullAccess 정책이 자동으로 선택됩니다.

기본적으로 AmazonSageMakerFullAccess 정책이 자동으로 선택됩니다. 그대로 유지하고 다음으로 진행합니다.

Role 이름 지정

SageMakerExecutionRoleForTIP 역할 이름 지정

Role naming 화면. Role name에 “SageMakerExecutionRoleForTIP”를 입력합니다.

Role name: SageMakerExecutionRoleForTIP

화면에서 Create role 버튼을 눌러 IAM Role을 생성합니다.

Trust Policy 수정

생성된 Role의 Trust relationships 탭으로 이동하여 “Action” 부분을 아래와 같이 수정합니다:

SageMaker 실행 역할의 Trust relationships 및 Edit trust policy

Trust relationships 탭. “Edit trust policy” 버튼을 클릭하여 정책을 수정합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "sagemaker.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:SetContext"
      ]
    }
  ]
}
핵심 포인트:
sts:SetContext 액션을 허용하도록 추가해야 사용자의 identity context를 role session에 추가해 TIP를 통해 다른 AWS 서비스로 전파되도록 할 수 있습니다.

Inline Policy 추가 – S3 Access Grants

S3 Access Grants를 사용하기 위한 아래의 inline policy를 추가합니다. s3:GetDataAccess를 비롯한 Access Grants 관련 액션을 허용하고, S3 객체에 대한 직접 접근은 명시적으로 거부(Deny)하여 모든 데이터 접근이 Access Grants를 통해서만 이루어지도록 합니다.

주의: 아래 policy 내용은 예시를 위해서 “Resource”: “*” 로 표현하였으나, 실제 프로덕션 환경에서는 필요한 리소스만 명시해서 제한할 수 있도록 구체적인 리소스를 지정해서 사용하시기 바랍니다.

Policy name: S3AccessGrantsPermissions

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3AccessGrantsPermissions",
            "Effect": "Allow",
            "Action": [
                "s3:GetDataAccess",
                "s3:ListAccessGrants",
                "s3:ListAccessGrantsInstances",
                "s3:GetAccessGrantsInstanceForPrefix",
                "s3:ListAccessGrantsLocations",
                "s3:GetAccessGrant"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenyDirectS3Access",
            "Effect": "Deny",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetObjectAcl",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectAttributes",
                "s3:GetObjectRetention",
                "s3:GetObjectLegalHold",
                "s3:GetObjectTagging",
                "s3:GetObjectVersionTagging",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObjectTagging",
                "s3:DeleteObjectVersionTagging",
                "s3:RestoreObject",
                "s3:ListBucket",
                "s3:ListBucketVersions",
                "s3:ListBucketMultipartUploads",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
            "Resource": "*"
        }
    ]
}

Inline Policy 추가 – Lake Formation

그리고 Identity Center를 사용하는 Lake Formation 환경에서 사용하기 위한 권한도 추가해야 합니다.

주의: 아래 policy 내용은 예시를 위해서 “Resource”: “*” 로 표현하였으나, 실제 프로덕션 환경에서는 필요한 리소스만 명시해서 제한할 수 있도록 구체적인 리소스를 지정해서 사용하시기 바랍니다.

Policy name: lakeformation-idc

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:CreateLakeFormationIdentityCenterConfiguration",
                "sso:CreateApplication",
                "sso:PutApplicationAssignmentConfiguration",
                "sso:PutApplicationAuthenticationMethod",
                "sso:PutApplicationGrant",
                "sso:PutApplicationAccessScope"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:DescribeLakeFormationIdentityCenterConfiguration",
                "sso:DescribeApplication"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:UpdateLakeFormationIdentityCenterConfiguration",
                "lakeformation:DescribeLakeFormationIdentityCenterConfiguration",
                "sso:DescribeApplication",
                "sso:UpdateApplication"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:DeleteLakeFormationIdentityCenterConfiguration",
                "sso:DeleteApplication"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

SageMaker Studio Domain 생성

SageMaker Studio Domain은 데이터 과학 팀이 협업하는 공유 환경입니다. TIP를 활성화하면 Domain 내 모든 사용자의 작업을 개별적으로 추적할 수 있습니다.

SageMaker Console 접속

SageMaker Console에서 Domains > Create domain을 선택합니다.

SageMaker AI Domains 목록의 Create domain 버튼

Amazon SageMaker AI 콘솔의 Domains 화면. “Create domain” 버튼을 클릭합니다.

“Set up for organizations”를 선택합니다. 그래야만 IdC를 사용할 수 있습니다.

SageMaker 도메인의 Set up for organizations 선택

Set up SageMaker domain 화면. “Set up for organizations”를 선택합니다.

Domain name을 입력하고 인증 방법으로 “AWS Identity Center”를 선택합니다. 그리고 “Enable trusted identity propagation for all users on this domain” 옵션을 선택하여 TIP를 활성화하고, 화면 하단에서 TIP가 지원되지 않는 SageMaker 기능 목록도 확인해 둡니다.

SageMaker 도메인의 IAM Identity Center 인증 및 TIP 활성화

Set up domain details and users 화면. TIP 활성화 옵션을 선택하고 TIP 미지원 기능 목록을 확인합니다.

 

Default execution role로는 앞 단계에서 생성한 Role을 선택합니다.

SageMaker 도메인의 기본 실행 역할 선택

Configure roles and ML activities 화면. Default execution role로 “SageMakerExecutionRoleForTIP”를 선택합니다.

아래 단계는 default로 두고 진행합니다.

SageMaker 도메인 애플리케이션 구성

Configure applications 화면. SageMaker Studio, JupyterLab, Canvas, RStudio, Code Editor, MLflow 등의 옵션을 확인할 수 있습니다.

다음 단계도 UI에 해당하는 부분이어서 default로 두고 진행합니다.

SageMaker Studio 사용자 인터페이스 구성

Customize the Studio user interface 화면. 기본값을 유지합니다.

네트워크 설정

VPC, Subnet, Security Group을 선택합니다.

테스트의 용이성을 위해서 “Public internet access”를 활성화하여 진행합니다.

SageMaker 도메인의 VPC, 서브넷 및 보안 그룹 설정

VPC, Subnet, Security Group 선택 화면.

Storage 설정

Configure storage 화면에서는 기본값을 유지하고 다음으로 진행합니다.

Domain 생성 완료

Submit을 클릭하여 Domain을 생성합니다 (약 2분 소요).

생성되고 나면, Domain detail 화면을 통해서 현재 사용하는 role이 기존에 생성해서 지정한 role로 지정되었는지를 검토합니다.

생성된 SageMaker 도메인의 실행 역할 확인

Domain details 화면. Default execution role과 Space execution role이 지정한 role로 설정된 것을 확인합니다.

Identity Center 사용자 할당

  1. 생성된 Domain을 선택하고 User profiles 탭으로 이동합니다.

    SageMaker 도메인 User profiles 탭의 Assign users 버튼

  1. Assign users를 클릭합니다.
  2. 검색창에서 이전에 생성한 사용자(emma)를 찾아 선택합니다.
  3. Assign users and groups를 클릭하여 할당을 완료합니다.

아래와 같이 User profile로 추가된 사항을 확인할 수 있습니다.

SageMaker 도메인에 할당된 테스트 사용자 프로필

S3 Access Grants 설정

S3 Access Grants는 버킷 정책이나 IAM policy에 사용자를 일일이 나열하지 않고도 사용자별로 세밀한 S3 접근 권한을 부여할 수 있는 기능입니다. Instance 생성, Location 등록, Grant 부여의 3단계로 설정하며, 각 사용자에게 임시 자격증명을 발급하여 S3 데이터에 접근할 수 있도록 합니다.

S3 Access Grants Execution Role 생성

S3 Access Grants Execution Role은 S3 Access Grants가 사용자 요청을 대신 수행하여, 승인된 범위 내에서 S3 데이터에 안전하게 접근할 수 있도록 위임된 권한을 제공하기 위해 생성합니다.

IAM 콘솔에서 “Custom trust policy” 방식으로 role 생성을 진행합니다.

IAM 역할 생성의 Custom trust policy 입력 화면

IAM Role 생성 화면. “Custom trust policy”를 선택하고 access-grants.s3.amazonaws.com을 Principal로 하는 trust policy를 입력합니다.

Custom trust policy에는 아래 내용으로 작성합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "access-grants.s3.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetSourceIdentity",
                "sts:SetContext"
            ]
        }
    ]
}

“Add permissions” 화면에서 AmazonS3FullAccess 권한을 지정합니다.

S3AGRoleForTIP 이름으로 role을 생성합니다.

S3AGRoleForTIP 역할 이름 지정

Role naming 화면. Role name에 “S3AGRoleForTIP“를 입력합니다.

S3 Access Grants instance 생성

S3 Access Grants는 아래와 같이 S3 console을 통해서 생성할 수 있습니다.

S3 Console에서 Access Grants 메뉴로 이동합니다.

Create Access Grants instance를 클릭합니다.

S3 Access Grants의 인스턴스, 위치 등록 및 Grant 생성 절차

S3 Access Grants 워크플로우. Step 1: Create S3 Access Grants instance → Step 2: Register S3 buckets or prefixes as locations → Step 3: Create grants

IAM Identity Center 사용 옵션을 선택하고 IdC instance ARN을 입력합니다.

S3 Access Grants 인스턴스와 IAM Identity Center 연동

Create S3 Access Grants instance 화면. IAM Identity Center instance ARN을 입력하여 IdC와 연동합니다.

Scope은 “Browse S3″를 통해서 사용하려는 S3를 지정합니다.

그리고 Role은 이전 스텝에서 만든 S3 AG Role을 지정합니다.

S3 Access Grants 위치 범위 및 IAM 역할 등록

Register S3 buckets or prefixes as locations 화면. location scope와 IAM role(S3AGRoleForTIP)을 지정합니다.

사용하려는 S3 location의 경로(path), 권한, user ID를 아래와 같이 입력합니다.

그리고 Grantee type도 Directory가 되어야 합니다.

S3 Access Grants의 권한, 디렉터리 사용자 및 사용자 ID 지정

Create grant 화면. 권한(Read/Write), Grantee type(Directory identity from IAM Identity Center), 사용자의 user ID를 지정합니다.

입력 내용을 검토하고 Finish를 클릭하여 완료합니다.

S3 Access Grants 인스턴스, 위치 및 Grant 구성 검토

Review and finish 화면. instance, location, grant 구성을 최종 확인하고 Finish를 클릭합니다.

그러면 아래와 같이 grants가 생깁니다.

S3 Access Grants 인스턴스에 생성된 사용자 Grant

생성 완료된 S3 Access Grants instance. Grants 목록에서 emma의 user ID로 부여된 grant를 확인할 수 있습니다.

테스트 데이터 준비

Lake Formation과 Athena에서 사용할 샘플 데이터를 준비합니다. 간단한 직원 정보 CSV 파일을 S3에 업로드하고, Athena를 통해 테이블을 생성합니다.

샘플 데이터 생성

로컬에서 다음 내용으로 employees.csv 파일을 생성합니다:

id,name,department,salary,region

1,Alice,Finance,120000,KR

2,Bob,Engineering,110000,US

3,Charlie,Finance,130000,KR

4,David,HR,90000,JP

5,Eva,Engineering,115000,US

S3에 업로드

S3 버킷에 employees 폴더를 생성합니다 (예: s3://glue-table-test-{account-id}/employees/)

employees.csv 파일을 업로드합니다.

Athena에서 데이터베이스 및 테이블 생성

Athena Console에서 다음 쿼리를 실행하여 테스트 테이블을 생성합니다.

-- 데이터베이스 생성
CREATE DATABASE lf_demo;
 
-- 테이블 생성
CREATE EXTERNAL TABLE lf_demo.employees (
  id INT,
  name STRING,
  department STRING,
  salary INT,
  region STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  "separatorChar" = ",",
  "quoteChar" = "\""
)
STORED AS TEXTFILE
LOCATION 's3://glue-table-test-{account-id}/employees/'
TBLPROPERTIES ("skip.header.line.count"="1");

Athena에서 쿼리를 수행하여 테이블이 정상적으로 생성되고 데이터가 조회되는지 확인합니다.

Athena에서 employees 테이블의 샘플 데이터 조회

Athena Query editor에서 employees 테이블 조회 결과. 5개 행이 정상적으로 조회됩니다.

Lake Formation 권한

Lake Formation은 AWS Glue Data Catalog에 대한 세밀한 접근 제어를 제공합니다. 데이터베이스, 테이블, 컬럼, 행 수준에서 권한을 관리할 수 있으며, IAM Identity Center와 통합하여 TIP 사용자에게 권한을 부여합니다.

Lake Formation 관리자 권한 설정

Lake Formation Console로 이동합니다.

처음 Lake Formation에 접속하는 경우, 아래와 같이 현재 AWS 사용자가 Lake Formation의 관리자 권한을 부여받도록 설정하며 시작합니다.

Lake Formation의 데이터 레이크 관리자 추가

“Welcome to Lake Formation” 다이얼로그. “Add myself”를 선택하여 현재 사용자를 데이터 레이크 관리자로 지정합니다.

Lake Formation Identity Center 사용 설정

아래 “IAM Identity Center Integration” 메뉴를 통해서 설정합니다.

해당 메뉴에서 “Create” 버튼만 눌러서 수행합니다.

Lake Formation IAM Identity Center 통합 생성

생성하고 나면, 아래와 같이 IAM Identity Center Integration 화면이 보입니다.

Default 메뉴를 통해서 생성된 경우에는 아래와 같이, IAM Identity Center instance ARN에 IdC의 ARN이 보이게 됩니다.

Lake Formation IAM Identity Center 통합 성공 상태

IAM Identity Center integration 상세 화면. Integration status가 “Success”로 표시됩니다.

Location Role 생성

데이터가 저장된 S3 경로를 Lake Formation으로 관리하려면, 해당 경로를 data lake location으로 등록해야 합니다. 등록 시에는 Lake Formation이 S3에 접근할 때 사용할 IAM role을 함께 지정합니다. 먼저 이 role부터 생성해 보겠습니다.

IAM으로 이동합니다.

그리고 “Custom trust policy” 방식으로 role 생성을 진행합니다.

IAM 역할 생성의 Custom trust policy 선택 화면

IAM Role 생성 화면에서 “Custom trust policy” 방식을 선택합니다.

그리고 Lakeformation-location-role 이라는 이름으로 Role을 생성합니다.

Custom Trust policy를 아래와 같이 작성합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "lakeformation.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetContext"
            ]
        }
    ]
}

아래와 같이 AmazonS3FullAccess와 AWSLakeFormationDataAdmin  두 개의 Managed policy를 Role에 추가합니다.

Lakeformation-location-role에 연결된 권한 정책

생성된 Lakeformation-location-role의 Permissions 탭. AmazonS3FullAccess, AWSLakeFormationDataAdmin, PassRolePermissions 정책이 연결되어 있습니다.

PassRolePermissions Inline policy를 추가합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PassRolePermissions",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::{account-id}:role/Lakeformation-location-role"
            ]
        }
    ]
}

Location 등록

Lake formation console UI에서 Administration 메뉴 아래의 “Data lake locations”를 클릭합니다.

Register location을 클릭합니다.

여기에서 사용할 S3 위치를 지정하고, 위에서 생성한 Lakeformation-location-role을 IAM role로 지정합니다.

Lake Formation S3 데이터 위치 및 IAM 역할 등록

Register location를 클릭하여 location을 생성합니다.

Location 권한 등록

Lake location에 대한 사용권한 등록은 Permissions > Data location 메뉴를 통해서 진행합니다.

이 메뉴에서 “Grant”를 클릭합니다.

Lake Formation 데이터 위치 권한 부여 대화상자

Grant permissions 다이얼로그. 대상 계정(My account), SageMakerExecutionRoleForTIP, 등록한 storage location을 지정하고 Grant를 클릭합니다.

SageMaker 실행 역할에 부여된 Lake Formation 데이터 위치 권한

권한 부여가 완료되면 Data locations 목록에서 SageMakerExecutionRoleForTIP 항목을 확인할 수 있습니다.

테이블 사용 권한 부여

이제 Lake Formation의 Identity Center 권한 부여 기능을 활용해서 위에서 생성된 테이블에 대해서, IdC의 emma 라는 유저가 해당 테이블에 대해서 권한을 가질 수 있도록 권한을 부여해 줄 수 있습니다.

Lake formation 메뉴에서 “Permissions” > “Data Permissions”를 선택합니다.

여기에서, “Grant” 버튼을 클릭합니다.

Lake Formation Data permissions의 Grant 버튼

Permissions > Data permissions 화면. “Grant” 버튼을 클릭합니다.

아래 메뉴에서 “Principals”를 선택합니다.

“IAM Identity Center”를 선택합니다.

그리고 “Add users and Groups”를 클릭합니다.

Lake Formation 권한 주체로 IAM Identity Center 선택

Grant permissions 화면. Principals에서 “IAM Identity Center”를 선택합니다.

여기에서 위에서 생성한 emma를 검색해서 선택합니다.

Lake Formation 권한을 부여할 테스트 사용자 선택

Assign users and groups 다이얼로그에서 emma를 검색하여 선택합니다.

그러면 아래와 같이 사용자가 추가된 것을 알 수 있습니다.

Lake Formation 권한 주체에 추가된 테스트 사용자

emma가 Principal로 추가된 모습.

아래와 같이 위에서 생성한 테이블에 해당하는 권한을 추가합니다.

Lake Formation employees 테이블 및 테이블 권한 선택

Named Data Catalog resources에서 lf_demo 데이터베이스의 employees 테이블을 선택하고 Table permissions를 지정합니다.

Athena Workgroup 생성

Athena Workgroup은 쿼리 실행 환경을 격리하고 비용을 추적하는 데 사용됩니다. TIP를 지원하려면 Workgroup의 Authentication을 “IAM Identity Center”로 설정해야 합니다.

Athena Workgroup 생성

Athena Console에서 Workgroups > Create workgroup을 선택합니다.

Athena tip-workgroup 생성 및 이름 지정

Create workgroup 화면. Workgroup name에 “tip-workgroup”을 입력합니다.

Athena Workgroup의 IAM Identity Center 인증 선택

Authentication에서 “AWS IAM Identity Center”를 선택합니다. Athena가 IdC에 접근하기 위한 서비스 role이 함께 생성됩니다.

그리고 아래와 같이 쿼리 결과를 저장할 S3 경로를 지정합니다. Query result location 경로 끝에는 “/”를 반드시 포함하세요.

이때, S3 bucket은 S3 Access Grants를 통해서 권한이 지정된 버킷을 사용하도록 지정해야 합니다.

위의 세팅에서 만든 버킷을 사용해야 하며, 그렇지 않은 경우 일반 버킷으로 지정하면 권한 부족으로 에러가 발생합니다.

Athena 쿼리 결과 S3 경로 및 S3 Access Grants 설정

Query result configuration 화면. “Customer managed”를 선택하고 S3 Access Grants로 권한을 지정한 버킷 경로를 입력합니다. IdC 인증 workgroup에서는 “Enable S3 Access Grants”가 기본으로 활성화됩니다.

사용자 할당

이제 생성된 Workgroup을 사용할 수 있는 사용자를 지정해야 합니다.

생성된 tip-workgroup을 선택합니다.

그리고 “Users” 탭을 선택합니다.

그리고 “Assign Users”를 클릭합니다.

Athena tip-workgroup Users 탭의 Assign users 버튼

tip-workgroup 상세 화면. Authentication이 “AWS IAM Identity Center”로 설정된 것을 확인하고 Users 탭에서 “Assign users”를 클릭합니다.

Athena Workgroup에 할당할 테스트 사용자 선택

Assign users 다이얼로그에서 emma를 선택해 할당합니다.

Athena tip-workgroup에 할당된 테스트 사용자

emma가 tip-workgroup 사용자로 할당되었습니다.

SageMaker Studio Notebook을 통해서 쿼리 수행

SageMaker Studio는 데이터 과학자가 실제로 작업하는 환경입니다. JupyterLab 노트북에서 Python 코드를 통해 S3 Access Grants와 Athena에 접근하고, TIP를 통해 사용자 ID가 전파되는 것을 확인합니다.

SageMaker Studio 접속

  1. SageMaker Console에서 생성한 Domain을 선택합니다.
  2. 할당된 사용자(emma)를 선택하고Open Studio를 클릭합니다.

SageMaker 대시보드의 사용자 프로필 및 Open Studio 버튼

SageMaker Dashboard에서 사용자 프로필을 선택하고 “Open Studio” 버튼을 클릭합니다.

SSO 로그인 화면을 통해서 로그인을 수행합니다.

AWS IAM Identity Center 사용자 로그인 화면

Studio 실행 화면. 로그인 완료 후 브라우저가 Studio 환경으로 리다이렉트됩니다.

그리고 JupyterLab 노트북 환경을 생성합니다.

SageMaker Studio JupyterLab 화면

Jupyter notebook을 사용할 수 있는 JupyterLab을 생성합니다.

SageMaker Studio JupyterLab Space 생성

그런 다음 Python 3 커널의 노트북을 생성합니다.

JupyterLab Launcher에서 Python 3 노트북 생성

Athena 쿼리 실행

PyAthena 라이브러리를 설치하고 쿼리를 실행합니다:

# PyAthena 설치
!pip install pyathena
 
import pandas as pd
from pyathena import connect
 
# Athena 연결 설정
output_location = "s3://sagemaker-tip-access-test-{account-id}/"
workgroup = "tip-workgroup"
 
conn = connect(
    s3_staging_dir=output_location,
    region_name='ap-northeast-2',
    work_group=workgroup
)
 
# 쿼리 실행
query = """
SELECT *
FROM lf_demo.employees
WHERE region = 'KR'
"""
 
df = pd.read_sql(query, conn)
print(df)

예상 결과:

   id     name department  salary region

0   1    Alice    Finance  120000     KR

1   3  Charlie    Finance  130000     KR

CloudTrail에서 로그 확인

TIP의 핵심 가치는 CloudTrail 로그에서 실제 사용자 ID를 추적할 수 있다는 점입니다. CloudTrail 로그 내에서 onBehalfOf 필드를 통해 어떤 사용자가 어떤 데이터에 접근했는지 완전하게 감사할 수 있습니다.

S3 GetDataAccess 이벤트 확인

  1. CloudTrail Console에서 Event history로 이동합니다.
  2. Event name으로 GetDataAccess를 검색합니다.

해당 이벤트를 선택하여 상세 내용을 확인합니다.

CloudTrail Event history의 GetDataAccess 이벤트 검색

Event history 목록에서 GetDataAccess 이벤트를 확인할 수 있습니다.

TIP가 활성화된 경우의 로그

아래와 같이 Trail log를 확인할 수 있으며, userIdentity 항목 내의 onBehalfOf 항목을 통해서 user ID를 확인할 수 있습니다. 또한, 어느 대상 S3 객체에 대해 어떤 권한이 요청되었는지도 requestParameters 항목을 통해 확인 가능합니다.

{
  "eventVersion": "1.11",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROA...:SageMaker",
    "arn": "arn:aws:sts::{account-id}:assumed-role/SageMakerExecutionRoleForTIP/SageMaker",
    "accountId": "{account-id}",
    "accessKeyId": "ASIA...",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AROA...",
        "arn": "arn:aws:iam::{account-id}:role/SageMakerExecutionRoleForTIP",
        "accountId": "{account-id}",
        "userName": "SageMakerExecutionRoleForTIP"
      },
      "attributes": {
        "creationDate": "2026-04-10T00:36:43Z",
        "mfaAuthenticated": "false"
      }
    },
    "onBehalfOf": {
      "userId": "34e86dbc-70b1-7000-19e9-052a443e60ad",
      "identityStoreArn": "arn:aws:identitystore::{account-id}:identitystore/d-xxxxxxxxxx"
    }
  },
  "eventTime": "2026-04-10T00:57:38Z",
  "eventSource": "s3.amazonaws.com",
  "eventName": "GetDataAccess",
  "requestParameters": {
    "permission": "READ",
    "target": "s3://sagemaker-tip-access-test-{account-id}/test.txt"
  },
  "additionalEventData": {
    "accessGrantsInfo": {
      "matchedAccessGrantArn": "arn:aws:s3:{region}:{account-id}:access-grants/default/grant/f600aa86-..."
    }
  }
}

TIP가 없는 경우와의 비교

TIP가 활성화되지 않은 경우, CloudTrail 로그의 userIdentity 항목 내에는 onBehalfOf 필드가 없으며 Role ARN만 기록되어 실제 사용자를 식별할 수 없습니다.

항목 TIP 미사용 TIP 사용
Role ARN ✓ 기록됨 ✓ 기록됨
onBehalfOf ✗ 없음 ✓ 사용자 ID 기록
사용자 식별 ✗ 불가능 ✓ 가능
감사 추적 ✗ 불완전 ✓ 완전
규정 준수 ✗ 어려움 ✓ 용이

리소스 정리

테스트를 마친 후 불필요한 과금과 권한 잔존을 방지하기 위해 생성한 리소스를 정리합니다.

  • SageMaker Studio: 실행 중인 JupyterLab space를 중지하고, User profile과 Domain을 삭제합니다.
  • Athena: tip-workgroup을 삭제합니다.
  • Lake Formation: 부여한 Data permissions, data lake location 등록, IAM Identity Center integration을 제거합니다.
  • S3 Access Grants: Grant, Location, Access Grants instance를 순서대로 삭제합니다.
  • S3: 테스트 버킷 2개(데이터, 쿼리 결과)를 비우고 삭제합니다.
  • IAM: SageMakerExecutionRoleForTIP, S3AGRoleForTIP, Lakeformation-location-role을 삭제합니다.
  • IAM Identity Center: 테스트 사용자(emma)를 삭제합니다. 조직에서 IdC를 계속 사용할 계획이 없는 경우에만 인스턴스를 비활성화합니다.

결론

이 블로그에서는 Amazon SageMaker Studio에서 Trusted Identity Propagation을 활용하여 S3 Access Grants 및 Lake Formation과 통합하고, Athena 쿼리를 실행하는 엔드투엔드 구현 방법을 스크린샷과 함께 살펴보았습니다.

핵심 요약

  1. TIP 활성화: SageMaker Studio Domain 생성 시 “Enable trusted identity propagation for all users on this domain” 옵션을 선택하고, Execution Role의 Trust Policy에 sts:SetContext를 추가합니다.
  2. 세밀한 권한 제어: S3 Access Grants와 Lake Formation을 조합하여 사용자별로 S3 객체와 데이터 카탈로그에 대한 세밀한 접근 권한을 부여합니다.
  3. 완전한 감사 추적: CloudTrail의 onBehalfOf 필드를 통해 실제 사용자 ID를 추적하여 규정 준수와 보안 감사를 용이하게 수행할 수 있습니다.
  4. 통합 아키텍처: IAM Identity Center, SageMaker TIP, S3 Access Grants, Lake Formation, Athena가 통합된 솔루션으로 엔터프라이즈급 보안 거버넌스를 구현합니다.

비즈니스 가치

  • 보안 강화: 사용자별 최소 권한 원칙을 적용하여 데이터 유출 위험을 최소화합니다.
  • 규정 준수: GDPR, HIPAA 등의 규정 준수 요구사항을 충족하는 완전한 감사 추적을 제공합니다.
  • 운영 효율성: 단일 SageMaker Studio Domain에서 여러 사용자를 관리하여 인프라 복잡도와 비용을 절감합니다.
  • 확장성: IAM Identity Center를 통한 중앙 집중식 ID 관리로 대규모 조직에도 쉽게 확장할 수 있습니다.

TIP는 데이터 과학 팀의 생산성을 유지하면서도 엔터프라이즈급 보안과 거버넌스를 구현할 수 있는 강력한 솔루션입니다. 이 가이드를 통해 여러분의 조직에서도 TIP를 성공적으로 구현하시기 바랍니다.

참고 자료

Byeong-eok Kang

Byeong-eok Kang

강병억 솔루션즈 아키텍트는 금융회사의 IT시스템에 대한 구축 및 컨설팅 경험을 가지고 있어서, 금융 IT 요구사항에 적합한 클라우드 시스템을 구성하고 사용하실 수 있도록 도움을 드리는 역할을 하고 있습니다. 금융IT이외에도 Database, AIML, Analytics, SaaS 등의 다양한 기술 영역에 대해서도 고객들에게 AWS를 잘 사용하실 수 있도록 가이드를 제공해 드리고 합니다.

JongHyok Lee

JongHyok Lee

이종혁 Sr Analytics Specialist SA는 데이터와 애플리케이션 영역의 분석, 설계 및 구현과 관련된 다양한 경험을 바탕으로 고객분들께서 AWS의 분석 서비스들을 잘 활용하실 수 있도록 기술적인 도움을 드리고 있습니다.