CodeCommit でアイデンティティベースのポリシー (IAM ポリシー) を使用する - AWS CodeCommit

CodeCommit でアイデンティティベースのポリシー (IAM ポリシー) を使用する

以下のアイデンティティベースのポリシーの例では、アカウント管理者が IAM ID (ユーザー、グループ、およびロール) にアクセス許可ポリシーをアタッチし、CodeCommit リソースに対するオペレーションを実行するためのアクセス許可を付与する方法を示します。

重要

初めに、CodeCommit リソースへのアクセスを管理するための基本概念と、使用可能なオプションについて説明する概要トピックをお読みになることをお勧めします。詳細については、「CodeCommit リソースへのアクセス許可の管理の概要」を参照してください。

以下は、アイデンティティベースのアクセス許可ポリシーの例です。

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

このポリシーには、us-east-2 リージョンにある MyDestinationRepo という名前の CodeCommit リポジトリおよび MyDemo という名前で始まるすべての CodeCommit リポジトリに関する情報を取得することをユーザーに許可するステートメントがあります。

CodeCommit コンソールを使用するために必要なアクセス許可

各 CodeCommit API オペレーションの必要なアクセス許可を確認するには、また、CodeCommit のオペレーションの詳細については、「CodeCommit の権限リファレンス」を参照してください。

ユーザーが CodeCommit コンソールを使用することを許可するには、管理者は CodeCommit アクションのアクセス許可を付与する必要があります。たとえば、AWSCodeCommitPowerUser マネージドポリシーまたはそれに相当するユーザーまたはグループにアタッチできます。

アイデンティティベースのポリシーによりユーザーに付与されたアクセス許可に加えて、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 および暗号化」を参照してください。

コンソールでリソースを表示する

CodeCommit コンソールでは、サインインしている AWS リージョンで AWS アカウントのレポジトリのリストを表示するために、ListRepositories アクセス権限が必要です。このコンソールには、大文字と小文字を区別しない検索をリソースに対して迅速に実行するための [Go to resource (リソースに移動)] 機能も含まれています。この検索は、サインインしている AWS リージョンの AWS アカウントで実行されます。次のリソースは、以下のサービス全体で表示されます。

  • AWS CodeBuild: ビルドプロジェクト

  • AWS CodeCommit: リポジトリ

  • AWS CodeDeploy: アプリケーション

  • AWS CodePipeline: パイプライン

この検索をすべてのサービスのリソースにわたって実行するには、次のアクセス権限が必要です。

  • CodeBuild: ListProjects

  • CodeCommit: ListRepositories

  • CodeDeploy: ListApplications

  • CodePipeline: ListPipelines

あるサービスに対するアクセス権限がない場合、そのサービスのリソースに関して結果は返されません。リソースを表示するためのアクセス権限がある場合でも、特定のリソースの表示に対する明示的な Deny がある場合にはそれらのリソースは返されません。

CodeCommit の AWS 管理 (定義済み) ポリシー

AWS は、AWS によって作成され管理されるスタンドアロンの IAM ポリシーが提供する多くの一般的ユースケースに対応します。これらの AWS 管理ポリシーは、一般的ユースケースに必要なアクセス許可を付与します。また、CodeCommit の管理ポリシーは、該当するポリシーが付与されたユーザーの責任の必要に応じて、IAM、Amazon SNS、および Amazon CloudWatch Events などの他のサービスのオペレーションを実行するアクセス許可を提供します。たとえば、AWSCodeCommitFullAccess ポリシーは管理レベルのユーザーポリシーで、このポリシーを持つユーザーは、リポジトリの CloudWatch イベント ルール (名前にプレフィックス codecommit が付いているルール) とリポジトリ関連イベントに関する通知の Amazon SNS トピック (名前にプレフィックス codecommit が付いているトピック) を作成および管理でき、また、CodeCommit のリポジトリを管理できます。

以下の AWS 管理ポリシーはアカウントのユーザーにアタッチできます。これらは CodeCommit に固有の管理ポリシーです。

