SageMaker 노트북 인스턴스에 다른 AWS 계정의 CodeCommit 리포지토리에 대한 임시 액세스 권한 부여 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

SageMaker 노트북 인스턴스에 다른 AWS 계정의 CodeCommit 리포지토리에 대한 임시 액세스 권한 부여

작성자: Helge Aufderheide(AWS)

환경: 프로덕션

기술: DevOps; 분석; 기계 학습 및 AI; 관리 및 거버넌스

AWS 서비스: AWS CodeCommit, AWS 자격 증명 및 액세스 관리, 아마존 SageMaker

요약

이 패턴은 Amazon SageMaker 노트북 인스턴스와 사용자에게 다른 AWS 계정에 있는 AWS CodeCommit 리포지토리에 대한 임시 액세스 권한을 부여하는 방법을 보여줍니다. 또한 이 패턴은 각 엔티티가 각 리포지토리에서 수행할 수 있는 특정 작업에 대해 세분화된 권한을 부여하는 방법을 보여줍니다.

조직은 종종 개발 환경을 호스팅하는 계정과 다른 AWS 계정에 CodeCommit 리포지토리를 저장합니다. 이 다중 계정 설정은 리포지토리에 대한 액세스를 제어하고 실수로 삭제될 위험을 줄이는 데 도움이 됩니다. 이러한 교차 계정 권한을 부여하기 위해 AWS Identity and Access Management(IAM) 역할을 사용하는 것이 좋습니다. 그러면 각 AWS 계정의 사전 정의된 IAM ID가 일시적으로 역할을 맡아 계정 전체에 통제된 신뢰 체인을 만들 수 있습니다.

참고: 유사한 절차를 적용하여 다른 IAM ID에 리포지토리에 대한 교차 계정 액세스 권한을 부여할 수 있습니다. CodeCommit 자세한 내용은 AWS 사용 CodeCommit 설명서의 역할을 사용하여 AWS CodeCommit 리포지토리에 대한 교차 계정 액세스 구성을 참조하십시오.

사전 조건 및 제한 사항

사전 조건 

  • CodeCommit 리포지토리가 있는 활성 AWS 계정 (계정 A)

  • SageMaker 노트북 인스턴스가 있는 두 번째 활성 AWS 계정 (계정 B)

  • 계정 A에서 IAM 역할을 생성하고 수정할 수 있는 충분한 권한을 가진 AWS 사용자

  • 계정 B에서 IAM 역할을 생성하고 수정할 수 있는 충분한 권한을 가진 두 번째 AWS 사용자

아키텍처

다음 다이어그램은 SageMaker 노트북 인스턴스와 하나의 AWS 계정의 사용자에게 리포지토리에 대한 교차 계정 액세스 권한을 부여하는 예제 워크플로를 보여줍니다. CodeCommit

계정 간 액세스를 위한 워크플로 CodeCommit

이 다이어그램은 다음 워크플로를 보여줍니다.

  1. 계정 B의 AWS 사용자 역할 및 SageMaker 노트북 인스턴스 역할은 이름이 지정된 프로필을 가정합니다.

  2. 지정된 프로필의 권한 정책은 계정 A의 CodeCommit 액세스 역할을 지정하며, 이 액세스 역할은 해당 프로필이 위임합니다.

  3. 계정 A의 CodeCommit 액세스 역할 신뢰 정책에 따라 계정 B의 명명된 프로필이 CodeCommit 액세스 역할을 맡을 수 있습니다.

  4. 계정 A의 CodeCommit 리포지토리 IAM 권한 정책은 CodeCommit 액세스 역할이 CodeCommit 리포지토리에 액세스하는 것을 허용합니다.

기술 스택

  • CodeCommit

  • Git

  • IAM

  • pip

  • SageMaker

도구

  • CodeCommitAWS는 자체 소스 제어 시스템을 관리할 필요 없이 Git 리포지토리를 비공개로 저장하고 관리할 수 있는 버전 제어 서비스입니다.

  • AWS Identity and Access Management(IAM)는 사용자에 대한 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있습니다.

  • Git은 소프트웨어 개발 중에 소스 코드의 변경 사항을 추적하기 위한 분산 버전 제어 시스템입니다.

  • git-remote-codecommit CodeCommit Git을 확장하여 리포지토리에서 코드를 푸시하고 가져오는 데 도움이 되는 유틸리티입니다.

  • pip는 Python용 패키지 인스톨러입니다. pip를 사용하여 Python 패키지 색인 및 기타 색인에서 패키지를 설치할 수 있습니다.

