客戶受管政策範例 - AWS CodeCommit

AWS CodeCommit 不再提供給新客戶。的現有客戶 AWS CodeCommit 可以繼續正常使用服務。進一步了解」

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

客戶受管政策範例

您可以建立自己的自訂 IAM 政策,以允許 CodeCommit 動作和資源的許可。您可以將這些自訂政策連接至需要這些許可的 IAM 使用者或群組。您也可以建立自己的自訂 IAM 政策,以便在 CodeCommit 和其他 AWS 服務之間進行整合。

客戶受管身分政策範例

下列範例 IAM 政策授予各種 CodeCommit 動作的許可。使用它們來限制 IAM 使用者和角色的 CodeCommit 存取。這些政策控制使用 CodeCommit 主控台、API、 AWS SDKs或 執行動作的能力 AWS CLI。

注意

所有範例皆使用美國西部 (奧勒岡) 區域 (us-west-2) 並包含虛構帳戶 ID。

範例

範例 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:允許使用者將 Git 用於單一儲存庫

在 CodeCommit GitPull 中,IAM 政策許可適用於從 CodeCommit 擷取資料的任何 Git 用戶端命令,包括 git fetchgit 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 地址範圍內時,才允許使用者連線至 CodeCommit 儲存庫。這有兩種同樣有效的方法。如果使用者的 IP 地址不在特定區塊內,您可以建立不允許 CodeCommit 操作Deny的政策,或者如果使用者的 IP 地址位於特定區塊內,您可以建立允許 CodeCommit 操作Allow的政策。

您可以建立 Deny 政策,以拒絕所有不在特定 IP 範圍內的使用者存取。例如,您可以將 AWSCodeCommitPowerUser 受管政策和客戶受管政策連接到需要存取儲存庫的所有使用者。下列範例政策拒絕 IP 地址不在 203.0.113.0/16 指定 IP 地址區塊內之使用者的所有 CodeCommit 許可:

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

下列範例政策允許指定使用者存取名為 MyDemoRepo 的 CodeCommit 儲存庫,其具有 AWSCodeCommitPowerUser 受管政策的同等許可,前提是其 IP 地址位於 203.0.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:拒絕或允許分支上的動作

您可以建立政策,對使用者拒絕在一或多個分支執行您指定動作的許可。或者,您可以建立政策,以允許他們原本在儲存庫的其他分支上可能沒有的一或多個分支上執行動作。您可以使用這些政策搭配適當的受管 (預先定義) 政策。如需詳細資訊,請參閱限制 中的分支推送和合併 AWS CodeCommit

例如,您可以建立Deny政策,拒絕使用者在名為 MyDemoRepo 的儲存庫中變更名為 main 的分支,包括刪除該分支。您可以將此政策與 AWSCodeCommitPowerUser 受管政策搭配使用。套用這兩個政策的使用者將能夠建立和刪除分支、建立提取請求,以及 AWSCodeCommitPowerUser 允許的所有其他動作,但無法將變更推送至名為主要的分支、在 CodeCommit 主控台的主要分支中新增或編輯檔案,或將分支或提取請求合併至主要分支。由於 Deny 套用到 GitPush,您必須在政策中包含 Null 陳述式,以便使用者從本機儲存庫推送時,允許分析初始 GitPush 呼叫的有效性。

提示

如果您想要建立套用至 Amazon Web Services 帳戶中所有儲存庫中名稱為主要的所有分支的政策,請為 指定星號 * ()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 帳戶中所有儲存庫中名為主要的分支。它不允許對任何其他分支進行變更。您可以將此政策與 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 群組。例如,您可以建立一個政策,以拒絕任何儲存庫上的所有 CodeCommit 動作,其具有 AWS 標籤索引鍵狀態Secret 的索引鍵值,然後將該政策套用到您為一般開發人員 (開發人員) 建立的 IAM 群組。然後,您需要確保處理這些標記儲存庫的開發人員不是該一般開發人員群組的成員,而是屬於未套用限制性政策的不同 IAM 群組 (SecretDevelopers)。

下列範例會拒絕在標記金鑰狀態和金鑰值為 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),並包含虛構的帳戶 IDs。

範例

範例 1:建立啟用跨帳戶存取 Amazon SNS 主題的政策

您可以設定 CodeCommit 儲存庫,讓程式碼推送或其他事件觸發動作,例如從 Amazon Simple Notification Service (Amazon SNS) 傳送通知。如果您使用用來建立 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 (Amazon SNS) 主題政策,以允許 Amazon CloudWatch Events 將 CodeCommit 事件發佈至主題

您可以設定 CloudWatch Events 在事件發生時發佈至 Amazon SNS 主題,包括 CodeCommit 事件。若要這樣做,您必須透過建立主題的政策或修改主題的現有政策,確保 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:建立與 CodeCommit 觸發程序 AWS Lambda 整合的政策

您可以設定 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 許可。如需範例,請參閱為現有的 Lambda 函數建立觸發允許 CodeCommit 執行 Lambda 函數一節。

如需 Lambda 函數資源政策的詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的 AddPermission 和提取/推送事件模型