AWSCodeCommitFullAccess

AWSCodeCommitFullAccess – CodeCommit へのフルアクセスを付与します。リポジトリを削除する権限も含め、AWS アカウントの CodeCommit リポジトリおよび関連リソースを完全に制御する権限を付与したい管理レベルのユーザーにのみこのポリシーを適用します。

AWSCodeCommitFullAccess ポリシーには、次のポリシーステートメントが含まれています。

{ "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": { "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": "AmazonCodeGuruReviewerFullAccess", "Effect": "Allow", "Action": [ "codeguru-reviewer:AssociateRepository", "codeguru-reviewer:DescribeRepositoryAssociation", "codeguru-reviewer:ListRepositoryAssociations", "codeguru-reviewer:DisassociateRepository" ], "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" ], "Resource": "*" } ] }

AWSCodeCommitPowerUser

AWSCodeCommitPowerUser – CodeCommit のすべての機能およびリポジトリ関連リソースへのアクセスをユーザーに許可しますが、CodeCommit リポジトリの削除、または Amazon CloudWatch Events などの他の AWS のサービスのリポジトリ関連リソースの作成または削除はできません。ほとんどのユーザーにこのポリシーを適用することをお勧めします。

AWSCodeCommitPowerUser ポリシーには、次のポリシーステートメントが含まれています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:AssociateApprovalRuleTemplateWithRepository", "codecommit:BatchAssociateApprovalRuleTemplateWithRepositories", "codecommit:BatchDisassociateApprovalRuleTemplateFromRepositories", "codecommit:BatchGet*", "codecommit:BatchDescribe*", "codecommit:Get*", "codecommit:List*", "codecommit:Create*", "codecommit:DeleteBranch", "codecommit:DeleteFile", "codecommit:Describe*", "codecommit:DisassociateApprovalRuleTemplateFromRepository", "codecommit:EvaluatePullRequestApprovalRules", "codecommit:OverridePullRequestApprovalRules", "codecommit:Put*", "codecommit:Post*", "codecommit:Merge*", "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": { "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": "AmazonCodeGuruReviewerFullAccess", "Effect": "Allow", "Action": [ "codeguru-reviewer:AssociateRepository", "codeguru-reviewer:DescribeRepositoryAssociation", "codeguru-reviewer:ListRepositoryAssociations", "codeguru-reviewer:DisassociateRepository" ], "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" ], "Resource": "*" } ] }

AWSCodeCommitReadOnly

AWSCodeCommitReadOnly – CodeCommit および他の AWS のサービスのリポジトリ関連リソースの読み取り専用アクセスとともに、独自の CodeCommit 関連リソース (リポジトリへのアクセスに使用する Git 認証情報および IAM ユーザーの SSH キーなど) を作成および管理する機能を付与します。リポジトリのコンテンツを読み込む機能 (コンテンツを変更させない) を付与したいユーザーにこのポリシーを適用します。

AWSCodeCommitReadOnly ポリシーには、次のポリシーステートメントが含まれています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:BatchGet*", "codecommit:BatchDescribe*", "codecommit:EvaluatePullRequestApprovalRules", "codecommit:Get*", "codecommit:Describe*", "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:ListAccessKeys", "iam:GetSSHPublicKey" ], "Resource": "arn:aws:iam::*:user/${aws:username}" }, { "Sid": "CodeStarNotificationsReadOnlyAccess", "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": "*" }, { "Sid": "AmazonCodeGuruReviewerReadOnlyAccess", "Effect": "Allow", "Action": [ "codeguru-reviewer:DescribeRepositoryAssociation", "codeguru-reviewer:ListRepositoryAssociations" ], "Resource": "*" } ] }

CodeCommit managed policies and notifications

AWS CodeCommit supports notifications, which can notify users of important changes to repositories. Managed policies for CodeCommit include policy statements for notification functionality. For more information, see What are notifications?.

Permissions related to notifications in full access managed policies

