本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS CodePipeline 身分型政策範例
根據預設,IAM使用者和角色沒有建立或修改 CodePipeline 資源的許可。他們也無法使用 AWS Management Console AWS CLI、 或 執行任務 AWS API。IAM 管理員必須建立IAM政策,以授予使用者和角色對所需指定資源執行特定API操作的許可。然後,管理員必須將這些政策連接到需要這些許可IAM的使用者或群組。
若要了解如何使用這些範例政策文件建立IAM身分型JSON政策,請參閱 IAM 使用者指南 中的在 JSON 索引標籤上建立政策。
若要了解如何建立使用其他帳戶資源的管道,以及相關範例政策,請參閱 在 中建立管道 CodePipeline ,該管道使用來自另一個 AWS 帳戶的資源。
主題
客戶受管政策範例
在本節中,您可以找到授予各種 CodePipeline 動作許可的使用者政策範例。當您使用 CodePipeline API、 或 時 AWS SDKs,這些政策會運作 AWS CLI。當您使用主控台時,您必須對主控台授予特定的其他許可。如需詳細資訊,請參閱使用 CodePipeline 主控台所需的許可。
注意
所有範例都使用美國西部 (奧勒岡) 區域 (us-west-2
),並包含虛構帳戶 IDs。
範例
範例 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 建置或測試,請為該整合建立個別的身分,並連接具有 Jenkins 與 整合所需最低許可IAM的政策 CodePipeline。此政策與 AWSCodePipelineCustomActionAccess
受管政策相同。下列範例顯示 Jenkins 整合的政策:
{ "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:AcknowledgeJob", "codepipeline:GetJobDetails", "codepipeline:PollForJobs", "codepipeline:PutJobFailureResult", "codepipeline:PutJobSuccessResult" ], "Resource": "*" } ], "Version": "2012-10-17" }
範例 7:設定管道的跨帳戶存取
您可以為另一個 AWS 帳戶中的使用者和群組設定管道存取。建議的方法是在建立管道的帳戶中建立角色。此角色應允許其他 AWS 帳戶的使用者擔任該角色並存取管道。如需詳細資訊,請參閱演練:使用角色進行跨帳戶存取。
下列範例顯示 80398EXAMPLE 帳戶中的政策,允許使用者檢視 CodePipeline 主控台MyFirstPipeline
中名為 的管道,但不能變更。此政策以 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 帳戶擔任 80398EXAMPLE 帳戶中定義的角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
111111111111
:root" }, "Action": "sts:AssumeRole" } ] }
下列範例顯示在 中建立的政策 111111111111
AWS 帳戶,允許使用者擔任 80398 CrossAccountPipelineViewers
EXAMPLE 帳戶中名為 的角色:
{ "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範例,請參閱 在 中建立管道 CodePipeline ,該管道使用來自另一個 AWS 帳戶的資源和 針對存放在 Amazon S3 中的成品設定伺服器端加密 CodePipeline。
下列範例針對用於存放管道成品的 S3 儲存貯體,顯示 AccountA 所設定的政策。此政策將存取權授予 AccountB。在下列範例中,適用於 AccountB ARN的 是 012ID_ACCOUNT_B
。S3 儲存貯體ARN的 為 codepipeline-us-east-2-1234567890
。ARNs 將這些項目取代ARNs為 S3 儲存貯體的 ,以及您想要允許存取的帳戶:
{ "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的 : AccountB
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::
012ID_ACCOUNT_B
:role/*" ] } }
下列範例顯示由 AccountB 設定並套用至 EC2執行個體角色的政策 CodeDeploy。此政策授予 AccountA 用來存放管道成品 S3(codepipeline-us-east-2-1234567890
):
{ "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
" ] } ] }
下列範例顯示 的政策, AWS KMS 其中
是在 AccountA 中建立並設定為允許 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:編輯管道 。