

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

# 고객 관리형 정책 예제
<a name="customer-managed-policies"></a>

CodeCommit 작업 및 리소스에 대한 권한을 허용하는 고유의 사용자 지정 IAM 정책을 생성할 수 있습니다. 해당 권한이 필요한 IAM 사용자 또는 그룹에 이러한 사용자 지정 정책을 연결할 수 있습니다. CodeCommit과 다른 AWS 서비스 간의 통합을 위한 사용자 지정 IAM 정책을 직접 생성할 수도 있습니다.

**Topics**
+ [고객 관리형 자격 증명 정책 예](#customer-managed-policies-identity)

## 고객 관리형 자격 증명 정책 예
<a name="customer-managed-policies-identity"></a>

다음 예제 IAM 정책은 다양한 CodeCommit 작업에 대한 권한을 부여합니다. 이러한 정책을 사용하여 IAM 사용자 및 역할에 대한 CodeCommit 액세스를 제한할 수 있습니다. 이러한 정책은 CodeCommit 콘솔, API, AWS SDKs AWS CLI.



**참고**  
모든 예에서는 미국 서부(오레곤) 리전(us-west-2)을 사용하며 가상의 계정 ID를 포함합니다.

 **예시**
+ [예제 1: 사용자가 단일에서 CodeCommit 작업을 수행하도록 허용 AWS 리전](#identity-based-policies-example-1)
+ [예제 2: 사용자에게 단일 리포지토리에서 Git을 사용하도록 허용](#identity-based-policies-example-2)
+ [예제 3: 지정 IP 주소 범위에서 연결된 사용자에게 리포지토리에 대한 액세스 허용](#identity-based-policies-example-3)
+ [예시 4: 모든 브랜치에서 작업 허용 또는 거부](#identity-based-policies-example-4)
+ [예제 5: 태그에 따라 리포지토리에 대한 작업 거부 또는 허용](#identity-based-policies-example-5)

### 예제 1: 사용자가 단일에서 CodeCommit 작업을 수행하도록 허용 AWS 리전
<a name="identity-based-policies-example-1"></a>

다음 권한 정책은 와일드카드 문자(`"codecommit:*"`)를 사용하여 사용자에게 다른 AWS 리전이 아닌 us-east-2 리전의 모든 CodeCommit 작업을 수행할 수 있도록 합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "codecommit:*",
            "Resource": "arn:aws:codecommit:us-east-2:111111111111:*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "us-east-2"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "codecommit:ListRepositories",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "us-east-2"
                }
            }
        }
    ]
}
```

------

### 예제 2: 사용자에게 단일 리포지토리에서 Git을 사용하도록 허용
<a name="identity-based-policies-example-2"></a>

CodeCommit에서 `GitPull` IAM 정책 권한은 **git fetch**, **git clone** 등을 포함해 CodeCommit으로부터 데이터가 검색되는 Git 클라이언트 명령에 적용됩니다. 마찬가지로, `GitPush` IAM 정책 권한은 데이터가 CodeCommit으로 전송되는 모든 Git 클라이언트 명령에 적용됩니다. 예를 들어, `GitPush` IAM 정책 권한이 `Allow`로 설정되면 사용자는 Git 프로토콜을 사용하여 브랜치 삭제를 푸시할 수 있습니다. 이 푸시는 IAM 사용자에 대한 `DeleteBranch` 작업에 적용되는 권한에 영향을 받지 않습니다. `DeleteBranch` 권한은 콘솔, , AWS CLI SDKs 및 API를 사용하여 수행되는 작업에 적용되지만 Git 프로토콜에는 적용되지 않습니다.

다음 예제는 지정된 사용자가 `MyDemoRepo`라는 CodeCommit 리포지토리에 대해 풀하고 푸시할 수 있도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : [
        "codecommit:GitPull",
        "codecommit:GitPush"
      ],
      "Resource" : "arn:aws:codecommit:us-east-2:111122223333:MyDemoRepo"
    }
  ]
}
```

------

### 예제 3: 지정 IP 주소 범위에서 연결된 사용자에게 리포지토리에 대한 액세스 허용
<a name="identity-based-policies-example-3"></a>

IP 주소가 특정 IP 주소 범위 안에 있는 경우 사용자에게 CodeCommit 리포지토리 연결만 허용하는 정책을 생성할 수 있습니다. 여기에는 서로 동등하게 타당한 두 가지 접근 방법이 있습니다. 하나는 사용자의 IP 주소가 특정 블록 안에 들지 않는 경우 CodeCommit 작업을 허용하지 않는 `Deny` 정책을 생성하는 것이며, 또 다른 하나는 사용자의 IP 주소가 특정 블록 안에 드는 경우 CodeCommit 작업을 허용하는 `Allow` 정책을 생성하는 것입니다.

특정 IP 주소 범위에 들지 않는 모든 사용자에 대한 액세스를 거부하는 `Deny` 정책을 생성할 수 있습니다. 예를 들어, AWSCodeCommitPowerUser 관리형 정책과 고객 관리형 정책을 리포지토리에 액세스해야 하는 모든 사용자에게 연결할 수 있습니다. 다음 예제 정책에서는 IP 주소가 지정된 IP 주소 블록 203.0.113.0/16에 들지 않는 사용자에 대해 모든 CodeCommit 권한을 거부합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Deny",
         "Action": [
            "codecommit:*"
         ],
         "Resource": "*",
         "Condition": {
            "NotIpAddress": {
               "aws:SourceIp": [
                  "203.0.113.0/16"
               ]
            }
         }
      }
   ]
}
```

------

다음 예제 정책은 지정된 사용자에게 MyDemoRepo라는 CodeCommit 리포지토리에 액세스하도록 허용하되, IP 주소가 지정된 주소 블록 203.0.113.0/16 안에 드는 경우에만 AWSCodeCommitPowerUser 관리형 정책의 상응하는 권한을 허용합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "codecommit:BatchGetRepositories",
            "codecommit:CreateBranch",
            "codecommit:CreateRepository",
            "codecommit:Get*",
            "codecommit:GitPull",
            "codecommit:GitPush",
            "codecommit:List*",
            "codecommit:Put*",
            "codecommit:Post*",
            "codecommit:Merge*",
            "codecommit:TagResource",
            "codecommit:Test*",
            "codecommit:UntagResource",
            "codecommit:Update*"
         ],
         "Resource": "arn:aws:codecommit:us-east-2:111122223333:MyDemoRepo",
         "Condition": {
            "IpAddress": {
               "aws:SourceIp": [
                  "203.0.113.0/16"
               ]
            }
         }
      }
   ]
}
```

