AWS CodeCommit에서 브랜치에 대한 푸시 및 병합 제한 - AWS CodeCommit

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

AWS CodeCommit에서 브랜치에 대한 푸시 및 병합 제한

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

참고

이 주제의 일부 절차를 완료하려면 IAM 정책의 구성 및 적용 권한이 충분히 있는 관리자 사용자로 로그인해야 합니다. 자세한 내용은 IAM 관리자 및 그룹 만들기를 참조하세요.

브랜치에 대한 푸시 및 병합을 제한하는 IAM 정책 구성

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

브랜치에 대한 조건 정책을 생성하려면
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 정책을 선택합니다.

  3. 정책 생성을 선택합니다.

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codecommit:GitPush", "codecommit:DeleteBranch", "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에서 별표(*)로 변경합니다.

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

  6. JSON이 검증되면 정책 생성 페이지가 표시됩니다. 요약 섹션의 경고는 이 정책이 권한을 허용하지 않음을 알려줍니다. 이는 예상된 동작입니다.

    • 이름DenyChangesToMain 등 이 정책의 이름을 입력합니다.

    • 설명에 정책의 목적에 대한 설명을 입력합니다. 이는 선택 사항이며, 권장 사항은 아닙니다.

    • 정책 생성을 선택합니다.

IAM 그룹 또는 역할에 IAM 정책 적용

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

조건 정책을 그룹 또는 역할에 적용하려면
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

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

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

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

자세한 내용은 IAM 정책 연결 및 분리를 참조하세요.

정책 테스트

그룹 또는 역할에 적용한 정책의 결과를 테스트하여 예상대로 작동하는지 확인해야 합니다. 방법은 다양합니다. 예를 들어 위에 보이는 것과 유사한 정책을 테스트하려면 다음과 같이 합니다.

  • 정책이 적용된 IAM 그룹의 구성원이거나 정책이 적용된 역할을 맡은 IAM 사용자로 CodeCommit 콘솔에 로그인합니다. 콘솔에서 제한이 적용된 브랜치에 파일을 추가합니다. 이 브랜치에 파일을 저장하려고 하거나 업로드하려고 시도하면 오류 메시지가 떠야 합니다. 다른 브랜치에 파일을 추가하십시오. 작업이 이제 성공합니다.

  • 정책이 적용된 IAM 그룹의 구성원이거나 정책이 적용된 역할을 수임한 IAM 사용자로 CodeCommit 콘솔에 로그인합니다. 제한이 적용되는 브랜치에 병합할 풀 요청을 생성하십시오. 풀 요청을 만들 수는 있지만 병합을 시도하면 오류가 떠야 합니다.

  • 터미널 또는 명령줄에서 제한이 적용되는 브랜치에 커밋을 생성한 다음 해당 커밋을 저장소로 푸시합니다. CodeCommit 오류 메시지가 떠야 합니다. 다른 브랜치에서 작업한 커밋과 푸시는 정상으로 작동해야 합니다.