客戶受管政策範例 - AWS CodeCommit

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

客戶受管政策範例

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

客戶管理的身分政策範例

下列 IAM 政策範例會針對各種 CodeCommit 動作授予許可。使用它們來限制 CodeCommit IAM 使用者和角色的存取權限。這些政策控制能否使用 CodeCommit 主控台、API、AWS 軟體開發套件或 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,GitPullIAM 政策許可適用於從中擷取資料的任何 Git 用戶端命令 CodeCommit git fetchgit clone,包括、等等。同樣地,GitPushIAM 政策許可適用於資料傳送至的任何 Git 用戶端命令 CodeCommit。例如,如果 GitPush IAM 政策權限設定為Allow,則使用者可以使用 Git 通訊協定推送刪除分支。該推送不受該 IAM 使用者DeleteBranch作業套用的任何許可影響。DeleteBranch 許可適用於以主控台、AWS CLI、軟體開發套件和 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 儲存庫。這有兩種同樣有效的方法。如果使用者的 Deny IP 位址不在特定區塊內,您可以建立不允許 CodeCommit 作業的原則,或者您可以建立Allow策略,以便在使用者的 IP 位址位於特定區塊內時允許 CodeCommit 作業。

您可以建立 Deny 政策,以拒絕所有不在特定 IP 範圍內的使用者存取。例如,您可以將 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 有在指定的 IP 位址位於 203.0.113.0/16 的指定位址區塊內時,才允許指定的使用者 CodeCommit存取以 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:拒絕或允許對分支執行動作

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

例如,您可以建立一個Deny策略,拒絕使用者在名為的存放庫中對名為 main 的分支進行變更,包括刪除該分支。MyDemoRepo您可以使用此政策搭配 AWSCodeCommitPowerUser 受管政策。套用這兩個原則的使用者將能夠建立和刪除分支、建立提取要求,以及所有其他允許的動作 AWSCodeCommitPowerUser,但是他們無法將變更推送到名為 main 的分支、在主 CodeCommit 控台的 main 分支中新增或編輯檔案,或將分支或提取要求合併到分支。由於 Deny 套用到 GitPush,您必須在政策中包含 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 受管理的原則搭配使用,以允許自動推送至主分支中的存放庫。由於 Effect 是 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標籤金鑰 S tatus 和索引鍵值為 Secret 的任何儲存庫上的所有 CodeCommit 動作,然後將該政策套用至您為一般開發人員 (開發人員) 建立的 IAM 群組。然後,您需要確定在這些標記存放庫上工作的開發人員不是該一般開發人員群組的成員,而是屬於未套用限制性政策的其他 IAM 群組 (SecretDevelopers)。

下列範例會拒絕儲存庫上標記為 S tatus 索引鍵和 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 存取

注意

所有範例都會在需要時使用美國西部 (奧勒岡) 區域 (us-west-2),並包含虛擬帳戶 ID。AWS 區域

範例

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

您可以設定 CodeCommit 儲存庫,讓程式碼推送或其他事件觸發動作,例如從 Amazon 簡單通知服務 (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 事件將 CodeCommit 事件發佈到主題

您可以將 CloudWatch 事件設定為在事件發生時 (包括 CodeCommit 事件) 發佈到 Amazon SNS 主題。若要這麼做,您必須確定 E CloudWatch vents 具有將事件發佈到 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 事件的詳細資訊,請參閱來自支援服務的CloudWatch 事件事件範例。如需 IAM 和政策語言的詳細資訊,請參閱 IAM JSON 政策語言的文法。

範例 3:建立與 CodeCommit 觸發器AWS Lambda整合的策略

您可以設定 CodeCommit 存放庫,讓程式碼推送或其他事件觸發動作,例如叫用中的函數。AWS Lambda如需詳細資訊,請參閱為 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 函數之資源政策的詳細資訊,請參閱AddPermissionAWS Lambda開發人員指南中的提取/推送事件模型