모범 사례

IAM 정책을 사용하여 권한을 설정하는 경우 작업을 수행하는 데 필요한 권한만 부여했는지 확인합니다. 자세한 내용은 IAM 설명서의 최소 권한 적용을 참조하십시오.

이 패턴을 구현할 때는 다음을 수행해야 합니다.

  • IAM 원칙에 각 리포지토리 내에서 필요한 특정 작업을 수행하는 데 필요한 권한만 있는지 확인합니다. 예를 들어 승인된 IAM 원칙이 특정 리포지토리 브랜치에 변경 내용을 푸시하고 병합하도록 허용하되 보호된 브랜치에 대한 병합만 요청할 수 있도록 허용하는 것이 좋습니다.

  • IAM 원칙에 각 프로젝트의 역할 및 책임에 따라 서로 다른 IAM 역할이 할당되었는지 확인합니다. 예를 들어, 개발자는 릴리스 관리자 또는 AWS 관리자와는 다른 액세스 권한을 가집니다.

에픽

작업설명필요한 기술

CodeCommit 액세스 역할 및 권한 정책을 구성합니다.

참고: 이 에픽에 설명된 수동 설정 프로세스를 자동화하려면 AWS CloudFormation 템플릿을 사용할 수 있습니다.

CodeCommit 리포지토리가 포함된 계정 (계정 A) 에서 다음을 수행하십시오.

  1. 계정 B의 SageMaker 노트북 인스턴스 역할이 위임할 수 있는 IAM 역할을 생성합니다.

  2. 리포지토리에 대한 액세스 권한을 부여하는 IAM 정책을 생성하고 정책을 역할에 연결합니다. 테스트 목적으로만 AWSCodeCommitPowerUserAWS 관리형 정책을 선택하십시오. 이 정책은 리소스 삭제 CodeCommit 권한을 제외한 모든 권한을 부여합니다.

  3. 계정 B가 신뢰할 수 있는 엔티티로 나열되도록 역할의 신뢰 정책을 수정합니다.

중요: 이 설정을 프로덕션 환경으로 이전하기 전에 최소 권한을 적용하는 자체 IAM 정책을 작성하는 것이 좋습니다. 자세한 내용은 이 패턴의 추가 정보 섹션을 참조하세요.

일반 AWS, AWS DevOps

계정 B의 SageMaker 노트북 인스턴스 역할에 계정 A에서 CodeCommit 액세스 역할을 맡을 수 있는 권한을 부여합니다.

