Salta al contenuto

Come posso risolvere gli errori Access Denied o i problemi di autorizzazione in CodePipeline?

3 minuti di lettura
0

Quando carico i miei file su AWS CodePipeline, ricevo un messaggio di errore "Access Denied".

Risoluzione

Potresti ricevere un messaggio "Access Denied" o un errore di autorizzazione a causa di autorizzazioni insufficienti per il bucket Amazon Simple Storage Service (Amazon S3). Potresti inoltre ricevere un errore se non hai associato le autorizzazioni corrette all'utente e al ruolo AWS Identity and Access Management (AWS IAM).

Autorizzazioni per l'utente

Verifica che le autorizzazioni delle policy gestite da AWS per creare e gestire le risorse di CodePipeline siano associate all'utente IAM.

Ruolo di servizio CodePipeline

Assicurati che il ruolo di servizio associato a CodePipeline abbia le autorizzazioni per interagire con i servizi AWS.

Modifica l'istruzione del ruolo di servizio per rimuovere o aggiungere l'accesso alle risorse che non usi. Per limitare le autorizzazioni a una particolare risorsa modificando l'istruzione del ruolo di servizio, includi il nome della risorsa Amazon (ARN) nel valore Risorsa. Collega il seguente esempio di policy del ruolo di servizio CodePipeline alla risorsa per concedere le autorizzazioni minime:

{
  "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}}"
        }
      }
    }
  ]
}

Nota: sostituisci pipeArtifactBucketNames con il nome del tuo bucket S3 e accountId con l'ID del tuo account AWS.

Bucket di artefatti CodePipeline

Verifica di aver assegnato correttamente la policy di bucket e le autorizzazioni per il bucket S3 che memorizza gli artefatti della pipeline.

Per l'accesso multi-account, consulta la sezione Update the bucket policy for the CodePipeline artifact bucket in Account B (Aggiorna la policy di bucket per il bucket degli artefatti CodePipeline nell'Account B) in How do I configure a CodePipeline source stage with a cross-account CodeCommit repository? (Come posso configurare una fase dell'origine di CodePipeline con un repository CodeCommit multi-account?)

Autorizzazioni AWS KMS

Verifica che le chiavi del Servizio AWS di gestione delle chiavi (AWS KMS) utilizzate per la crittografia abbiano le policy della chiave che concedono l'autorizzazione per le risorse multi-account.Collega il seguente esempio di policy al ruolo IAM per aggiungere autorizzazioni e consentire l'uso della chiave KMS per un ruolo multi-account

{
    "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": "*"
}

Nota: sostituisci account_B:role/cross_account_role_name con il tuo ARN.

Autorizzazioni per CodeConnections

Per le pipeline che utilizzano AWS CodeConnections, assicurati che la connessione abbia le autorizzazioni per accedere al repository di origine. Se l'elenco include solo alcuni repository, potrebbe esserci una restrizione nell'applicazione del connettore installata nel sistema SCM (Source Control Management) di terze parti.

Per risolvere il problema, aggiorna l'applicazione nel sistema SCM con accesso ai repository. Per verificare l'accesso al repository nel sistema SCM, rivedi le impostazioni di accesso al repository. Puoi utilizzare CodeConnections per aggiungere provider di origine terzi alle pipeline.

AWS UFFICIALEAggiornata 2 mesi fa