The AWSCodeCommitFullAccess managed policy includes the following statements to allow full access to notifications. Users with this managed policy applied can also create and manage Amazon SNS topics for notifications, subscribe and unsubscribe users to topics, list topics to choose as targets for notification rules, and list AWS Chatbot clients configured for Slack.

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

Permissions related to notifications in read-only managed policies

The AWSCodeCommitReadOnlyAccess managed policy includes the following statements to allow read-only access to notifications. Users with this managed policy applied can view notifications for resources, but cannot create, manage, or subscribe to them.

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

Permissions related to notifications in other managed policies

The AWSCodeCommitPowerUser managed policy includes the following statements to allow users to create, edit, and subscribe to notifications. Users cannot delete notification rules or manage tags for resources.

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

For more information about IAM and notifications, see Identity and Access Management for AWS CodeStar Notifications.

AWS CodeCommit マネージドポリシーと Amazon CodeGuru Reviewer

CodeCommit は、プログラム分析と Machine Learning を使用して一般的な問題を検出し、Java コードの修正を推奨する自動化されたコードレビューサービスである、Amazon CodeGuru Reviewer をサポートしています。CodeCommit のマネージドポリシーには、CodeGuru Reviewer 機能のポリシーステートメントが含まれます。詳細については、「Amazon CodeGuru Reviewer とは何ですか?」を参照してください。

AWSCodeCommitFullAccess の CodeGuru Reviewer に関連するアクセス許可

AWSCodeCommitFullAccess マネージドポリシーには、CodeGuru Reviewer が CodeCommit リポジトリとの関連付けと関連付け解除をできるようにする次のステートメントが含まれます。このマネージドポリシーが適用されたユーザーは、CodeCommit リポジトリと CodeGuru Reviewer の間の関連付けステータスを表示することもできます。

