AWS 기술 블로그

Amazon SageMaker Studio에서 유저별 접근 권한 관리하기

Amazon SageMaker Studio는 모든 머신러닝 개발 단계를 수행할 수 있는 웹 기반의 단일 시각적 인터페이스를 제공하여, 데이터 사이언스 팀의 생산성을 높일 수 있는 AWS의 대표적 서비스입니다. SageMaker Studio에서는 다양한 유저 프로필을 등록함으로써 개별 사용자가 독립적 개발 환경을 제공할 수 있습니다. 하지만, 권한 관리를 별도로 해주지 않으면 다른 사용자의 환경에 접근하여 개발 환경 및 코드를 임의로 수정할 수도 있습니다. 보안 수준을 높이고, 실수로 발생할 수 있는 장애나 오류를 예방하기 위하여 추가적인 사용자 간의 접근 권한 관리를 구성할 필요가 있습니다.

솔루션 개요

도메인은 AWS 계정 및 리전 당 한 개를 생성할 수 있습니다. 따라서 하나의 계정을 여러 사용자가 함께 사용하는 경우 동일 도메인에 유저 프로필을 나누어 구성하게 됩니다. 사용자의 권한 관리를 하는 방식은 IAM 사용자 이름과 유저 프로필의 태깅 비교를 통해 노트북 접근을 제어하는 방식과 실행 역할 기반으로 권한 관리는 하는 두 가지 방식으로 나뉩니다. 두 가지 방식은 서로 다른 사용 사례에서 활용할 수 있으며, 이 게시글에서는 태깅을 통해 제어하는 방식에 대해 소개하겠습니다.

해당 게시글은 AWS Machine Learning Blog10분만에 따라잡는 AWS 머신러닝 시리즈를 참고하여 작성되었고, 각 링크를 통해 좀 더 세부적인 내용을 확인하실 수 있습니다.

단계 요약

  • 단계 1 : SageMaker Studio를 사용하기 위한 환경을 구성합니다. 만약 현재 사용할 수 있는 환경이 AWS 계정 내에 구성되어 있다면 해당 단계를 건너뛸 수 있습니다.
  • 단계 2 : SageMaker Studio의 유저 프로필 생성 시 반드시 태그를 넣도록 어드민 사용자의 정책을 설정합니다. 그리고 SageMaker Studio를 사용하는 IAM 사용자를 생성하며, 이때 사용자 이름과 유저 프로필의 태그를 비교하는 구성을 합니다.
  • 단계 3 : SageMaker Studio의 유저 프로필을 생성하고, 정책에 지정된 태그 조건에 따라 사용자별 접근 테스트를 실행합니다.

사전 준비사항

솔루션을 배포하기 위해서는 아래와 같은 사항을 미리 준비해야 합니다.

단계 1 :

SageMaker Studio 도메인을 생성하는 단계입니다. 사용하고자 하는 계정에서 SageMaker Studio를 운영할 어드민 사용자 권한을 IAM을 통해 할당한 후, 도메인을 생성합니다. 현재 사용 중인 SageMaker Studio 도메인이 있다면 해당 환경을 그대로 사용할 수 있습니다. 신규 생성에 대한 더욱 상세한 가이드가 필요한 경우 AWS SageMaker 개발자 안내서를 참고할 수 있습니다.

  1. 어드민 사용자가 SageMaker 도메인 설정을 통해 신규 도메인을 설정합니다. 이때 하나의 계정 및 리전에는 하나의 도메인만 설정할 수 있습니다.
  2. 빠른 설정으로 SageMaker 도메인을 등록합니다. 고급 기능 사용을 위해서는 표준 설정으로 세부적인 설정값을 지정할 수 있으나, 여기서는 빠른 설정을 통해 도메인 설정을 합니다. 이때 유저 프로필의 이름 및 기본 실행 역할 (Execution Role)을 지정하게 되어있습니다. 기존에 사용하던 역할을 선택하거나 신규로 생성할 수 있습니다.
  3. 전송 버튼을 누른 후 SageMaker 도메인에서 사용할 VPC와 서브넷을 선택합니다. 서브넷은 여러 개를 선택할 수 있습니다.
  4. 제어판을 통해 Studio의 도메인과 유저 프로필이 정상적으로 생성된 것을 확인합니다. 도메인 상태가 Ready(준비)인 상태로 나타나야 합니다.

단계 2 :

