AWS CodePipeline 身分型政策範例 - AWS CodePipeline

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

AWS CodePipeline 身分型政策範例

依預設,IAM 使用者和角色沒有建立或修改 CodePipeline 資源的權限。他們也無法使用 AWS Management Console AWS CLI、或 AWS API 執行工作。IAM 管理員必須建立 IAM 政策,授予使用者和角色在指定資源上執行特定 API 作業的所需許可。管理員接著必須將這些政策連接至需要這些許可的 IAM 使用者或群組。

若要了解如何使用這些範例 JSON 原則文件建立 IAM 身分型原則,請參閱《IAM 使用者指南》中的在 JSON 標籤上建立原則

若要瞭解如何建立使用其他帳戶資源的管道,以及相關範例政策,請參閱在中建立使用其他 AWS 帳戶資源的 CodePipeline 管道

客戶受管政策範例

在本節中,您可以找到授與各種 CodePipeline 動作權限的範例使用者策略。當您使用 CodePipeline API、 AWS SDK 或. AWS CLI當您使用主控台時,您必須對主控台授予特定的其他許可。如需詳細資訊,請參閱 使用 CodePipeline 主控台所需的許可

注意

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

範例

範例 1:授予許可,取得管道的狀態

下列範例會授予許可,取得名為 MyFirstPipeline 的管道狀態:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:GetPipelineState" ], "Resource": "arn:aws:codepipeline:us-west-2:111222333444:MyFirstPipeline" } ] }

範例 2:授予許可,啟用和停用階段間的轉換

