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

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

独自のカスタム IAM ポリシーを作成して、CodeCommit アクションとリソースのための権限を許可することもできます。これらのカスタムポリシーは、それらのアクセス権限が必要な 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: 1 つのリポジトリで Git を使用することをユーザーに許可する

CodeCommit では、GitPull IAM ポリシーのアクセス許可は、git fetchgit clone など、CodeCommit からデータを取得する Git クライアントコマンドに適用されます。同様に、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 という名前のリポジトリで、そのブランチを削除することを含め、ユーザーが main という名前のブランチに変更を加えることを拒否する Deny ポリシーを作成できます。このポリシーは、AWSCodeCommitPowerUser 管理ポリシーとともに使用できます。この 2 つのポリシーが適用されたユーザーは、ブランチの作成と削除、プルリクエストの作成、および 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 アクションを拒否するポリシーを作成し、一般的なデベロッパー (デベロッパー) のために作成した IAM グループにこのポリシーを適用することができます。次に、上記のタグ付けされたリポジトリ上で作業するデベロッパーが一般的なデベロッパーグループのメンバーではなく、代わりに制限されたポリシーが適用されていない別の 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 のアクションのみが含まれます。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 (Amazon SNS) からの通知の送信などのアクションをトリガーするように CodeCommit リポジトリを設定できます。CodeCommit リポジトリの作成に使用したものと同じアカウントで Amazon SNS トピックを作成する場合は、追加の IAM ポリシーまたはアクセス許可を設定する必要はありません。トピックを作成し、リポジトリのトリガーを作成できます。詳細については、「Amazon SNS トピック用のトリガーを作成する」を参照してください。

ただし、トリガーを設定して、別の Amazon Web Services アカウントで 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: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 Events を設定できます。これを行うには、トピックのポリシーを作成するか、次のようなトピックの既存のポリシーを変更して、CloudWatch Events に Amazon SNS トピックへのイベントの発行を許可するアクセス許可を付与する必要があります。

{ "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 Events の詳細については、サポートされている各サービスからの CloudWatch Events イベントの例を参照してください。IAM とポリシー言語の詳細については、IAM JSON ポリシー言語の文法を参照してください。

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

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

トリガーで 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 に付与する必要もあります。例については、「CodeCommit でLambda 関数を実行できるようにするには」の「既存の Lambda 関数のトリガーを作成する」セクションを参照してください。

Lambda 関数のリソースポリシーの詳細については、AWS Lambda デベロッパーガイドAddPermission およびプル/プッシュイベントモデルを参照してください。