跳至內容

我該如何解決 CodePipeline 中的「Access Denied」錯誤或權限問題?

2 分的閱讀內容
0

當我將檔案上傳到 AWS CodePipeline 時,我收到「Access Denied」錯誤。

解決方法

您可能會收到「Access Denied」或權限錯誤,原因是對 Amazon Simple Storage Service (Amazon S3) 儲存貯體的權限不足。如果您未將正確的權限附加到您的 AWS Identity and Access Management (IAM) 使用者和角色,也可能會收到錯誤。

使用者權限

請確認已將建立和管理 CodePipeline 資源的 AWS 受管政策權限附加到 IAM 使用者。

CodePipeline 服務角色

請確保與 CodePipeline 關聯的服務角色具有與 AWS 服務互動的權限

編輯服務角色的陳述式以移除或新增對您未使用資源的存取權。若要編輯服務角色陳述式以限制特定資源的權限,請在 Resource (資源) 值中包含 Amazon Resource Name (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 (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 將第三方來源提供者新增到管道

AWS 官方已更新 2 個月前