下列範例會授予許可,停用和啟用名為 MyFirstPipeline 的管道中所有階段間的轉換:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:DisableStageTransition", "codepipeline:EnableStageTransition" ], "Resource": "arn:aws:codepipeline:us-west-2:111222333444:MyFirstPipeline/*" } ] }

若要允許使用者停用和啟用管道中單一階段的轉換,您必須指定階段。例如,若要允許使用者在名為 MyFirstPipeline 的管道中,對名為 Staging 的階段啟用和停用轉換:

"Resource": "arn:aws:codepipeline:us-west-2:111222333444:MyFirstPipeline/Staging"

範例 3:授予許可,取得所有可用動作類型的清單

下列範例授予許可,以取得 us-west-2 區域中的管道可用的所有動作類型的清單:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:ListActionTypes" ], "Resource": "arn:aws:codepipeline:us-west-2:111222333444:actiontype:*" } ] }

範例 4:授予許可,核准或拒絕手動核准動作

下列範例授予許可,在名為 MyFirstPipeline 的管道中名為 Staging 階段內,核准或拒絕手動核准動作:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PutApprovalResult" ], "Resource": "arn:aws:codepipeline:us-west-2:111222333444:MyFirstPipeline/Staging/*" } ] }

範例 5:授予許可,輪詢自訂動作的任務

下列範例授予許可,以輪詢名為 TestProvider 的自訂動作在所有管道中的任務,而該動作的第一個版本為 Test 動作類型:

注意

自訂動作的工作背景工作者可能會在不同的 AWS 帳戶下設定,或者需要特定的 IAM 角色才能運作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PollForJobs" ], "Resource": [ "arn:aws:codepipeline:us-west-2:111222333444:actionType:Custom/Test/TestProvider/1" ] } ] }

範例 6:附加或編輯 Jenkins 整合的政策 AWS CodePipeline

如果您將管道設定為使用 Jenkins 進行建置或測試,請為該整合建立個別身分,並附加 IAM 政策,該政策具有 Jenkins 和之間整合所需的最低許可。 CodePipeline此政策與 AWSCodePipelineCustomActionAccess 受管政策相同。下面的例子顯示了詹金斯集成的策略:

{ "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:AcknowledgeJob", "codepipeline:GetJobDetails", "codepipeline:PollForJobs", "codepipeline:PutJobFailureResult", "codepipeline:PutJobSuccessResult" ], "Resource": "*" } ], "Version": "2012-10-17" }

範例 7:設定管道的跨帳戶存取

您可以為另一個 AWS 帳戶中的使用者和群組設定管道存取。建議的方法是在建立管道的帳戶中建立角色。該角色應允許來自其他 AWS 帳戶的使用者擔任該角色並存取管道。如需詳細資訊,請參閱演練:使用角色進行跨帳戶存取

下列範例顯示 80398EXAMPLE 帳戶中的政策,該帳戶允許使用者檢視 (但不能變更) 在主控台MyFirstPipeline中命名的管道。 CodePipeline 此政策以 AWSCodePipeline_ReadOnlyAccess 受管政策為基礎,但因為是 MyFirstPipeline 管道所特有,因此無法直接使用受管政策。如果您不想將原則限制在特定管線,請考慮使用其中一個由建立和維護的受管理原則 CodePipeline。如需詳細資訊,請參閱處理受管政策的相關文章。您必須將此政策附加到為存取而建立的 IAM 角色,例如名為CrossAccountPipelineViewers

{ "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:GetPipeline", "codepipeline:GetPipelineState", "codepipeline:ListActionTypes", "codepipeline:ListPipelines", "iam:ListRoles", "s3:GetBucketPolicy", "s3:GetObject", "s3:ListAllMyBuckets", "s3:ListBucket", "codedeploy:GetApplication", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "elasticbeanstalk:DescribeApplications", "elasticbeanstalk:DescribeEnvironments", "lambda:GetFunctionConfiguration", "lambda:ListFunctions" ], "Resource": "arn:aws:codepipeline:us-east-2:80398EXAMPLE:MyFirstPipeline" } ], "Version": "2012-10-17" }

建立此政策後,請在 80398EXAMPLE 帳戶中建立 IAM 角色,並將該政策附加到該角色。在角色的信任關係中,您必須新增擔任此角色的 AWS 帳戶。下列範例顯示的策略可讓 111111111111 AWS 帳戶的使用者擔任 80398範例帳戶中定義的角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": "sts:AssumeRole" } ] }

下列範例顯示在 111111111111 AWS 帳戶中建立的策略,可讓使用者擔任 80398範例帳戶中指CrossAccountPipelineViewers定的角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::80398EXAMPLE:role/CrossAccountPipelineViewers" } ] }

範例 8:在管道中使用與另一個帳戶建立關聯的 AWS 資源

您可以設定允許使用者建立使用其他 AWS 帳戶資源的管道的策略。在建立管道的帳戶 (AccountA) 和建立資源以用於管道中的帳戶 (AccountB) 中,都需要設定政策和角色。您還必須建立客戶管理的金鑰, AWS Key Management Service 才能用於跨帳戶存取。如需詳細資訊和 step-by-step 範例,請參閱在中建立使用其他 AWS 帳戶資源的 CodePipeline 管道為 Amazon S3 中存放的成品設定伺服器端加密 CodePipeline

下列範例針對用於存放管道成品的 S3 儲存貯體,顯示 AccountA 所設定的政策。此政策將存取權授予 AccountB。在下列範例中,AccountB 的 ARN 為 012ID_ACCOUNT_B。S3 儲存貯體的 ARN 為 codepipeline-us-east-2-1234567890。以您要允許存取的 S3 儲存貯體和帳戶的 ARN,取代這些 ARN:

{ "Version": "2012-10-17", "Id": "SSEAndSSLPolicy", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*", "Condition": { "Bool": { "aws:SecureTransport": false } } }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root" }, "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890" } ] }

下列範例顯示由 AccountA 設定的政策,允許 AccountB 取得角色。此原則必須套用至 CodePipeline (CodePipeline_Service_Role) 的服務角色。如需如何在 IAM 中將政策套用至角色的詳細資訊,請參閱修改角色。在下列範例中,012ID_ACCOUNT_B 是 AccountB 的 ARN:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::012ID_ACCOUNT_B:role/*" ] } }

下列範例顯示 AccountB 設定並套用至的 EC2 執行個體角色的 CodeDeploy政策。此政策授予對 AccountA 用來存放管道成品 (codepipeline-us-east-2- 1234567890) 的 S3 儲存貯體的存取權:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890" ] } ] }

下列範例顯示在 Account TA 中建立並設定為 AWS KMS 允許 AccountB 使用之客戶管理金鑰的 ARN 的原則:arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE" ] } ] }

下列範例顯示 AccountB 建立的 IAM 角色 (CrossAccount_Role) 的內嵌政策,該角色允許存取 AccountA 中管道所需的 CodeDeploy 動作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision" ], "Resource": "*" } ] }

下列範例顯示 AccountB 建立的 IAM 角色 (CrossAccount_Role) 的內嵌政策,該角色允許存取 S3 儲存貯體以下載輸入成品和上傳輸出成品:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" ] } ] }

如需如何編輯管道以跨帳戶存取資源的詳細資訊,請參閱步驟 2:編輯管道