Quando faço upload dos meus arquivos para o AWS CodePipeline, recebo uma mensagem de erro “Access Denied”.
Resolução
É possível receber uma mensagem de erro “Access Denied” ou de permissão por causa de permissões insuficientes para o bucket do Amazon Simple Storage Service (Amazon S3). Também é possível receber uma mensagem de erro se não tiver anexado as permissões corretas ao seu usuário e perfil do AWS Identity and Access Management (AWS IAM).
Permissões de usuário
Verifique se as permissões da política gerenciada pela AWS para criar e gerenciar recursos do CodePipeline estão vinculadas ao usuário do IAM.
Perfil de serviço do CodePipeline
Certifique-se de que o perfil de serviço associado ao CodePipeline tenha permissões para interagir com os serviços da AWS.
Edite a declaração do perfil de serviço para remover ou adicionar acesso aos recursos que você não usa. Para editar a declaração do perfil de serviço para restringir permissões a um recurso específico, inclua o nome do recurso da Amazon (ARN) no valor do Recurso. Anexe o exemplo a seguir de política de perfil de serviço do CodePipeline ao seu recurso para conceder as permissões mínimas:
{
"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}}"
}
}
}
]
}
Observação: substitua pipeArtifactBucketNames pelo nome do seu bucket do S3 e accountId pelo ID da sua conta da AWS.
Bucket de artefatos do CodePipeline
Confirme se você atribuiu corretamente a política de bucket e as permissões para o bucket do S3 que armazena os artefatos do pipeline.
Para acesso entre contas, consulte a seção Update the bucket policy for the CodePipeline artifact bucket in Account B (Atualize a política de bucket para o bucket de artefatos do CodePipeline na conta B) em How do I configure a CodePipeline source stage with a cross-account CodeCommit repository? (Como configuro um estágio de origem do CodePipeline com um repositório CodeCommit de várias contas?)
Permissões do AWS KMS
Confirme se as chaves do AWS Key Management Service (AWS KMS) usadas para criptografia têm as políticas de chaves que concedem permissão para recursos entre contas. Anexe o exemplo de política a seguir ao seu perfil do IAM para adicionar permissões e permitir o uso da chave KMS para um perfil entre contas
{
"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": "*"
}
Observação: substitua account_B:role/cross_account_role_name pelo seu ARN.
Permissões do CodeConnections
Para pipelines que usam o AWS CodeConnections, certifique-se de que a conexão tenha as permissões para acessar o repositório de origem. Se a lista incluir apenas alguns repositórios, talvez haja uma restrição noa aplicação conector instalado em seu sistema de Gerenciamento de controle de origem (Source Control Management, SCM) terceirizado.
Para solucionar esse problema, atualize o a aplicação em seu SCM com acesso aos repositórios. Para verificar o acesso ao repositório em seu SCM, examine as configurações de acesso ao repositório. É possível usar o CodeConnections para adicionar provedores de origem terceirizados aos pipelines.