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

新規のお客様への AWS CodeCommit の提供は終了しました。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 アクションを実行できるようにしています。

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: 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 リポジトリに対してプルおよびプッシュできるようにしています。

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

例 3: 指定した IP アドレス範囲から接続するユーザーにリポジトリへのアクセスを許可する

IP アドレスが特定の IP アドレス範囲にある場合にのみ、ユーザーが CodeCommit リポジトリに接続することを許可するポリシーを作成できます。これには、有効なアプローチが 2 つあります。ユーザーの 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: ブランチに対するアクションを許可または拒否する

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

例えば、MyDemoRepo という名前のリポジトリで、そのブランチを削除することを含め、ユーザーが main という名前のブランチに変更を加えることを拒否する Deny ポリシーを作成できます。このポリシーは、AWSCodeCommitPowerUser 管理ポリシーとともに使用できます。これら 2 つのポリシーが適用されたユーザーは、ブランチの作成と削除、プルリクエストの作成、および AWSCodeCommitPowerUser で許可されているその他すべてのアクションを実行できますが、main というブランチに変更をプッシュしたり、CodeCommit コンソールの main ブランチのファイルを追加または編集したり、ブランチまたはプルリクエストを main ブランチにマージしたりすることはできません。DenyGitPush が適用されているので、ユーザーがローカルリポジトリからプッシュしたときに最初の 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: タグを使用してリポジトリに対するアクションを許可または拒否する

リポジトリに関連付けられた AWS タグに基づいて、リポジトリ上でアクションを許可あるいは拒否するポリシーを作成し、これらのポリシーを IAM ユーザーを管理するために設定した IAM グループに適用できます。例えば、AWS タグキーが Status で、キー値が Secret のリポジトリにおけるすべての CodeCommit アクションを拒否するポリシーを作成し、一般的なデベロッパー (デベロッパー) のために作成した IAM グループにこのポリシーを適用することができます。次に、上記のタグ付けされたリポジトリ上で作業するデベロッパーが一般的なデベロッパーグループのメンバーではなく、代わりに制限されたポリシーが適用されていない別の 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 アクションのみを許可することを除き、CodeCommit アクションに対する AWSCodeCommitPowerUser 許可に相当する許可を付与します。

注記

このポリシーの例には、CodeCommit のアクションのみが含まれます。AWSCodeCommitPowerUser マネージドポリシーに含まれている他の AWS サービスのアクションは含まれていません。詳細については、「AWS 管理ポリシー: AWSCodeCommitPowerUser」を参照してください。

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