SageMaker 노트북 인스턴스의 IAM 역할 (계정 B) 이 포함된 계정에서 다음을 수행하십시오.

  1. IAM 역할 또는 사용자가 계정 A의 CodeCommit 액세스 역할을 수임하도록 허용하는 IAM 정책을 생성합니다.

    IAM 역할 또는 사용자가 크로스 계정 역할을 맡도록 허용하는 IAM 권한 정책의 예

    {   "Version": "2012-10-17",   "Statement": [       {     "Sid": "VisualEditor0",     "Effect": "Allow",     "Action": "sts:AssumeRole",     "Resource": "arn:aws:iam:::accountA_ID:role/accountArole_ID"   } }
  2. 정책을 계정 B에 있는 SageMaker 노트북 인스턴스의 역할에 연결합니다.

  3. 계정 B의 SageMaker 노트북 인스턴스 역할이 계정 A의 CodeCommit 액세스 역할을 맡도록 하십시오.

참고: 리포지토리의 Amazon 리소스 이름 (ARN) 을 보려면 AWS CodeCommit 사용 설명서의 CodeCommit 리포지토리 세부 정보 보기를 참조하십시오.

일반 AWS, AWS DevOps
작업설명필요한 기술

AWS SageMaker 노트북 인스턴스에서 계정 A에서 역할을 맡을 사용자 프로필을 설정합니다.

중요: 최신 버전의 AWS Command Line Interface(AWS CL) 가 설치되어 있어야 합니다.

SageMaker 노트북 인스턴스가 포함된 계정 (계정 B) 에서 다음을 수행하십시오.

  1. AWS 관리 콘솔에 로그인하고 SageMaker 콘솔을 엽니다.

  2. SageMaker 노트북 인스턴스에 액세스하십시오. Jupyter 인터페이스가 열립니다.

  3. 새로 만들기를 선택한 다음 터미널을 선택합니다. Jupyter 환경에 새 터미널 창이 열립니다.

  4. SageMaker 노트북 인스턴스의 ~/.aws/config 파일로 이동합니다. 그런 다음 아래의 명령문을 입력하여 파일에 사용자 프로필을 추가합니다.

------.aws/config-------------- [profile remoterepouser] role_arn = arn:aws:iam::<ID of Account A>:role/<rolename> role_session_name = remoteaccesssession region = eu-west-1 credential_source = Ec2InstanceMetadata ----------------------------------
일반 AWS, AWS DevOps

git-remote-codecommit 유틸리티 설치.

AWS 사용 CodeCommit 설명서의 2단계: git-remote-codecommit 설치의 지침을 따르십시오.

데이터 사이언티스트
작업설명필요한 기술

Git 명령 또는 을 사용하여 CodeCommit 저장소에 액세스합니다. SageMaker

Git 사용하기

계정 B에서 SageMaker 노트북 인스턴스의 역할을 맡은 IAM 보안 주체는 이제 Git 명령을 실행하여 계정 A의 CodeCommit 저장소에 액세스할 수 있습니다. 예를 들어,, 사용자는, 등의 명령을 실행할 수 있습니다. git clone git pull git push

지침은 AWS 사용 CodeCommit 설명서의 AWS CodeCommit 리포지토리에 연결을 참조하십시오.

Git을 CodeCommit 에서 사용하는 방법에 대한 자세한 내용은 AWS 사용 CodeCommit 설명서의 AWS 시작하기를 참조하십시오. CodeCommit

사용하려면 SageMaker

SageMaker 콘솔에서 Git을 사용하려면 Git이 리포지토리에서 자격 증명을 검색하도록 허용해야 합니다. CodeCommit 지침은 설명서에서 다른 AWS 계정의 CodeCommit 리포지토리를 노트북 인스턴스와 연결을 SageMaker 참조하십시오.

Git, bash 콘솔

관련 리소스

추가 정보

특정 작업에 대한 권한 제한 CodeCommit

IAM 보안 주체가 CodeCommit 저장소에서 수행할 수 있는 작업을 제한하려면 CodeCommit 액세스 정책에서 허용되는 작업을 수정하십시오.

CodeCommit API 작업에 대한 자세한 내용은 AWS 사용 CodeCommit 설명서의 CodeCommit 권한 참조를 참조하십시오.

참고: 사용 사례에 맞게 AWSCodeCommitPowerUserAWS 관리형 정책을 편집할 수도 있습니다.

특정 리포지토리에 CodeCommit 대한 권한 제한

특정 사용자만 둘 이상의 코드 리포지토리에 액세스할 수 있는 멀티테넌트 환경을 만들려면 다음을 수행합니다.

  1. 계정 A에서 여러 CodeCommit 액세스 역할을 만든 다음, 계정 B의 특정 사용자가 역할을 수임할 수 있도록 각 액세스 역할의 신뢰 정책을 구성합니다.

  2. 각 CodeCommit 액세스 역할의 정책에 “리소스” 조건을 추가하여 각 역할이 맡을 수 있는 코드 저장소를 제한하세요.

IAM 보안 주체의 특정 리포지토리 액세스를 제한하는 “리소스” 조건의 예 CodeCommit

"Resource" : [<REPOSITORY_ARN>,<REPOSITORY_ARN> ]

참고: 동일한 AWS 계정에서 여러 코드 리포지토리를 식별하고 구별하기 위해 리포지토리 이름에 다른 접두사를 할당할 수 있습니다. 예를 들어 myproject-subproject1-repo1myproject-subproject2-repo1과 같이 다양한 개발자 그룹에 맞는 접두사를 사용하여 코드 리포지토리의 이름을 지정할 수 있습니다. 그런 다음 개발자 그룹에 할당된 접두사를 기반으로 각 개발자 그룹에 대한 IAM 역할을 생성할 수 있습니다. 예를 들어 myproject-subproject1-repoaccess라는 역할을 생성하고 myproject-subproject1 접두사가 포함된 모든 코드 리포지토리에 대한 액세스 권한을 부여할 수 있습니다.

특정 접두사가 포함된 코드 리포지토리 ARN을 참조하는 “리소스” 조건의 예

"Resource" : arn:aws:codecommit:<region>:<account-id>:myproject-subproject1-*