

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

# 의 브랜치에 대한 푸시 및 병합 제한 AWS CodeCommit
<a name="how-to-conditional-branch"></a>

기본적으로 리포지토리에 코드 푸시 권한을 충분히 갖고 있는 모든 CodeCommit 리포지토리 사용자는 그 리포지토리의 모든 브랜치에 기여할 수 있습니다. 콘솔을 사용하거나 명령줄이나 Git를 사용하는 등 어떤 방법으로 리포지토리에 브랜치를 추가하든 상관 없습니다. 단, 일부 리포지토리 사용자만 그 브랜치에 푸시 또는 병합할 수 있도록 브랜치를 구성해야 할 수 있습니다. 예를 들어 선임 개발자의 하위 집합만 그 브랜치에 변경 사항을 푸시 또는 병합할 수 있도록 프로덕션 코드에 사용하는 브랜치를 구성해야 할 수 있습니다. 다른 개발자도 여전히 이 브랜치에서 풀을 사용하고, 브랜치를 생성하며, 풀 요청을 생성할 수 있지만 변경 사항을 푸시하거나 병합할 수는 없습니다. IAM에서 하나 이상의 브랜치에 대하여 컨텍스트 키를 사용하는 조건 정책을 만들어 이 액세스를 구성할 수 있습니다.

**참고**  
이 주제의 일부 절차를 완료하려면 IAM 정책의 구성 및 적용 권한이 충분히 있는 관리자 사용자로 로그인해야 합니다. 자세한 내용은 [IAM 관리자 및 그룹 만들기](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)를 참조하세요.