------



### 예시 4: 모든 브랜치에서 작업 허용 또는 거부
<a name="identity-based-policies-example-4"></a>

하나 이상의 브랜치의 지정 작업에 사용자 권한을 거부하는 정책을 생성할 수 있습니다. 또는 리포지토리의 다른 브랜치에 없을 작업을 하나 이상의 브랜치에서 허용하는 정책을 만들 수 있습니다. 이런 정책은 해당 관리형(사전에 정의된) 정책과 함께 사용할 수 있습니다. 자세한 내용은 [의 브랜치에 대한 푸시 및 병합 제한 AWS CodeCommit](how-to-conditional-branch.md) 단원을 참조하십시오.

예를 들어 main이라는 브랜치에 대하여 삭제는 물론 변경 권한을 거부하는 `Deny` 정책을 *MyDemoRepo*라는 리포지토리에 만들 수 있습니다. 이 정책은 **AWSCodeCommitPowerUser** 관리형 정책과 함께 사용할 수 있습니다. 이 두 정책이 적용된 사용자는 **AWSCodeCommitPowerUser**에서 허용하는 대로 브랜치를 생성 및 삭제하고 풀 요청 및 기타 모든 작업을 생성할 수 있지만, *메인*이라는 브랜치에 변경 사항을 푸시하거나 CodeCommit 콘솔의 *메인* 브랜치에 파일을 추가 또는 편집하거나 브랜치 또는 풀 요청을 *메인* 브랜치에 병합할 수는 없습니다. `Deny`가 `GitPush`에 적용되므로 정책에 `Null` 문을 포함해야 사용자 로컬 리포지토리에서 푸시할 때 최초의 `GitPush` 호출이 유효성 분석의 대상이 됩니다.

