

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

# SageMaker 노트북 인스턴스에 다른 AWS 계정의 CodeCommit 리포지토리에 대한 임시 액세스 권한 부여
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account"></a>

*Helge Aufderheide, Amazon Web Services*

## 요약
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-summary"></a>

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

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

**참고**  
유사한 절차를 적용하여 다른 IAM ID에 CodeCommit 리포지토리에 대한 크로스 계정 액세스 권한을 부여할 수 있습니다. 자세한 내용은 *AWS CodeCommit 사용 설명서*의 [역할을 사용하여 AWS CodeCommit 리포지토리에 대한 크로스 계정 액세스 구성](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html)을 참조하세요.

## 사전 조건 및 제한 사항
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-prereqs"></a>

**사전 조건 **
+ CodeCommit 리포지토리가 있는 활성 AWS 계정(*계정 A*)
+ SageMaker 노트북 인스턴스가 있는 두 번째 활성 AWS 계정 (*계정 B*)
+ 계정 A에서 IAM 역할을 생성하고 수정할 수 있는 충분한 권한을 가진 AWS 사용자
+ 계정 B에서 IAM 역할을 생성하고 수정할 수 있는 충분한 권한을 가진 두 번째 AWS 사용자

## 아키텍처
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-architecture"></a>

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

![\[CodeCommit에 대한 크로스 계정 액세스를 위한 워크플로우\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/54d0fdb3-6d25-4433-9f67-c87846633d61/images/97a799af-ce88-4495-a61c-d0cd22493ce2.png)


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

1. 계정 B의 AWS 사용자 역할 및 SageMaker 노트북 인스턴스 역할은 [명명된 프로필](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles)을 가정합니다.

1. 명명된 프로필의 권한 정책은 계정 A의 CodeCommit 액세스 역할을 지정합니다. 그러면 해당 프로필이 이 역할을 수임합니다.

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

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

**기술 스택**
+ CodeCommit
+ Git
+ IAM
+ pip
+ SageMaker

## 도구
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-tools"></a>
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)은 나만의 원본 제어 시스템을 관리할 필요 없이 Git 리포지토리를 비공개로 저장하고 관리할 수 있는 버전 제어 서비스입니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 사용자에 대한 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있습니다.
+ [Git](https://git-scm.com/)은 소프트웨어 개발 중에 소스 코드의 변경 사항을 추적하기 위한 분산 버전 제어 시스템입니다.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)은 Git을 확장하여 CodeCommit 리포지토리에서 코드를 푸시하고 가져오는 데 도움이 되는 유틸리티입니다.
+ [pip](https://pypi.org/project/pip/)는 Python용 패키지 인스톨러입니다. pip를 사용하여 Python 패키지 색인 및 기타 색인에서 패키지를 설치할 수 있습니다.

## 모범 사례
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-best-practices"></a>

IAM 정책을 사용하여 권한을 설정하는 경우 작업을 수행하는 데 필요한 권한만 부여했는지 확인합니다. 자세한 내용은 IAM 설명서의 [최소 권한 적용](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)을 참조하십시오.

이 패턴을 구현할 때는 다음을 수행해야 합니다.
+ IAM 원칙에 각 리포지토리 내에서 필요한 특정 작업을 수행하는 데 필요한 권한만 있는지 확인합니다. 예를 들어 승인된 IAM 원칙이 특정 리포지토리 브랜치에 변경 내용을 푸시하고 병합하도록 허용하되 보호된 브랜치에 대한 병합만 요청할 수 있도록 허용하는 것이 좋습니다.
+ IAM 원칙에 각 프로젝트의 역할 및 책임에 따라 서로 다른 IAM 역할이 할당되었는지 확인합니다. 예를 들어, 개발자는 릴리스 관리자 또는 AWS 관리자와는 다른 액세스 권한을 가집니다.

## 에픽
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-epics"></a>

### IAM 역할 구성
<a name="configure-the-iam-roles"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CodeCommit 액세스 역할 및 권한 정책을 구성합니다. | 이 에픽에** **설명된 수동 설정 프로세스를 자동화하려면 [AWS CloudFormation 템플릿](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)을 사용할 수 있습니다.CodeCommit 리포지토리가 포함된 계정(*계정 A*)에서 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)이 설정을 프로덕션 환경으로 이전하기 전에 [최소 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)을 적용하는 자체 IAM 정책을 작성하는 것이 좋습니다. 자세한 내용은 이 패턴의 **추가 정보** 섹션을 참조하세요. | 일반 AWS, AWS DevOps | 
| 계정 B의 SageMaker 노트북 인스턴스 역할에 계정 A의 CodeCommit 액세스 역할을 수임할 수 있는 권한을 부여합니다. | SageMaker 노트북 인스턴스의 IAM 역할(*계정 B*)이 포함된 계정에서 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)리포지토리의 Amazon 리소스 이름(ARN)을 보려면 *AWS CodeCommit 사용 설명서*의 [CodeCommit 리포지토리 세부 정보 보기](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-view-repository-details.html)를 참조하세요. | 일반 AWS, AWS DevOps | 

