

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

# CodeCommit에 대한 자격 증명 기반 정책(IAM 정책) 사용
<a name="auth-and-access-control-iam-identity-based-access-control"></a>

다음 자격 증명 기반 정책의 예는 계정 관리자가 권한 정책을 IAM 자격 증명(즉, 사용자, 그룹 및 역할)에 연결하고 이 과정을 통해 CodeCommit 리소스에서 작업을 수행할 권한을 부여할 수 있는 방법을 보여줍니다.

**중요**  
CodeCommit 리소스에 대한 액세스 관리를 위해 제공되는 기본 개념과 옵션 설명에 대한 소개 주제 부분을 먼저 읽어 보세요. 자세한 내용은 [CodeCommit 리소스에 대한 액세스 권한 관리 개요](auth-and-access-control.md#auth-and-access-control-iam-access-control-identity-based) 단원을 참조하십시오.

**Topics**
+ [CodeCommit 콘솔 사용에 필요한 권한](#console-permissions)
+ [콘솔에서 리소스 보기](#console-resources)
+ [AWS CodeCommit에 대한 관리형 정책](security-iam-awsmanpol.md)
+ [고객 관리형 정책 예제](customer-managed-policies.md)

다음은 자격 증명 기반 권한 정책의 예입니다.

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

****  

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

------

이 정책에는 사용자가 **us-east-2** 리전의 `MyDemo`라는 이름으로 시작하는 모든 CodeCommit 리포지토리와 `MyDestinationRepo`라는 이름의 CodeCommit 리포지토리에 대한 정보를 가져오도록 허용하는 명령문이 있습니다.

## CodeCommit 콘솔 사용에 필요한 권한
<a name="console-permissions"></a>

각 CodeCommit API 작업에 필요한 권한을 설정하는 방법과 CodeCommit 작업에 대한 자세한 내용은 [CodeCommit 권한 참조](auth-and-access-control-permissions-reference.md) 단원을 참조하세요.

사용자에게 CodeCommit 콘솔을 사용하도록 허용하려는 경우 관리자는 CodeCommit 작업에 대한 권한을 부여해야 합니다. 예를 들어 [AWSCodeCommitPowerUser](security-iam-awsmanpol.md#managed-policies-poweruser) 관리형 정책 또는 이와 동등한 정책을 사용자나 그룹에 연결할 수 있습니다.

자격 증명 기반 정책에 의해 사용자에게 부여된 권한 외에도 CodeCommit에는 AWS Key Management Service (AWS KMS) 작업에 대한 권한이 필요합니다. IAM 사용자는 이러한 작업에 대한 명시적인 `Allow` 권한이 필요하지 않지만 다음 권한을 `Deny`로 설정하는 어떠한 정책에도 연결되면 안 됩니다.

```
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt",
        "kms:GenerateDataKey",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:DescribeKey"
```

암호화 및 CodeCommit에 대한 자세한 내용은 [AWS KMS 및 암호화](encryption.md) 단원을 참조하세요.

## 콘솔에서 리소스 보기
<a name="console-resources"></a>

CodeCommit 콘솔에는 로그인한에서 Amazon Web Services 계정의 리포지토리 목록을 표시할 수 AWS 리전 있는 `ListRepositories` 권한이 필요합니다. 또한 콘솔에는 리소스의 대/소문자를 구분하지 않고 빠르게 검색할 수 있는 **Go to resource(리소스로 이동)** 기능이 포함되어 있습니다. 이 검색은 로그인 AWS 리전 한의 Amazon Web Services 계정에서 수행됩니다. 다음 서비스에 표시되는 리소스는 다음과 같습니다.
+ AWS CodeBuild: 빌드 프로젝트
+ AWS CodeCommit: 리포지토리
+ AWS CodeDeploy: 애플리케이션
+ AWS CodePipeline: 파이프라인

모든 서비스의 리소스에서 이 검색을 수행하려면 다음 권한이 있어야 합니다.
+ CodeBuild: `ListProjects`
+ CodeCommit: `ListRepositories`
+ CodeDeploy: `ListApplications`
+ CodePipeline: `ListPipelines`

해당 서비스에 대한 권한이 없는 경우 서비스의 리소스에 대한 결과가 반환되지 않습니다. 리소스를 볼 수 있는 권한이 있더라도 해당 리소스 보기에 대한 명시적 `Deny`가 있으면 특정 리소스가 반환되지 않습니다.

# AWS CodeCommit에 대한 관리형 정책
<a name="security-iam-awsmanpol"></a>

사용자, 그룹 및 역할에 권한을 추가하려면 직접 정책을 작성하는 것보다 AWS 관리형 정책을 사용하는 것이 더 쉽습니다. 팀에 필요한 권한만 제공하는 [IAM 고객 관리형 정책을 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)하기 위해서는 시간과 전문 지식이 필요합니다. 빠르게 시작하려면 AWS 관리형 정책을 사용할 수 있습니다. 이 정책은 일반적인 사용 사례를 다루며 사용자의 AWS 계정에서 사용할 수 있습니다. AWS 관리형 정책에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 관리형 정책을](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) 참조하세요.

AWS 서비스는 AWS 관리형 정책을 유지 관리하고 업데이트합니다. AWS 관리형 정책에서는 권한을 변경할 수 없습니다. 서비스에서 때때로 추가 권한을 AWS 관리형 정책에 추가하여 새로운 기능을 지원합니다. 이 유형의 업데이트는 정책이 연결된 모든 ID(사용자, 그룹 및 역할)에 적용됩니다. 서비스는 새로운 기능이 시작되거나 새 작업을 사용할 수 있을 때 AWS 관리형 정책에 업데이트됩니다. 서비스는 AWS 관리형 정책에서 권한을 제거하지 않으므로 정책 업데이트로 인해 기존 권한이 손상되지 않습니다.

또한는 여러 서비스에 걸쳐 있는 직무에 대한 관리형 정책을 AWS 지원합니다. 예를 들어 **ReadOnlyAccess** AWS 관리형 정책은 모든 AWS 서비스 및 리소스에 대한 읽기 전용 액세스를 제공합니다. 서비스가 새 기능을 시작하면는 새 작업 및 리소스에 대한 읽기 전용 권한을 AWS 추가합니다. 직무 정책의 목록과 설명은 *IAM 사용 설명서*의 [직무에 관한AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)을 참조하세요.

AWS 는에서 생성하고 관리하는 독립 실행형 IAM 정책을 제공하여 많은 일반적인 사용 사례를 처리합니다 AWS. 이러한 AWS 관리형 정책은 일반적인 사용 사례에 필요한 권한을 부여합니다. CodeCommit에 대한 관리형 정책은 IAM, Amazon SNS 및 Amazon CloudWatch Events 같은 다른 서비스에서 작업을 수행할 수 있는 권한도 제공합니다. 해당 정책이 부여된 사용자의 책임에 필요하기 때문입니다. 예를 들어, AWSCodeCommitFullAccess 정책은 관리 수준의 사용자 정책으로, 이 정책을 통해 사용자가 리포지토리에 대한 CloudWatch Events 규칙(이름에 `codecommit`이라는 접두사가 붙은 규칙)과, 리포지토리 관련 이벤트에 대한 알림을 제공할 Amazon SNS 주제(이름에 `codecommit`이라는 접두사가 붙은 주제)를 만들고 관리할 수 있으며, CodeCommit의 관리자 리포지토리를 관리할 수 있습니다.

계정의 사용자에게 연결할 수 있는 다음 AWS 관리형 정책은 CodeCommit에 고유합니다.

**Topics**
+ [AWS 관리형 정책: AWSCodeCommitFullAccess](#managed-policies-full)
+ [AWS 관리형 정책: AWSCodeCommitPowerUser](#managed-policies-poweruser)
+ [AWS 관리형 정책: AWSCodeCommitReadOnly](#managed-policies-read)
+ [CodeCommit 관리형 정책 및 알림](#notifications-permissions)
+ [AWS CodeCommit 관리형 정책 및 Amazon CodeGuru Reviewer](#codeguru-permissions)
+ [AWS 관리형 정책에 대한 CodeCommit 업데이트](#security-iam-awsmanpol-updates)

## AWS 관리형 정책: AWSCodeCommitFullAccess
<a name="managed-policies-full"></a>

`AWSCodeCommitFullAccess` 정책을 IAM ID에 연결할 수 있습니다. 이 정책은 CodeCommit에 대한 모든 액세스 권한을 부여합니다. 이 정책은 리포지토리 삭제 기능을 비롯하여 Amazon Web Services 계정 내 CodeCommit 리포지토리 및 관련 리소스에 대한 모든 제어 권한을 부여할 관리 수준의 사용자에게만 적용됩니다.

AWSCodeCommitFullAccess 정책에는 다음과 같은 정책 명령문이 포함됩니다.

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

****  

```
    {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "codecommit:*"
          ],
          "Resource": "*"
        },
        {
          "Sid": "CloudWatchEventsCodeCommitRulesAccess",
          "Effect": "Allow",
          "Action": [
            "events:DeleteRule",
            "events:DescribeRule",
            "events:DisableRule",
            "events:EnableRule",
            "events:PutRule",
            "events:PutTargets",
            "events:RemoveTargets",
            "events:ListTargetsByRule"
          ],
          "Resource": "arn:aws:events:*:*:rule/codecommit*"
        },
        {
          "Sid": "SNSTopicAndSubscriptionAccess",
          "Effect": "Allow",
          "Action": [
            "sns:CreateTopic",
            "sns:DeleteTopic",
            "sns:Subscribe",
            "sns:Unsubscribe",
            "sns:SetTopicAttributes"
          ],
          "Resource": "arn:aws:sns:*:*:codecommit*"
        },
        {
          "Sid": "SNSTopicAndSubscriptionReadAccess",
          "Effect": "Allow",
          "Action": [
            "sns:ListTopics",
            "sns:ListSubscriptionsByTopic",
            "sns:GetTopicAttributes"
          ],
          "Resource": "*"
        },
        {
          "Sid": "LambdaReadOnlyListAccess",
          "Effect": "Allow",
          "Action": [
            "lambda:ListFunctions"
          ],
          "Resource": "*"
        },
        {
          "Sid": "IAMReadOnlyListAccess",
          "Effect": "Allow",
          "Action": [
            "iam:ListUsers"
          ],
          "Resource": "*"
        },
        {
          "Sid": "IAMReadOnlyConsoleAccess",
          "Effect": "Allow",
          "Action": [
            "iam:ListAccessKeys",
            "iam:ListSSHPublicKeys",
            "iam:ListServiceSpecificCredentials"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
          "Sid": "IAMUserSSHKeys",
          "Effect": "Allow",
          "Action": [
            "iam:DeleteSSHPublicKey",
            "iam:GetSSHPublicKey",
            "iam:ListSSHPublicKeys",
            "iam:UpdateSSHPublicKey",
            "iam:UploadSSHPublicKey"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
          "Sid": "IAMSelfManageServiceSpecificCredentials",
          "Effect": "Allow",
          "Action": [
            "iam:CreateServiceSpecificCredential",
            "iam:UpdateServiceSpecificCredential",
            "iam:DeleteServiceSpecificCredential",
            "iam:ResetServiceSpecificCredential"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
          "Sid": "CodeStarNotificationsReadWriteAccess",
          "Effect": "Allow",
          "Action": [
            "codestar-notifications:CreateNotificationRule",
            "codestar-notifications:DescribeNotificationRule",
            "codestar-notifications:UpdateNotificationRule",
            "codestar-notifications:DeleteNotificationRule",
            "codestar-notifications:Subscribe",
            "codestar-notifications:Unsubscribe"
          ],
          "Resource": "*",
          "Condition": {
            "ArnLike": {
              "codestar-notifications:NotificationsForResource": "arn:aws:iam::*:role/Service*"
            }
          }
        },
        {
          "Sid": "CodeStarNotificationsListAccess",
          "Effect": "Allow",
          "Action": [
            "codestar-notifications:ListNotificationRules",
            "codestar-notifications:ListTargets",
            "codestar-notifications:ListTagsforResource",
            "codestar-notifications:ListEventTypes"
          ],
          "Resource": "*"
        },
        {
          "Sid": "CodeStarNotificationsSNSTopicCreateAccess",
          "Effect": "Allow",
          "Action": [
            "sns:CreateTopic",
            "sns:SetTopicAttributes"
          ],
          "Resource": "arn:aws:sns:*:*:codestar-notifications*"
        },
        {
          "Sid": "AmazonCodeGuruReviewerFullAccess",
          "Effect": "Allow",
          "Action": [
            "codeguru-reviewer:AssociateRepository",
            "codeguru-reviewer:DescribeRepositoryAssociation",
            "codeguru-reviewer:ListRepositoryAssociations",
            "codeguru-reviewer:DisassociateRepository",
            "codeguru-reviewer:DescribeCodeReview",
            "codeguru-reviewer:ListCodeReviews"
          ],
          "Resource": "*"
        },
        {
          "Sid": "AmazonCodeGuruReviewerSLRCreation",
          "Action": "iam:CreateServiceLinkedRole",
          "Effect": "Allow",
          "Resource": "arn:aws:iam::*:role/aws-service-role/codeguru-reviewer.amazonaws.com/AWSServiceRoleForAmazonCodeGuruReviewer",
          "Condition": {
            "StringLike": {
              "iam:AWSServiceName": "codeguru-reviewer.amazonaws.com"
            }
          }
        },
        {
          "Sid": "CloudWatchEventsManagedRules",
          "Effect": "Allow",
          "Action": [
            "events:PutRule",
            "events:PutTargets",
            "events:DeleteRule",
            "events:RemoveTargets"
          ],
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "events:ManagedBy": "codeguru-reviewer.amazonaws.com"
            }
          }
        },
        {
          "Sid": "CodeStarNotificationsChatbotAccess",
          "Effect": "Allow",
          "Action": [
            "chatbot:DescribeSlackChannelConfigurations",
            "chatbot:ListMicrosoftTeamsChannelConfigurations"
          ],
          "Resource": "*"
        },
        {
            "Sid": "CodeStarConnectionsReadOnlyAccess",
            "Effect": "Allow",
            "Action": [
                "codestar-connections:ListConnections",
                "codestar-connections:GetConnection"
            ],
            "Resource": "arn:aws:codestar-connections:*:*:connection/*"
        }
      ]
    }
```

------

## AWS 관리형 정책: AWSCodeCommitPowerUser
<a name="managed-policies-poweruser"></a>

`AWSCodeCommitPowerUser` 정책을 IAM ID에 연결할 수 있습니다. 이 정책은 사용자가 CodeCommit 및 리포지토리 관련 리소스의 모든 기능에 액세스할 수 있도록 허용합니다. 단, Amazon CloudWatch Events와 같은 다른 AWS 서비스에서 CodeCommit 리포지토리를 삭제하거나 리포지토리 관련 리소스를 생성하거나 삭제하는 것은 허용하지 않습니다. 이 정책은 대부분의 사용자에게 적용하는 것이 좋습니다.

AWSCodeCommitPowerUser 정책에는 다음과 같은 정책 명령문이 포함됩니다.

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

****  

```
    {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "codecommit:AssociateApprovalRuleTemplateWithRepository",
            "codecommit:BatchAssociateApprovalRuleTemplateWithRepositories",
            "codecommit:BatchDisassociateApprovalRuleTemplateFromRepositories",
            "codecommit:BatchGet*",
            "codecommit:BatchDescribe*",
            "codecommit:Create*",
            "codecommit:DeleteBranch",
            "codecommit:DeleteFile",
            "codecommit:Describe*",
            "codecommit:DisassociateApprovalRuleTemplateFromRepository",
            "codecommit:EvaluatePullRequestApprovalRules",
            "codecommit:Get*",
            "codecommit:List*",
            "codecommit:Merge*",
            "codecommit:OverridePullRequestApprovalRules",
            "codecommit:Put*",
            "codecommit:Post*",
            "codecommit:TagResource",
            "codecommit:Test*",
            "codecommit:UntagResource",
            "codecommit:Update*",
            "codecommit:GitPull",
            "codecommit:GitPush"
          ],
          "Resource": "*"
        },
        {
          "Sid": "CloudWatchEventsCodeCommitRulesAccess",
          "Effect": "Allow",
          "Action": [
            "events:DeleteRule",
            "events:DescribeRule",
            "events:DisableRule",
            "events:EnableRule",
            "events:PutRule",
            "events:PutTargets",
            "events:RemoveTargets",
            "events:ListTargetsByRule"
          ],
          "Resource": "arn:aws:events:*:*:rule/codecommit*"
        },
        {
          "Sid": "SNSTopicAndSubscriptionAccess",
          "Effect": "Allow",
          "Action": [
            "sns:Subscribe",
            "sns:Unsubscribe"
          ],
          "Resource": "arn:aws:sns:*:*:codecommit*"
        },
        {
          "Sid": "SNSTopicAndSubscriptionReadAccess",
          "Effect": "Allow",
          "Action": [
            "sns:ListTopics",
            "sns:ListSubscriptionsByTopic",
            "sns:GetTopicAttributes"
          ],
          "Resource": "*"
        },
        {
          "Sid": "LambdaReadOnlyListAccess",
          "Effect": "Allow",
          "Action": [
            "lambda:ListFunctions"
          ],
          "Resource": "*"
        },
        {
          "Sid": "IAMReadOnlyListAccess",
          "Effect": "Allow",
          "Action": [
            "iam:ListUsers"
          ],
          "Resource": "*"
        },
        {
          "Sid": "IAMReadOnlyConsoleAccess",
          "Effect": "Allow",
          "Action": [
            "iam:ListAccessKeys",
            "iam:ListSSHPublicKeys",
            "iam:ListServiceSpecificCredentials"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
          "Sid": "IAMUserSSHKeys",
          "Effect": "Allow",
          "Action": [
            "iam:DeleteSSHPublicKey",
            "iam:GetSSHPublicKey",
            "iam:ListSSHPublicKeys",
            "iam:UpdateSSHPublicKey",
            "iam:UploadSSHPublicKey"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
          "Sid": "IAMSelfManageServiceSpecificCredentials",
          "Effect": "Allow",
          "Action": [
            "iam:CreateServiceSpecificCredential",
            "iam:UpdateServiceSpecificCredential",
            "iam:DeleteServiceSpecificCredential",
            "iam:ResetServiceSpecificCredential"
          ],
          "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
          "Sid": "CodeStarNotificationsReadWriteAccess",
          "Effect": "Allow",
          "Action": [
            "codestar-notifications:CreateNotificationRule",
            "codestar-notifications:DescribeNotificationRule",
            "codestar-notifications:UpdateNotificationRule",
            "codestar-notifications:Subscribe",
            "codestar-notifications:Unsubscribe"
          ],
          "Resource": "*",
          "Condition": {
            "ArnLike": {
              "codestar-notifications:NotificationsForResource": "arn:aws:iam::*:role/Service*"
            }
          }
        },
        {
          "Sid": "CodeStarNotificationsListAccess",
          "Effect": "Allow",
          "Action": [
            "codestar-notifications:ListNotificationRules",
            "codestar-notifications:ListTargets",
            "codestar-notifications:ListTagsforResource",
            "codestar-notifications:ListEventTypes"
          ],
          "Resource": "*"
        },
        {
          "Sid": "AmazonCodeGuruReviewerFullAccess",
          "Effect": "Allow",
          "Action": [
            "codeguru-reviewer:AssociateRepository",
            "codeguru-reviewer:DescribeRepositoryAssociation",
            "codeguru-reviewer:ListRepositoryAssociations",
            "codeguru-reviewer:DisassociateRepository",
            "codeguru-reviewer:DescribeCodeReview",
            "codeguru-reviewer:ListCodeReviews"
          ],
          "Resource": "*"
        },
        {
          "Sid": "AmazonCodeGuruReviewerSLRCreation",
          "Action": "iam:CreateServiceLinkedRole",
          "Effect": "Allow",
          "Resource": "arn:aws:iam::*:role/aws-service-role/codeguru-reviewer.amazonaws.com/AWSServiceRoleForAmazonCodeGuruReviewer",
          "Condition": {
            "StringLike": {
              "iam:AWSServiceName": "codeguru-reviewer.amazonaws.com"
            }
          }
        },
        {
          "Sid": "CloudWatchEventsManagedRules",
          "Effect": "Allow",
          "Action": [
            "events:PutRule",
            "events:PutTargets",
            "events:DeleteRule",
            "events:RemoveTargets"
          ],
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "events:ManagedBy": "codeguru-reviewer.amazonaws.com"
            }
          }
        },
        {
          "Sid": "CodeStarNotificationsChatbotAccess",
          "Effect": "Allow",
          "Action": [
            "chatbot:DescribeSlackChannelConfigurations",
            "chatbot:ListMicrosoftTeamsChannelConfigurations"
          ],
          "Resource": "*"
        },
        {
            "Sid": "CodeStarConnectionsReadOnlyAccess",
            "Effect": "Allow",
            "Action": [
                "codestar-connections:ListConnections",
                "codestar-connections:GetConnection"
            ],
            "Resource": "arn:aws:codestar-connections:*:*:connection/*"
        }
      ]
    }
```

------

## AWS 관리형 정책: AWSCodeCommitReadOnly
<a name="managed-policies-read"></a>

`AWSCodeCommitReadOnly` 정책을 IAM ID에 연결할 수 있습니다. 이 정책은 다른 AWS 서비스의 CodeCommit 및 리포지토리 관련 리소스에 대한 읽기 전용 액세스 권한과 자체 CodeCommit 관련 리소스(예: 리포지토리에 액세스할 때 IAM 사용자가 사용할 Git 자격 증명 및 SSH 키)를 생성하고 관리하는 기능을 부여합니다. 이 정책은 리포지토리 내용 읽기 기능은 부여하되 내용에 대한 변경을 허용하지 않으려는 사용자에게 적용합니다.

AWSCodeCommitReadOnly 정책에는 다음과 같은 정책 명령문이 포함됩니다.

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

****  

```
    { 
       "Version":"2012-10-17",		 	 	 
       "Statement":[ 
          { 
             "Effect":"Allow",
             "Action":[ 
                "codecommit:BatchGet*",
                "codecommit:BatchDescribe*",
                "codecommit:Describe*",
                "codecommit:EvaluatePullRequestApprovalRules",
                "codecommit:Get*",
                "codecommit:List*",
                "codecommit:GitPull"
             ],
             "Resource":"*"
          },
          { 
             "Sid":"CloudWatchEventsCodeCommitRulesReadOnlyAccess",
             "Effect":"Allow",
             "Action":[ 
                "events:DescribeRule",
                "events:ListTargetsByRule"
             ],
             "Resource":"arn:aws:events:*:*:rule/codecommit*"
          },
          { 
             "Sid":"SNSSubscriptionAccess",
             "Effect":"Allow",
             "Action":[ 
                "sns:ListTopics",
                "sns:ListSubscriptionsByTopic",
                "sns:GetTopicAttributes"
             ],
             "Resource":"*"
          },
          { 
             "Sid":"LambdaReadOnlyListAccess",
             "Effect":"Allow",
             "Action":[ 
                "lambda:ListFunctions"
             ],
             "Resource":"*"
          },
          { 
             "Sid":"IAMReadOnlyListAccess",
             "Effect":"Allow",
             "Action":[ 
                "iam:ListUsers"
             ],
             "Resource":"*"
          },
          { 
             "Sid":"IAMReadOnlyConsoleAccess",
             "Effect":"Allow",
             "Action":[ 
                "iam:ListAccessKeys",
                "iam:ListSSHPublicKeys",
                "iam:ListServiceSpecificCredentials",
                "iam:GetSSHPublicKey"
             ],
             "Resource":"arn:aws:iam::*:user/${aws:username}"
          },
          { 
             "Sid":"CodeStarNotificationsReadOnlyAccess",
             "Effect":"Allow",
             "Action":[ 
                "codestar-notifications:DescribeNotificationRule"
             ],
             "Resource":"*",
             "Condition":{ 
                "ArnLike":{ 
                   "codestar-notifications:NotificationsForResource":"arn:aws:codecommit:us-east-2:111122223333:*"
                }
             }
          },
          { 
             "Sid":"CodeStarNotificationsListAccess",
             "Effect":"Allow",
             "Action":[ 
                "codestar-notifications:ListNotificationRules",
                "codestar-notifications:ListEventTypes",
                "codestar-notifications:ListTargets"
             ],
             "Resource":"*"
          },
          {
             "Sid": "AmazonCodeGuruReviewerReadOnlyAccess",
             "Effect": "Allow",
             "Action": [
                "codeguru-reviewer:DescribeRepositoryAssociation",
                "codeguru-reviewer:ListRepositoryAssociations",
                "codeguru-reviewer:DescribeCodeReview",
                "codeguru-reviewer:ListCodeReviews"
             ],
             "Resource": "*"
          },
          {
            "Sid": "CodeStarConnectionsReadOnlyAccess",
            "Effect": "Allow",
            "Action": [
                "codestar-connections:ListConnections",
                "codestar-connections:GetConnection"
            ],
            "Resource": "arn:aws:codestar-connections:*:*:connection/*"
        }
    ]
}
```

------

## CodeCommit 관리형 정책 및 알림
<a name="notifications-permissions"></a>

AWS CodeCommit 는 사용자에게 리포지토리에 대한 중요한 변경 사항을 알릴 수 있는 알림을 지원합니다. CodeCommit에 대한 관리형 정책에는 알림 기능에 대한 정책 명령문이 포함되어 있습니다. 자세한 내용은 [알림이란 무엇입니까?](https://docs.aws.amazon.com/codestar-notifications/latest/userguide/welcome.html)를 참조하세요.

### 전체 액세스 관리형 정책의 알림과 관련된 권한
<a name="notifications-fullaccess"></a>

`AWSCodeCommitFullAccess` 관리형 정책에는 알림에 대한 전체 액세스를 허용하는 다음 설명이 포함되어 있습니다. 또한 이러한 관리형 정책이 적용된 사용자는 알림에 대한 Amazon SNS 주제를 생성 및 관리하고, 주제에 대해 사용자를 구독 및 구독 취소하고, 알림 규칙의 대상으로 선택할 주제 및 Slack에 대해 구성된 챗봇 애플리케이션 클라이언트의 Amazon Q Developer를 나열할 수 있습니다.

```
    {
        "Sid": "CodeStarNotificationsReadWriteAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:CreateNotificationRule",
            "codestar-notifications:DescribeNotificationRule",
            "codestar-notifications:UpdateNotificationRule",
            "codestar-notifications:DeleteNotificationRule",
            "codestar-notifications:Subscribe",
            "codestar-notifications:Unsubscribe"
        ],
        "Resource": "*",
        "Condition" : {
            "StringLike" : {"codestar-notifications:NotificationsForResource" : "arn:aws:codecommit:*"} 
        }
    },    
    {
        "Sid": "CodeStarNotificationsListAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:ListNotificationRules",
            "codestar-notifications:ListTargets",
            "codestar-notifications:ListTagsforResource,"
            "codestar-notifications:ListEventTypes"
        ],
        "Resource": "*"
    },
    {
        "Sid": "CodeStarNotificationsSNSTopicCreateAccess",
        "Effect": "Allow",
        "Action": [
            "sns:CreateTopic",
            "sns:SetTopicAttributes"
        ],
        "Resource": "arn:aws:sns:*:*:codestar-notifications*"
    },
    {
        "Sid": "CodeStarNotificationsChatbotAccess",
        "Effect": "Allow",
        "Action": [
            "chatbot:DescribeSlackChannelConfigurations",
            "chatbot:ListMicrosoftTeamsChannelConfigurations"
          ],
       "Resource": "*"
    }
```

### 읽기 전용 관리형 정책의 알림과 관련된 권한
<a name="notifications-readonly"></a>

`AWSCodeCommitReadOnlyAccess` 관리형 정책에는 알림에 대한 읽기 전용 액세스를 허용하는 다음 설명이 포함되어 있습니다. 이 관리형 정책이 적용된 사용자는 리소스에 대한 알림을 볼 수 있지만 리소스를 생성, 관리 또는 구독할 수는 없습니다.

```
   {
        "Sid": "CodeStarNotificationsPowerUserAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:DescribeNotificationRule"
        ],
        "Resource": "*",
        "Condition" : {
            "StringLike" : {"codestar-notifications:NotificationsForResource" : "arn:aws:codecommit:*"} 
        }
    },    
    {
        "Sid": "CodeStarNotificationsListAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:ListNotificationRules",
            "codestar-notifications:ListEventTypes",
            "codestar-notifications:ListTargets"
        ],
        "Resource": "*"
    }
```

### 다른 관리형 정책의 알림과 관련된 권한
<a name="notifications-otheraccess"></a>

`AWSCodeCommitPowerUser` 관리형 정책에는 사용자가 알림을 생성, 편집 및 구독할 수 있도록 허용하는 다음 설명이 포함되어 있습니다. 사용자는 알림 규칙을 삭제하거나 리소스에 대한 태그를 관리할 수는 없습니다.

```
    {
        "Sid": "CodeStarNotificationsReadWriteAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:CreateNotificationRule",
            "codestar-notifications:DescribeNotificationRule",
            "codestar-notifications:UpdateNotificationRule",
            "codestar-notifications:DeleteNotificationRule",
            "codestar-notifications:Subscribe",
            "codestar-notifications:Unsubscribe"
        ],
        "Resource": "*",
        "Condition" : {
            "StringLike" : {"codestar-notifications:NotificationsForResource" : "arn:aws:codecommit*"} 
        }
    },    
    {
        "Sid": "CodeStarNotificationsListAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:ListNotificationRules",
            "codestar-notifications:ListTargets",
            "codestar-notifications:ListTagsforResource",
            "codestar-notifications:ListEventTypes"
        ],
        "Resource": "*"
    },
    {
        "Sid": "SNSTopicListAccess",
        "Effect": "Allow",
        "Action": [
            "sns:ListTopics"
        ],
        "Resource": "*"
    },
    {
        "Sid": "CodeStarNotificationsChatbotAccess",
        "Effect": "Allow",
        "Action": [
            "chatbot:DescribeSlackChannelConfigurations",
            "chatbot:ListMicrosoftTeamsChannelConfigurations"
          ],
       "Resource": "*"
    }
```

IAM 및 알림에 대한 자세한 내용은 [AWS CodeStar 알림의 Identity and Access Management](https://docs.aws.amazon.com/codestar-notifications/latest/userguide/security-iam.html)를 참조하세요.

## AWS CodeCommit 관리형 정책 및 Amazon CodeGuru Reviewer
<a name="codeguru-permissions"></a>

CodeCommit은 프로그램 분석 및 기계 학습을 사용하여 Java 또는 Python 코드에서 일반적인 문제를 감지하고 권장 수정 사항을 제공하는 자동화된 코드 검토 서비스인 Amazon CodeGuru Reviewer를 지원합니다. CodeCommit용 관리형 정책에는 CodeGuru Reviewer 기능 관련 정책 명령문이 포함되어 있습니다. 자세한 내용은 [Amazon CodeGuru Reviewer는 무엇입니까](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html)를 참조하세요.

### AWSCodeCommitFullAccess의 CodeGuru Reviewer와 관련된 권한
<a name="codeguru-fullaccess"></a>

`AWSCodeCommitFullAccess` 관리형 정책에는 CodeGuru Reviewer가 CodeCommit 리포지토리와 연결 및 연결 해제할 수 있도록 허용하는 다음 명령문이 포함되어 있습니다. 이 관리형 정책이 적용된 사용자는 CodeCommit 리포지토리와 CodeGuru Reviewer 간의 연결 상태를 볼 수도 있고 풀 요청에 대한 리뷰 작업의 상태를 볼 수도 있습니다.

```
    {
      "Sid": "AmazonCodeGuruReviewerFullAccess",
      "Effect": "Allow",
      "Action": [
        "codeguru-reviewer:AssociateRepository",
        "codeguru-reviewer:DescribeRepositoryAssociation",
        "codeguru-reviewer:ListRepositoryAssociations",
        "codeguru-reviewer:DisassociateRepository",
        "codeguru-reviewer:DescribeCodeReview",
        "codeguru-reviewer:ListCodeReviews"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AmazonCodeGuruReviewerSLRCreation",
      "Action": "iam:CreateServiceLinkedRole",
      "Effect": "Allow",
      "Resource": "arn:aws:iam::*:role/aws-service-role/codeguru-reviewer.amazonaws.com/AWSServiceRoleForAmazonCodeGuruReviewer",
      "Condition": {
        "StringLike": {
          "iam:AWSServiceName": "codeguru-reviewer.amazonaws.com"
        }
      }
    },
    {
      "Sid": "CloudWatchEventsManagedRules",
      "Effect": "Allow",
      "Action": [
        "events:PutRule",
        "events:PutTargets",
        "events:DeleteRule",
        "events:RemoveTargets"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "events:ManagedBy": "codeguru-reviewer.amazonaws.com"
        }
      }
    }
```

### AWSCodeCommitPowerUser의 CodeGuru Reviewer와 관련된 권한
<a name="codeguru-poweruser"></a>

`AWSCodeCommitPowerUser` 관리형 정책에는 사용자가 리포지토리를 CodeGuru Reviewer와 연결 및 해제하고 연결 상태를 확인하고 풀 요청에 대한 리뷰 작업의 상태를 볼 수 있는 다음과 같은 명령문이 포함되어 있습니다.

```
    {
      "Sid": "AmazonCodeGuruReviewerFullAccess",
      "Effect": "Allow",
      "Action": [
        "codeguru-reviewer:AssociateRepository",
        "codeguru-reviewer:DescribeRepositoryAssociation",
        "codeguru-reviewer:ListRepositoryAssociations",
        "codeguru-reviewer:DisassociateRepository",
        "codeguru-reviewer:DescribeCodeReview",
        "codeguru-reviewer:ListCodeReviews"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AmazonCodeGuruReviewerSLRCreation",
      "Action": "iam:CreateServiceLinkedRole",
      "Effect": "Allow",
      "Resource": "arn:aws:iam::*:role/aws-service-role/codeguru-reviewer.amazonaws.com/AWSServiceRoleForAmazonCodeGuruReviewer",
      "Condition": {
        "StringLike": {
          "iam:AWSServiceName": "codeguru-reviewer.amazonaws.com"
        }
      }
    },
    {
      "Sid": "CloudWatchEventsManagedRules",
      "Effect": "Allow",
      "Action": [
        "events:PutRule",
        "events:PutTargets",
        "events:DeleteRule",
        "events:RemoveTargets"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "events:ManagedBy": "codeguru-reviewer.amazonaws.com"
        }
      }
    }
```

### AWSCodeCommitReadOnly의 CodeGuru Reviewer와 관련된 권한
<a name="codeguru-readonly"></a>

`AWSCodeCommitReadOnlyAccess` 관리형 정책에는 사용자가 CodeGuru Reviewer 연결 상태에 대해 읽기 전용으로 액세스하고 풀 요청에 대한 리뷰 작업 상태를 볼 수 있는 다음과 같은 명령문이 포함되어 있습니다. 이 관리형 정책이 적용된 사용자는 리포지토리를 연결하거나 연결 해제할 수 없습니다.

```
     {
      "Sid": "AmazonCodeGuruReviewerReadOnlyAccess",
      "Effect": "Allow",
      "Action": [
            "codeguru-reviewer:DescribeRepositoryAssociation",
            "codeguru-reviewer:ListRepositoryAssociations",
            "codeguru-reviewer:DescribeCodeReview",
            "codeguru-reviewer:ListCodeReviews"
      ],
      "Resource": "*"
    }
```

### Amazon CodeGuru Reviewer 서비스 연결 역할
<a name="codeguru-slr"></a>

리포지토리를 CodeGuru Reviewer와 연결하면, CodeGuru Reviewer가 풀 요청에서 Java 또는 Python 코드의 문제를 감지하고 권장 수정 사항을 제공할 수 있도록 서비스 링크 역할이 생성됩니다. 서비스 링크 역할의 이름은 AWSServiceRoleForAmazonCodeGuruReviewer입니다. 자세한 내용은 [Amazon CodeGuru Reviewer에 대한 서비스 연결 역할 사용](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/using-service-linked-roles.html)을 참조하세요.

자세한 내용은 *IAM 사용자 안내서*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)을 참조하세요.

## AWS 관리형 정책에 대한 CodeCommit 업데이트
<a name="security-iam-awsmanpol-updates"></a>



이 서비스가 이러한 변경 사항을 추적하기 시작한 이후부터 CodeCommit의 AWS 관리형 정책 업데이트에 대한 세부 정보를 봅니다. 이 페이지의 변경 사항에 대한 자동 알림을 받아보려면 [AWS CodeCommit 사용 설명서 문서 기록](history.md)에서 RSS 피드를 구독하세요.




| 변경 | 설명 | Date | 
| --- | --- | --- | 
|  [AWS 관리형 정책: AWSCodeCommitFullAccess](#managed-policies-full) 및 [AWS 관리형 정책: AWSCodeCommitPowerUser](#managed-policies-poweruser) – 기존 정책에 대한 업데이트  |  CodeCommit은 채팅 애플리케이션에서 Amazon Q Developer를 사용하는 추가 알림 유형을 지원하기 위해 이러한 정책에 권한을 추가했습니다. AWSCodeCommitPowerUser 및 AWSCodeCommitFullAccess 정책이 `chatbot:ListMicrosoftTeamsChannelConfigurations` 권한을 추가하도록 변경되었습니다.  | 2023년 5월 16일 | 
|  [AWS 관리형 정책: AWSCodeCommitReadOnly](#managed-policies-read) - 기존 정책 업데이트  |  CodeCommit이 정책에서 중복 권한을 제거했습니다. AWSCodeCommitReadOnly가 중복 권한 `"iam:ListAccessKeys"`를 제거하도록 변경되었습니다.  | 2021년 8월 18일 | 
|  CodeCommit이 변경 내용 추적 시작  |  CodeCommit이 AWS 관리형 정책에 대한 변경 사항 추적을 시작했습니다.  | 2021년 8월 18일 | 

# 고객 관리형 정책 예제
<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": "*"
    }
  ]
}
```

------