{ "Sid": "AmazonCodeGuruReviewerFullAccess", "Effect": "Allow", "Action": [ "codeguru-reviewer:AssociateRepository", "codeguru-reviewer:DescribeRepositoryAssociation", "codeguru-reviewer:ListRepositoryAssociations", "codeguru-reviewer:DisassociateRepository" ], "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 に関連するアクセス許可

AWSCodeCommitPowerUser マネージドポリシーには、ユーザーがリポジトリを CodeGuru Reviewer と関連付けたり関連付けを解除したり関連付けステータスを表示したりできるようにする次のステートメントが含まれています。

{ "Sid": "AmazonCodeGuruReviewerFullAccess", "Effect": "Allow", "Action": [ "codeguru-reviewer:AssociateRepository", "codeguru-reviewer:DescribeRepositoryAssociation", "codeguru-reviewer:ListRepositoryAssociations", "codeguru-reviewer:DisassociateRepository" ], "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 に関連するアクセス許可

AWSCodeCommitReadOnlyAccess マネージドポリシーには、CodeGuru Reviewer 関連付けステータスへの読み取り専用アクセスを許可する次のステートメントが含まれています。このマネージドポリシーが適用されたユーザーは、リポジトリを関連付けたり関連付け解除できません。

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

Amazon CodeGuru Reviewer サービスにリンクされたロール

リポジトリを CodeGuru Reviewer に関連付けると、CodeGuru Reviewer でプルリクエストの Java コードの問題を検出し、修正を推奨できるように、サービスリンクロールが作成されます。サービスにリンクされたロールは、AWSServiceRoleForAmazonCodeGuruReviewer と呼ばれます。詳細については、「Amazon CodeGuru Reviewer のサービスにリンクされたロールの使用」を参照してください。

詳細については、『IAM ユーザーガイド』の「AWS 管理ポリシー」を参照してください。

お客様が管理するポリシーの例

独自のカスタム IAM ポリシーを作成して、CodeCommit アクションとリソースのためのアクセス許可を付与することもできます。こうしたカスタムポリシーは、該当するアクセス許可が必要な IAM ユーザーまたはグループにアタッチできます。CodeCommit とその他の AWS のサービスを統合するための独自のカスタム IAM ポリシーを作成することもできます。

お客様が管理するアイデンティティポリシーの例

次の IAM ポリシーの例では、さまざまな CodeCommit アクションのアクセス許可を付与します。それらを使用して、IAM ユーザーおよびロールに対して CodeCommit アクセスを制限します。これらのポリシーは、CodeCommit コンソール、API、AWS SDK、または AWS CLI を使用して、アクションを実行する機能を制御します。

注記

すべての例で、米国西部 (オレゴン) リージョン (us-west-2) リージョンを使用し、架空のアカウント ID を含めています。

例 1: ユーザーに単一のリージョンで 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: ユーザーに 1 つのリポジトリの Git の使用を許可する

CodeCommit で、GitPull の IAM ポリシーアクセス許可は、CodeCommit からデータを取得する Git クライアントコマンド (git fetchgit clone など) に適用されます。同様に、GitPush IAM ポリシーアクセス許可は、CodeCommit にデータを送信する Git クライアントコマンドに適用されます。たとえば、GitPush IAM ポリシーアクセス許可が Allow に設定されている場合、ユーザーは Git プロトコルを使用してブランチの削除をプッシュできます。そのプッシュは、その IAM ユーザーの DeleteBranch オペレーションに適用されているどのアクセス許可の影響も受けません。DeleteBranch アクセス許可は、コンソール、AWS CLI、SDK、および API で実行されるアクションに適用されますが、Git プロトコルには適用されません。

以下の例では、指定したユーザーが 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 リポジトリに接続することを許可するポリシーを作成できます。これには、有効なアプローチが 2 つあります。ユーザーの 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: ブランチのアクションを許可または拒否する

1 つ以上のブランチで、指定したアクションに対するユーザーのアクセス許可を拒否するポリシーを作成できます。あるいは、リポジトリの他のブランチにはないような、1 つ以上のブランチに対してアクションを許可するポリシーを作成することもできます。これらのポリシーは、適切な管理 (事前定義済み) ポリシーとともに使用できます。詳細については、「AWS CodeCommit のブランチへのプッシュとマージの制限」を参照してください。

たとえば、MyDemoRepo という名前のリポジトリで、そのブランチを削除することを含め、ユーザーが master という名前のブランチに変更を加えることを拒否する Deny ポリシーを作成できます。このポリシーは、[AWSCodeCommitPowerUser] 管理ポリシーで使用できます。この 2 つのポリシーを適用したユーザーは、ブランチの作成と削除、プルリクエストの作成、[AWSCodeCommitPowerUser] で許可されているその他すべてのアクションを実行できますが、master というブランチに変更をプッシュすることはできず、CodeCommit コンソールの master ブランチのファイルを追加または編集、または master ブランチへのブランチのマージあるいはリクエストのプルを実行することはできません。GitPushDeny が適用されているので、ユーザーがローカルリポジトリからプッシュしたときに最初の GitPush 呼び出しの有効性を分析できるように、ポリシーに Null ステートメントを含める必要があります。

ヒント

AWS アカウントのすべてのリポジトリで master という名前のすべてのブランチに適用するポリシーを作成する場合、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/master" ] }, "Null": { "codecommit:References": false } } } ] }

次のポリシー例では、ユーザーは AWS アカウントのすべてのリポジトリ内の master というブランチに変更を加えることができます。他のブランチへの変更は許可されません。このポリシーを AWSCodeCommitReadOnly 管理ポリシーとともに使用して、マスターブランチにあるリポジトリへの自動プッシュを許可することができます。効果は Allow であるため、この例のポリシーは AWSCodeCommitPowerUser などの管理ポリシーでは機能しません。

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

例 5: タグを使用してリポジトリのアクションを許可または拒否する

リポジトリに関連付けられた AWS タグに基づいて、リポジトリ上でアクションを許可あるいは拒否するポリシーを作成し、これらのポリシーを IAM ユーザーを管理するために設定した IAM グループに適用できます。たとえば、AWS タグキーが Status でキー値が Secret のリポジトリにおけるすべての CodeCommit アクションを拒否するポリシーを作成し、一般的な開発者 (開発者) のために作成した IAM グループにこのポリシーを適用することができます。次に、上記のタグ付けされたリポジトリ上で作業する開発者が一般的な開発者グループのメンバーではなく、代わりに制限されたポリシーが適用されていない別の IAM グループに属していること (SecretDevelopers) を確認する必要があります。

次の例では、Status キーと Secret のキー値でタグ付けされたリポジトリ上のすべての CodeCommit アクションを拒否しています。

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Deny", "Action" : "codecommit:*" "Resource" : "*", "Condition" : { "StringEquals" : "aws:ResourceTag/Status": "Secret" } } ] }

すべてのリポジトリではなく特定のリポジトリをリソースとして指定することで、この戦略をさらに精密にできます。また、特定のタグによってタグ付けされていないすべてのリポジトリ上のアクションを許可するポリシーを作成することもできます。たとえば、次のポリシーは特定のタグによってタグ付けされたものを除くすべてのリポジトリに、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:TagResource", "codecommit:Test*", "codecommit:UntagResource", "codecommit:Update*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceTag/Status": "Secret", "aws:ResourceTag/Team": "Saanvi" } } } ] }

お客様が管理する統合ポリシーの例

このセクションでは、CodeCommit と他の AWS のサービス間の統合を行うためのアクセス許可を付与するカスタマーマネージドのユーザーポリシーの例を示します。CodeCommit リポジトリへのクロスアカウントアクセスを許可するポリシーの特定の例については、「ロールを使用して AWS CodeCommit リポジトリにクロスアカウントアクセスを設定する」を参照してください。

注記

すべての例で、リージョンが必要なときは 米国西部 (オレゴン) リージョン (us-west-2) を使用し、架空のアカウント ID を含めています。

例 1: Amazon SNS トピックへのクロスアカウントアクセスを有効にするポリシーを作成する

コードのプッシュや他のイベント (Amazon Simple Notification Service (Amazon SNS) からの通知の送信など) によってアクションがトリガーされるように、CodeCommit リポジトリを設定できます。CodeCommit リポジトリの作成に使用したものと同じアカウントで Amazon SNS トピックを作成する場合は、追加の IAM ポリシーまたはアクセス許可を設定する必要はありません。トピックを作成し、リポジトリのトリガーを作成できます。詳細については、「Amazon SNS トピックのトリガーを作成する」を参照してください。

ただし、トリガーを設定して、別の AWS アカウントで Amazon SNS トピックを使用する場合は、まず CodeCommit からそのトピックに発行することを許可するポリシーを使用してトピックを設定する必要があります。他のアカウントから、Amazon SNS コンソールを開き、リストからトピックを選択し、[Other topic actions (その他のトピックの操作)] で [Edit topic policy (トピックのポリシーの編集)] を選択します。[Advanced] タブで、トピックのポリシーを変更して、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:Receive", "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 CloudWatch Events がトピックに CodeCommit イベントを発行する Amazon Simple Notification Service (Amazon SNS) トピックポリシーを作成する

CodeCommit イベントを含むイベントが発生したときに Amazon SNS トピックに発行するように CloudWatch イベント を設定できます。これを行うには、トピックのポリシーを作成するか、次のようなトピックの既存のポリシーを変更して、CloudWatch イベント に Amazon SNS トピックへのイベントの発行を許可するアクセス許可を付与する必要があります。

{ Version":"2012-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 イベント イベントの例」を参照してください。

例 3: CodeCommit トリガーとの AWS Lambda 統合のためのポリシーを作成する

コードがプッシュされるように、または他のイベントでアクションがトリガーされるように (AWS Lambda の関数の呼び出しなど)、CodeCommit リポジトリを設定することができます。詳細については、「Lambda 関数のトリガーを作成する」を参照してください。この情報はトリガーに固有のものであり、CloudWatch イベント には該当しません。

トリガーで Lambda 関数を直接実行し (Amazon SNS トピックを使用して 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」および「プル/プッシュイベントモデル」を参照してください。