### 계정 B에서 SageMaker 노트북 인스턴스 설정
<a name="set-up-your-sagemaker-notebook-instance-in-account-b"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SageMaker 노트북 인스턴스에서 계정 A의 역할을 맡을 사용자 프로필을 설정합니다. | [최신 버전의 AWS Command Line Interface(AWS CL) 가 설치되어 있어야 합니다](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).SageMaker 노트북 인스턴스가 포함된 계정(*계정 B*)에서 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)<pre>------.aws/config--------------<br />[profile remoterepouser]<br />role_arn = arn:aws:iam::<ID of Account A>:role/<rolename><br />role_session_name = remoteaccesssession<br />region = eu-west-1<br />credential_source  = Ec2InstanceMetadata<br />----------------------------------</pre> | 일반 AWS, AWS DevOps | 
| git-remote-codecommit 유틸리티를 설치합니다. | *AWS CodeCommit 사용 설명서*의 [2단계: git-remote-codecommit 설치](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install)의 지침을 따릅니다. | 데이터 과학자 | 

### 리포지토리에 액세스
<a name="access-the-repository"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Git 명령 또는 SageMaker를 사용하여 CodeCommit 리포지토리에 접근할 수 있습니다. | **Git 사용하기**계정 B에서 SageMaker 노트북 인스턴스의 역할을 맡은 IAM 주체는 이제 Git 명령을 실행하여 계정 A의 CodeCommit 리포지토리에 액세스할 수 있습니다. 예를 들어, 사용자는, `git clone`, `git pull`, `git push` 등의 명령을 실행할 수 있습니다.지침은 *AWS CodeCommit 사용 설명서*의 [AWS CodeCommit 리포지토리에 연결](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)을 참조하세요.CodeCommit과 함께 Git을 사용하는 방법에 대한 자세한 내용은 *AWS CodeCommit 사용 설명서*의 [AWS CodeCommit 시작하기](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started-cc.html)를 참조하세요.**SageMaker 사용하기**SageMaker 콘솔에서 Git을 사용하려면 Git이 CodeCommit 리포지토리에서 보안 인증 정보를 검색하도록 허용해야 합니다. 지침은 SageMaker 설명서의 [다른 AWS 계정의 CodeCommit 리포지토리를 노트북 인스턴스와 연결](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-cross.html)을 참조하세요. | Git, bash 콘솔 | 

## 관련 리소스
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-resources"></a>
+ [역할을 사용하여 AWS CodeCommit 리포지토리에 대한 크로스 계정 액세스 구성](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html)(AWS CodeCommit 설명서)
+ [IAM 자습서: IAM 역할을 사용한 AWS 계정 간 액세스 권한 위임](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)(IAM 설명서)

## 추가 정보
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-additional"></a>

**CodeCommit 권한을 특정 작업에 제한하기**

CodeCommit 리포지토리에서 IAM 주체가 수행할 수 있는 작업을 제한하려면 CodeCommit 액세스 정책에서 허용되는 작업을 수정합니다.

CodeCommit API 작업에 대한 자세한 내용은 *AWS CodeCommit 사용 설명서*의 [CodeCommit 권한 참조](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-permissions-reference.html)를 참조하세요.

**참고**  
사용 사례에 맞게 [AWSCodeCommitPowerUser](https://docs.aws.amazon.com/codecommit/latest/userguide/security-iam-awsmanpol.html#managed-policies-poweruser) AWS 관리형 정책을 편집할 수도 있습니다.

**CodeCommit 권한을 특정 리포지토리로 제한하기**

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

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

1. 각 CodeCommit 액세스 역할 정책에 **“리소스”** 조건을 추가하여 각 역할이 맡을 수 있는 코드 리포지토리를 제한합니다.

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

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

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

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

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