**작은 정보**  
Amazon Web Services 계정의 모든 리포지토리에서 main이라는 이름의 모든 브랜치에 적용되는 정책을 생성하려면, `Resource`에 대해 리포지토리 ARN 대신 별표(`*`)를 지정합니다.**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "codecommit:GitPush",
                "codecommit:DeleteBranch",
                "codecommit:PutFile",
                "codecommit:Merge*"
            ],
            "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo",
            "Condition": {
                "StringEqualsIfExists": {
                    "codecommit:References": [
                        "refs/heads/main"   
                    ]
                },
                "Null": {
                    "codecommit:References": "false"
                }
            }
        }
    ]
}
```

------

다음 정책 예시에서는 Amazon Web Services 계정의 모든 리포지토리에서 main이라는 브랜치에 대한 사용자의 변경 권한을 허용합니다. 다른 브랜치에 대한 변경은 허용하지 않습니다. 이 정책을 AWSCodeCommitReadOnly 관리형 정책과 함께 사용하여 main 브랜치 내 리포지토리에 푸시를 자동화할 수 있습니다. 결과가 `Allow`이기 때문에, 이 정책 예시는 AWSCodeCommitPowerUser 같은 관리형 정책과 함께 작동하지 않습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codecommit:GitPush",
                "codecommit:Merge*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEqualsIfExists": {
                    "codecommit:References": [
                        "refs/heads/main"
                    ]
                }
            }
        }
    ]
}
```

------



### 예제 5: 태그에 따라 리포지토리에 대한 작업 거부 또는 허용
<a name="identity-based-policies-example-5"></a>

해당 리포지토리와 연결된 AWS 태그를 기반으로 리포지토리에 대한 작업을 허용하거나 거부하는 정책을 생성한 다음 IAM 사용자를 관리하기 위해 구성한 IAM 그룹에 해당 정책을 적용할 수 있습니다. 예를 들어 AWS , 태그 키 *상태* 및 키 값이 *보안* 암호인 모든 리포지토리에 대한 모든 CodeCommit 작업을 거부하는 정책을 생성한 다음 일반 개발자(*개발자*)를 위해 생성한 IAM 그룹에 해당 정책을 적용할 수 있습니다. 그런 다음 태그 지정된 리포지토리에 대해 작업하는 개발자가 일반 *Developers* 그룹의 구성원이 되지 않고 그 대신 제한 정책이 적용되지 않는 다른 IAM 그룹(*SecretDevelopers*)에 속하게 해야 합니다.

