고객 관리형 정책 예 - AWS CodeCommit

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

고객 관리형 정책 예

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

고객 관리형 자격 증명 정책 예

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

참고

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

예제

예제 1: 사용자가 단일 AWS 리전에서 CodeCommit 작업을 수행하도록 허용

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

{ "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을 사용하도록 허용

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

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

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

예제 3: 지정 IP 주소 범위에서 연결된 사용자에게 리포지토리에 대한 액세스 허용

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

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

{ "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 관리형 정책의 상응하는 권한을 허용합니다.

{ "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:111111111111:MyDemoRepo", "Condition": { "IpAddress": { "aws:SourceIp": [ "203.0.113.0/16" ] } } } ] }

예시 4: 모든 브랜치에서 작업 허용 또는 거부

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

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

작은 정보

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

{ "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 같은 관리형 정책과 함께 작동하지 않습니다.

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

예제 5: 태그에 따라 리포지토리에 대한 작업 거부 또는 허용

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

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

{ "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 단원을 참조하세요.

{ "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": "*" } ] }

고객 관리형 통합 정책 예

이 단원에서는 CodeCommit과 다른 AWS 서비스 간의 통합을 위한 권한을 부여하는 고객 관리형 사용자 정책 예제를 제공합니다. CodeCommit 리포지토리에 대한 크로스 계정 액세스를 허용하는 특정한 정책 예제는 역할을 사용하여 AWS CodeCommit 리포지토리에 대한 계정 간 액세스를 구성합니다. 단원을 참조하세요.

참고

모든 예에서는 AWS 리전가 필요할 경우 미국 서부(오레곤) 리전(us-west-2)을 사용하며, 가상의 계정 ID를 포함합니다.

예제

예제 1: Amazon SNS 주제에 대한 크로스 계정 액세스 권한을 허용하는 정책 생성

코드 푸시 또는 기타 이벤트가 Amazon Simple Notification Service(SNS)로부터 알림 전송과 같은 작업을 트리거하도록 CodeCommit 리포지토리를 구성할 수 있습니다. CodeCommit 리포지토리를 생성하는 데 사용한 것과 동일한 계정으로 Amazon SNS 주제를 생성할 경우 추가 IAM 정책 또는 권한을 구성할 필요가 없습니다. 주제를 생성한 다음 리포지토리 트리거를 생성할 수 있습니다. 자세한 내용은 Amazon SNS 주제에 대한 트리거 생성 섹션을 참조하세요.

하지만 다른 Amazon Web Services 계정에서 Amazon SNS 주제를 사용하도록 트리거를 구성하려면, CodeCommit이 해당 주제를 게시하도록 허용하는 정책으로 해당 주제를 먼저 구성해야 합니다. 다른 계정에서 Amazon SNS 콘솔을 열고, 목록에서 주제를 선택하고, 기타 주제 작업에서 주제 정책 편집을 선택합니다. 고급 탭에서 CodeCommit이 해당 주제에 게시하도록 허용하게 주제의 정책을 수정합니다. 예를 들어 해당 정책이 기본 정책일 경우 다음과 같이 정책을 수정하여 빨간색 이탤릭 텍스트를 리포지토리, Amazon SNS 주제 및 계정과 일치하도록 변경합니다.

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "sns:Subscribe", "sns:ListSubscriptionsByTopic", "sns:DeleteTopic", "sns:GetTopicAttributes", "sns:Publish", "sns:RemovePermission", "sns:AddPermission", "sns:SetTopicAttributes" ], "Resource": "arn:aws:sns:us-east-2:111111111111:NotMySNSTopic", "Condition": { "StringEquals": { "AWS:SourceOwner": "111111111111" } } }, { "Sid": "CodeCommit-Policy_ID", "Effect": "Allow", "Principal": { "Service": "codecommit.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111111111111:NotMySNSTopic", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo", "AWS:SourceAccount": "111111111111" } } } ] }

예제 2: Amazon Simple Notification Service(SNS) 주제 정책을 생성하여 Amazon CloudWatch Events가 주제에 대한 CodeCommit 이벤트를 게시하도록 허용합니다.

CodeCommit 이벤트를 비롯한 이벤트가 발생하면, Amazon SNS 주제에 게시하도록 CloudWatch Events를 구성할 수 있습니다. 그렇게 하려면 해당 주제에 대한 정책을 생성하거나 다음과 유사한 주제에 대한 기존 정책을 수정하여 이벤트를 Amazon SNS 주제에 게시할 수 있는 권한이 CloudWatch Events에 있어야 합니다.

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic", "Condition": { "StringEquals": { "AWS:SourceOwner": "123456789012" } } }, { "Sid": "Allow_Publish_Events", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }

CodeCommit 및 CloudWatch 이벤트에 대한 자세한 내용은 지원되는 서비스의 CloudWatch 이벤트의 이벤트 예제를 참조하세요. IAM 및 정책 언어에 대한 자세한 내용은 IAM JSON 정책 언어의 문법을 참조하세요.

예제 3: CodeCommit 트리거를 사용한, AWS Lambda 통합에 대한 정책 생성

코드 푸시나 기타 이벤트가 AWS Lambda의 함수 호출과 같은 작업을 트리거하도록 CodeCommit 리포지토리를 구성할 수 있습니다. 자세한 내용은 Lambda 함수를 위한 트리거 생성 섹션을 참조하세요. 이 정보는 트리거와 관련되며 CloudWatch Events와는 관련되지 않습니다.

트리거가 Amazon SNS 주제를 사용하여 Lambda 함수를 간접 호출하는 대신 직접 Lambda 함수를 실행하기를 원한다면, 그리고 Lambda 콘솔에서 트리거를 구성하지 않으려면, 함수의 리소스 기반 정책에 다음과 비슷한 명령문을 포함시켜야 합니다.

{ "Statement":{ "StatementId":"Id-1", "Action":"lambda:InvokeFunction", "Principal":"codecommit.amazonaws.com", "SourceArn":"arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo", "SourceAccount":"111111111111" } }

Lambda 함수를 호출하는 CodeCommit 트리거를 수동으로 구성할 경우, Lambda AddPermission 명령을 사용하여 CodeCommit이 함수를 간접 호출할 수 있는 권한도 부여해야 합니다. 해당 예제는 Lambda 함수를 CodeCommit 실행하도록 허용하려면기존 Lambda 함수를 위한 트리거 생성 단원을 참조하세요.

Lambda 함수의 리소스 정책에 대해 자세히 알아보려면 AWS Lambda 개발자 안내서에서 AddPermission풀/푸시 이벤트 모델을 참조하세요.