当我将文件上传到 AWS CodePipeline 时,我收到“Access Denied”错误。
解决方法
由于对 Amazon Simple Storage Service (Amazon S3) 存储桶的权限不足,您可能会收到“Access Denied”或权限错误。如果您未向 AWS Identity and Access Management (IAM) 用户和角色附加正确的权限,也可能会收到错误。
用户权限
确认用于创建和管理 CodePipeline 资源的 AWS 托管式策略权限已附加到 IAM 用户。
CodePipeline 服务角色
确保与 CodePipeline 关联的服务角色拥有与 AWS 服务交互的权限。
编辑服务角色语句,以删除或添加对未使用资源的访问权限。要编辑服务角色语句以限制对特定资源的权限,请在 Resource(资源)值中包含 Amazon 资源名称 (ARN)。将以下示例 CodePipeline 服务角色策略附加到您的资源以授予最低权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3BucketAccess",
"Effect": "Allow",
"Action": [
"s3:GetBucketVersioning",
"s3:GetBucketAcl",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::[[pipeArtifactBucketNames]]"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "{{accountId}}"
}
}
},
{
"Sid": "AllowS3ObjectAccess",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObjectTagging",
"s3:GetObjectTagging",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::[[pipeArtifactBucketNames]]/*"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "{{accountId}}"
}
}
}
]
}
**注意:**请将 pipeArtifactBucketNames 替换为您的 S3 存储桶名称,将 accountId 替换为您的 AWS 账户 ID。
CodePipeline 构件存储桶
确认您已为存储管道构件的 S3 存储桶正确分配了存储桶策略和权限。
有关跨账户访问,请参阅我如何使用跨账户 CodeCommit 存储库配置 CodePipeline 源阶段?中的“更新账户 B 中 CodePipeline 构件存储桶的存储桶策略”部分
AWS KMS 权限
确认用于加密的 AWS Key Management Service (AWS KMS) 密钥具有授予跨账户资源权限的密钥策略。将以下示例策略附加到您的 IAM 角色,以添加允许跨账户角色使用 KMS 密钥的权限
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account_B:role/cross_account_role_name", // allows access to cross account role
"AWS": "arn:aws:iam::account_B:root" // allows access to any role for account_B
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
}
**注意:**请将 account_B:role/cross_account_role_name 替换为您的 ARN。
CodeConnections 权限
对于使用 AWS CodeConnections 的管道,请确保该连接具有访问源存储库的权限。如果列表仅包含部分存储库,则可能是安装在第三方源代码控制管理 (SCM) 系统中的连接器应用程序存在限制。
要解决此问题,请更新您的 SCM 中的应用程序,使其具有存储库访问权限。要验证 SCM 中的存储库访问权限,请查看存储库访问设置。您可以使用 CodeConnections 向管道添加第三方源提供程序。