다음 예제에서는 *Status* 키와 *Secret* 키 값으로 태그된 리포지토리에 대해 모든 CodeCommit 작업을 거부합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codecommit:Associate*",
        "codecommit:Batch*",
        "codecommit:CancelUploadArchive",
        "codecommit:CreateBranch",
        "codecommit:CreateCommit",
        "codecommit:CreatePullRequest*",
        "codecommit:CreateRepository",
        "codecommit:CreateUnreferencedMergeCommit",
        "codecommit:DeleteBranch",
        "codecommit:DeleteCommentContent",
        "codecommit:DeleteFile",
        "codecommit:DeletePullRequest*",
        "codecommit:DeleteRepository",
        "codecommit:Describe*",
        "codecommit:DisassociateApprovalRuleTemplateFromRepository",
        "codecommit:EvaluatePullRequestApprovalRules",
        "codecommit:GetBlob",
        "codecommit:GetBranch",
        "codecommit:GetComment*",
        "codecommit:GetCommit",
        "codecommit:GetDifferences*",
        "codecommit:GetFile",
        "codecommit:GetFolder",
        "codecommit:GetMerge*",
        "codecommit:GetObjectIdentifier",
        "codecommit:GetPullRequest*",
        "codecommit:GetReferences",
        "codecommit:GetRepository*",
        "codecommit:GetTree",
        "codecommit:GetUploadArchiveStatus",
        "codecommit:Git*",
        "codecommit:ListAssociatedApprovalRuleTemplatesForRepository",
        "codecommit:ListBranches",
        "codecommit:ListPullRequests",
        "codecommit:ListTagsForResource",
        "codecommit:Merge*",
        "codecommit:OverridePullRequestApprovalRules",
        "codecommit:Post*",
        "codecommit:Put*",
        "codecommit:TagResource",
        "codecommit:TestRepositoryTriggers",
        "codecommit:UntagResource",
        "codecommit:UpdateComment",
        "codecommit:UpdateDefaultBranch",
        "codecommit:UpdatePullRequest*",
        "codecommit:UpdateRepository*",
        "codecommit:UploadArchive"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Status": "Secret"
        }
      }
    }
  ]
}
```

------

리소스로서 모든 리포지토리보다는 특정 리포지토리를 지정하여 이 전략을 더욱 구체화할 수 있습니다. 또한 특정 태그로 태그 지정되지 않은 모든 리포지토리에 대한 CodeCommit 작업을 허용하는 정책을 생성할 수도 있습니다. 예를 들어, 다음 정책은 CodeCommit 작업에 대해 **AWSCodeCommitPowerUser** 권한과 동등한 권한을 허용합니다. 단, 지정된 태그가 태그되지 않은 리포지토리에 대한 CodeCommit 작업만을 허용합니다.

**참고**  
이 정책 예제에는 CodeCommit에 대한 작업만 포함되어 있습니다. **AWSCodeCommitPowerUser** 관리형 정책에 포함된 다른 AWS 서비스에 대한 작업은 포함되지 않습니다. 자세한 내용은 단원을 참조하십시오[AWS 관리형 정책: AWSCodeCommitPowerUser](security-iam-awsmanpol.md#managed-policies-poweruser).

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:Associate*",
        "codecommit:Batch*",
        "codecommit:CancelUploadArchive",
        "codecommit:CreateBranch",
        "codecommit:CreateCommit",
        "codecommit:CreatePullRequest*",
        "codecommit:CreateRepository",
        "codecommit:CreateUnreferencedMergeCommit",
        "codecommit:DeleteBranch",
        "codecommit:DeleteCommentContent",
        "codecommit:DeleteFile",
        "codecommit:DeletePullRequest*",
        "codecommit:Describe*",
        "codecommit:DisassociateApprovalRuleTemplateFromRepository",
        "codecommit:EvaluatePullRequestApprovalRules",
        "codecommit:GetBlob",
        "codecommit:GetBranch",
        "codecommit:GetComment*",
        "codecommit:GetCommit",
        "codecommit:GetDifferences*",
        "codecommit:GetFile",
        "codecommit:GetFolder",
        "codecommit:GetMerge*",
        "codecommit:GetObjectIdentifier",
        "codecommit:GetPullRequest*",
        "codecommit:GetReferences",
        "codecommit:GetRepository*",
        "codecommit:GetTree",
        "codecommit:GetUploadArchiveStatus",
        "codecommit:Git*",
        "codecommit:ListAssociatedApprovalRuleTemplatesForRepository",
        "codecommit:ListBranches",
        "codecommit:ListPullRequests",
        "codecommit:ListTagsForResource",
        "codecommit:Merge*",
        "codecommit:OverridePullRequestApprovalRules",
        "codecommit:Post*",
        "codecommit:Put*",
        "codecommit:TagResource",
        "codecommit:TestRepositoryTriggers",
        "codecommit:UntagResource",
        "codecommit:UpdateComment",
        "codecommit:UpdateDefaultBranch",
        "codecommit:UpdatePullRequest*",
        "codecommit:UpdateRepository*",
        "codecommit:UploadArchive"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceTag/Status": "Secret",
          "aws:ResourceTag/Team": "Saanvi"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:CreateApprovalRuleTemplate",
        "codecommit:GetApprovalRuleTemplate",
        "codecommit:ListApprovalRuleTemplates",
        "codecommit:ListRepositories",
        "codecommit:ListRepositoriesForApprovalRuleTemplate",
        "codecommit:UpdateApprovalRuleTemplateContent",
        "codecommit:UpdateApprovalRuleTemplateDescription",
        "codecommit:UpdateApprovalRuleTemplateName"
      ],
      "Resource": "*"
    }
  ]
}
```

------