어드민 사용자와 개발 환경을 이용하는 일반 사용자에게 IAM을 이용해서 정책을 생성하고 부여 합니다. 어드민 사용자는 SageMaker Studio에 유저 프로필을 만들 때, 반드시 태그를 지정하도록 강제하는 설정을 추가하는 것입니다. 일반 사용자는 노트북 환경에 접속할 때 호출하는 API (CreatePresignedDomainUrl)에 조건을 부여하여 유저 프로필의 태그와 사용자 이름이 같을 경우만 허용하는 설정을 함으로써 접근 권한을 제어합니다.

  1. IAM – 사용자 메뉴에서 어드민 사용자를 선택 후 권한 탭에 있는 인라인 정책을 추가합니다. JSON으로 정책을 생성하고, 아래 정책을 추가해 줍니다. SageMaker:CreateUserProfile API를 호출할 때, studiouserid라는 키값을 가진 태그를 포함하지 않으면 호출을 허용하지 않는 정책입니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "CreateSageMakerStudioUserProfilePolicy",
                "Effect": "Deny",
                "Action": "sagemaker:CreateUserProfile",
                "Resource": "*",
                "Condition": {
                    "ForAllValues:StringNotEquals": {
                        "aws:TagKeys": [
                            "studiouserid"
                        ]
                    }
                }
            }
        ]
    }
  2. SageMaker Studio의 개발 환경을 이용할 일반 사용자 계정을 IAM을 통해 생성합니다. IAM 사용자가 아닌 IAM Identity Center를 이용할 경우 적용 정책이 달라지며, 이 경우 AWS Machine Learning Blog를 참조하시기 바랍니다.
    1. 사용자 그룹을 생성하고 SageMaker Studio를 사용하기 위한 정책을 추가해 줍니다.
    2. 동일 사용자 그룹 내 사용자를 두 명 생성합니다. 이 글에서는 user-a1과 user-a2로 생성했습니다.
    3. 노트북 환경에 접속 시 호출되는 API (CreatePresignedDomainUrl)를 이용하여 태그 정보와 사용자 이름을 비교하는 정책을 추가합니다. 사용자 그룹에 인라인 정책으로 추가하거나 별도 정책 생성 후 권한 연동해 줄 수 있습니다.
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "AmazonSageMakerPresignedUrlPolicy",
                  "Effect": "Deny",
                  "Action": [
                      "sagemaker:CreatePresignedDomainUrl"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringNotEquals": {
                          "sagemaker:ResourceTag/studiouserid": "${aws:username}"
                      }
                  }
              }
          ]
      }

단계 3 :

이제 모든 준비는 완료되었습니다. SageMaker Studio의 유저 프로필을 CLI를 통해 생성하고, 태그와 사용자 이름을 비교하여 접속 가능 여부에 대해 테스트할 차례입니다.

  1. 어드민 사용자가 CLI로 SageMaker Studio의 유저 프로필을 생성합니다. AWS 웹 콘솔은 태그 지정이 안 되기 때문에 CLI를 통해 진행하며, 사용자 이름과 동일하게 구성해 줍니다. 여기서는 user-a1으로 생성합니다.
    $ aws sagemaker create-user-profile --domain-id <domain-id> --user-profile-name <user-profile-name> --tags Key=studiouserid,Value=user-a1
  2. user-a1으로 로그인해서 SageMaker Studio의 user-a1 유저 프로필에 구성된 앱을 접속합니다. 정상적으로 SageMaker Studio가 실행되는 것을 확인할 수 있습니다.
  3. user-a2로 로그인해서 SageMaker studio의 user-a1 유저 프로필에 구성된 앱을 접속합니다. 이때 IAM을 통해 설정된 정책으로 인해 다음과 같은 에러 메시지가 발생하게 됩니다. 따라서 태그가 일치하지 않는 사용자는 개발 환경에 접속하지 못하도록 접근 제어 구성을 완료한 것입니다.

IAM 정책 수립

이 게시글에서는 어드민 및 일반 사용자가 기존에 각각 CreateUserProfile, CreatePresignedDomainUrl API에 대한 권한을 가지고 있는 것으로 가정하여 Deny 정책을 StringNotEquals 조건과 함께 사용 하였습니다. AWS Machine Learning Blog의 경우 반대의 가정을 하고 Allow 정책을 StringEquals 조건으로 적용하였는데, 둘 간의 차이점을 확인하고 나의 환경에 맞는 정책을 선택적으로 적용하실 수 있습니다.

리소스 정리하기

SageMaker Studio에서 개발 환경 구성을 위해 사용되는 인스턴스에 대한 과금이 발생할 수 있습니다. 이 블로그에서 사용했던 리소스는 향후 불필요한 과금 방지를 위해 삭제하세요.

결론

SageMaker Studio에서 다수의 사용자가 이용할 때 개발환경에 대한 접근 제어를 구현하는 방법에 대해 알아보았습니다. 더욱 안전한 개발 및 운영 환경을 구축하고자 하시는 분들을 위해 도움이 되었으면 합니다.

Ilku Lee

Ilku Lee

이일구 솔루션즈 아키텍트는 고객분들이 AWS의 다양한 솔루션들을 최적의 아키텍처를 통해 보다 잘 활용할 수 있도록 도와드리는 역할을 하고 있습니다. 이커머스 분야의 오랜 경험과 인사이트를 바탕으로 고객분들이 겪는 어려움을 해결할 수 있도록 함께 고민하고 기술적 조언을 드리고 있습니다.