カスタマーマネージドポリシーの例 - AWS CodeCommit

AWS CodeCommit は、新規顧客には利用できなくなりました。 AWS CodeCommit の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

カスタマーマネージドポリシーの例

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

カスタマー管理のアイデンティティポリシーの例

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

注記

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

例 1: ユーザーに 1 つの で CodeCommit オペレーションの実行を許可する AWS リージョン

次のアクセス許可ポリシーでは、ワイルドカード文字 ("codecommit:*") を使用して、ユーザーが他の ではなく us-east-2 リージョンですべての CodeCommit アクションを実行できるようにします AWS リージョン。

{ "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 を使用することをユーザーに許可する

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

次の例では、指定されたユーザーが という名前の CodeCommit リポジトリからプルしてプッシュすることを許可していますMyDemoRepo

{ "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 アドレス範囲内にある場合にのみ、ユーザーが a CodeCommit リポジトリに接続できるようにするポリシーを作成できます。これには、有効なアプローチが 2 つあります。ユーザーの IP アドレスが特定のブロック内にない場合、 CodeCommit オペレーションを許可しないDenyポリシーを作成したり、ユーザーの IP アドレスが特定のブロック内にある場合、 CodeCommit オペレーションを許可するAllowポリシーを作成したりできます。

特定の IP 範囲にないすべてのユーザーのアクセスを拒否する Deny ポリシーを作成することができます。例えば、 AWSCodeCommitPowerUser 管理ポリシーとカスタマー管理ポリシーを、リポジトリへのアクセスを必要とするすべてのユーザーにアタッチできます。次のポリシー例では、IP アドレスが 203.0.113.0/16 の指定された IP アドレスブロック内にないユーザーに対する all CodeCommit アクセス許可を拒否しています。

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

次のポリシー例では、指定したユーザーが Word 管理ポリシーと同等のアクセス許可を持つ MyDemoRepo という名前の a AWSCodeCommitPowerUser リポジトリにアクセスできるのは、IP アドレスが 203 CodeCommit0.113.0/16 の指定されたアドレスブロック内にある場合のみです。

{ "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」を参照してください。

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

ヒント

Amazon Web Services アカウントのすべてのリポジトリで main という名前のすべてのブランチに適用されるポリシーを作成する場合は、リポジトリ ARN の代わりにアスタリスク ( * ) Resourceを指定します。

{ "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 管理ポリシーで使用して、メインブランチのリポジトリへの自動プッシュを許可できます。効果は であるため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 タグキーのステータスSecret のキー値を持つリポジトリに対するすべての CodeCommit アクションを拒否するポリシーを作成し、そのポリシーを一般的なデベロッパー用に作成した IAM グループに適用できます (Developers)。 次に、これらのタグ付けされたリポジトリに作業するデベロッパーがその一般のメンバーではないことを確認する必要があります。Developers グループ。ただし、制限ポリシーが適用されていない別の IAM グループに属します (SecretDevelopers)。

次の例では、キーステータスSecret のキー値でタグ付けされたリポジトリに対する all 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 サービスの統合許可を付与するカスタマーマネージドユーザーポリシーの例を示します。a CodeCommit リポジトリへのクロスアカウントアクセスを許可するポリシーの具体的な例については、「」を参照してくださいロールを使用して AWS CodeCommit リポジトリへのクロスアカウントアクセスを設定する

注記

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

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

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

ただし、別の Amazon Web Services アカウントで Amazon SNS トピックを使用するようにトリガーを設定する場合は、まず、Word がそのトピック CodeCommit に発行できるようにするポリシーでそのトピックを設定する必要があります。その他のアカウントから Amazon SNS コンソールを開き、リストからトピックを選択し、その他のトピックアクショントピックポリシーの編集を選択します。詳細タブで、トピックのポリシーを変更して、 CodeCommit がそのトピックに発行できるようにします。例えば、ポリシーがデフォルトのポリシーである場合、ポリシーを次のように変更し、 の項目を変更します。red italic text リポジトリ、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 (Amazon SNS) トピックポリシーを作成して、Amazon CloudWatch Events がトピックに CodeCommit イベントを発行できるようにします。

CloudWatch イベントを含むイベントが発生したときに Amazon SNS トピックに発行するように CodeCommit 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 Event Examples」を参照してください。IAMとポリシー言語の詳細については、JSONIAMポリシー言語の文法」を参照してください。

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

コードプッシュやその他のイベントが関数の呼び出しなどのアクションをトリガーするように、a CodeCommit リポジトリを設定できます AWS Lambda。詳細については、「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」と「プル/プッシュイベントモデル」を参照してください。