**Topics**
+ [브랜치에 대한 푸시 및 병합을 제한하는 IAM 정책 구성](#how-to-conditional-branch-create-policy)
+ [IAM 그룹 또는 역할에 IAM 정책 적용](#how-to-conditional-branch-apply-policy)
+ [정책 테스트](#how-to-conditional-branch-test)

## 브랜치에 대한 푸시 및 병합을 제한하는 IAM 정책 구성
<a name="how-to-conditional-branch-create-policy"></a>

브랜치에 커밋을 푸시하고 풀 요청을 병합하는 작업을 포함한 브랜치 업데이트 작업을 하지 못하도록 IAM에 정책을 만들 수 있습니다. 이를 위하여 조건에 해당하는 경우에만 `Deny` 문의 결과가 적용되도록 정책에서 조건문을 사용합니다. 어떤 작업을 허용하지 않는지는 `Deny` 문에 포함된 API가 결정합니다. Amazon Web Services 계정에서 리포지토리의 한 브랜치에만 적용하도록 하거나 모든 리포지토리에서 기준에 부합하는 모든 브랜치에 적용하도록 정책을 구성할 수 있습니다.<a name="how-to-conditional-branch-create-policy-procedure"></a>

**브랜치에 대한 조건 정책을 생성하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 탐색 창에서 **Policies**를 선택합니다.

1. **정책 생성**을 선택합니다.

1. **JSON**을 선택하고 다음 정책 예시를 붙여 넣습니다. `Resource` 값을 액세스를 제한할 브랜치가 포함된 리포지토리의 ARN으로 대체합니다. `codecommit:References` 값을 액세스를 제한할 브랜치의 참조로 대체합니다. 예를 들어 이 정책은 커밋 푸시, 브랜치 병합, 브랜치 삭제, 풀 요청 병합, `{{MyDemoRepo}}`라는 리포지토리의 {{`main`}}이라는 브랜치 및 `{{prod}}`라는 브랜치에 파일 추가하기 등의 작업을 거부합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": [
                   "codecommit:GitPush",
                   "codecommit:DeleteBranch",
                   "codecommit:DeleteFile",
                   "codecommit:PutFile",
                   "codecommit:MergeBranchesByFastForward",
                   "codecommit:MergeBranchesBySquash",
                   "codecommit:MergeBranchesByThreeWay",
                   "codecommit:MergePullRequestByFastForward",
                   "codecommit:MergePullRequestBySquash",
                   "codecommit:MergePullRequestByThreeWay"
               ],
               "Resource": "{{arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo}}",
               "Condition": {
                   "StringEqualsIfExists": {
                       "codecommit:References": [
                           "refs/heads/{{main}}", 
                           "refs/heads/{{prod}}"
                        ]
                   },
                   "Null": {
                       "codecommit:References": "false"
                   }
               }
           }
       ]
   }
   ```

------

   Git의 브랜치는 HEAD 커밋의 SHA-1 값에 대한 단순한 포인터(참조)인데, 이 때문에 이 조건은 `References`를 사용합니다. `Null` 문은 결과가 `Deny`이고 작업 중 하나가 `GitPush`인 모든 정책에 필요합니다. 이는 로컬 리포지토리에서 CodeCommit으로 변경 사항을 푸시할 때 Git과 `git-receive-pack`이 작업하는 방식 때문입니다.
**작은 정보**  
Amazon Web Services 계정의 모든 리포지토리에서 main이라는 이름의 모든 브랜치에 적용되는 정책을 생성하려면, `Resource` 값을 리포지토리 ARN에서 별표(`*`)로 변경합니다.

1. **정책 검토**를 선택합니다. 정책 문의 오류를 모두 수정하고 **정책 생성**을 계속합니다.

1. JSON이 검증되면 **정책 생성** 페이지가 표시됩니다. **요약** 섹션의 경고는 이 정책이 권한을 허용하지 않음을 알려줍니다. 이는 예상된 동작입니다.
   + **이름**에 **DenyChangesToMain** 등 이 정책의 이름을 입력합니다.
   + **설명**에 정책의 목적에 대한 설명을 입력합니다. 이는 선택 사항이며, 권장 사항은 아닙니다.
   + **정책 생성**을 선택합니다.

## IAM 그룹 또는 역할에 IAM 정책 적용
<a name="how-to-conditional-branch-apply-policy"></a>

지금까지 브랜치에 푸시 및 병합을 제한하는 정책을 만들었지만 IAM 사용자나 그룹, 역할에 적용하기 전까지 이 정책은 아무런 결과가 없습니다. 모범 사례로서 IAM 그룹 또는 역할에 정책을 적용해 보세요. 정책을 개별 IAM 사용자에게 적용해도 잘 확장되지 않습니다.<a name="how-to-conditional-branch-apply-policy-procedure"></a>

**조건 정책을 그룹 또는 역할에 적용하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 정책을 IAM 그룹에 적용하려면 탐색 창에서 **그룹**을 선택합니다. 정책을 사용자가 수임한 역할에 적용하려면 **역할**을 선택합니다. 그룹 또는 역할의 이름을 선택합니다.

1. **권한** 탭에서 **정책 연결**을 선택합니다.

1. 정책 목록에서 만들어 둔 조건 정책을 선택한 다음 **정책 연결**을 선택합니다.

자세한 내용은 [IAM 정책 연결 및 분리](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)를 참조하세요.

## 정책 테스트
<a name="how-to-conditional-branch-test"></a>

그룹 또는 역할에 적용한 정책의 결과를 테스트하여 예상대로 작동하는지 확인해야 합니다. 방법은 다양합니다. 예를 들어 위에 보이는 것과 유사한 정책을 테스트하려면 다음과 같이 합니다.
+ 정책을 적용한 IAM 그룹의 멤버이거나 그 정책이 적용된 역할을 수임한 IAM 사용자로 CodeCommit 콘솔에 로그인합니다. 콘솔에서 제한이 적용된 브랜치에 파일을 추가합니다. 이 브랜치에 파일을 저장하려고 하거나 업로드하려고 시도하면 오류 메시지가 떠야 합니다. 다른 브랜치에 파일을 추가합니다. 작업이 이제 성공합니다.
+ 정책을 적용한 IAM 그룹의 멤버이거나 그 정책이 적용된 역할을 수임한 IAM 사용자로 CodeCommit 콘솔에 로그인합니다. 제한이 적용되는 브랜치에 병합할 풀 요청을 생성합니다. 풀 요청을 만들 수는 있지만 병합을 시도하면 오류가 떠야 합니다.
+ 터미널 또는 명령줄에서 제한이 적용되는 브랜치에 커밋을 생성한 후 CodeCommit 리포지토리에 그 커밋을 푸시합니다. 오류 메시지가 떠야 합니다. 다른 브랜치에서 작업한 커밋과 푸시는 정상으로 작동해야 합니다.