Cuando cargo mis archivos a AWS CodePipeline, recibo el error «Access Denied».
Resolución
Es posible que recibas un mensaje de «Access Denied» o un error de permiso debido a que los permisos para el bucket de Amazon Simple Storage Service (Amazon S3) son insuficientes. También es posible que recibas un error si no has adjuntado los permisos correctos a tu usuario y rol de AWS Identity and Access Management (IAM).
Permisos de usuario
Comprueba que los permisos de las políticas administradas por AWS para crear y administrar los recursos de CodePipeline estén asociados al usuario de IAM.
Rol de servicio de CodePipeline
Asegúrate de que el rol de servicio asociado a CodePipeline tenga permisos para interactuar con los servicios de AWS.
Edita la instrucción del rol de servicio para eliminar o agregar acceso a los recursos que no usas. Para editar la instrucción del rol de servicio para restringir los permisos a un recurso en particular, incluye el nombre de recurso de Amazon (ARN) en el valor del recurso. Adjunta el siguiente ejemplo de política de roles de servicio de CodePipeline a tu recurso para conceder los permisos mínimos:
{
"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: Sustituye pipeArtifactBucketNames por el nombre de tu bucket de S3 bucket y accountId por el ID de tu cuenta de AWS.
Bucket de artefactos de CodePipeline
Confirma que has asignado correctamente la política de bucket y los permisos para el bucket de S3 que almacena los artefactos de canalización.
Para el acceso entre cuentas, consulta la sección Update the bucket policy for the CodePipeline artifact bucket in Account B (Actualización de la política de bucket para el bucket de artefactos de CodePipeline en la cuenta B) de How do I configure a CodePipeline source stage with a cross-account CodeCommit repository? ¿Cómo configuro una etapa de origen de CodePipeline con un repositorio de CodeCommit entre cuentas?
Permisos de AWS KMS
Confirma que las claves de AWS Key Management Service (AWS KMS) utilizadas para el cifrado tengan las políticas de claves que conceden permisos para los recursos entre cuentas. Adjunta el siguiente ejemplo de política a tu rol de IAM para agregar permisos que permitan el uso de la clave de KMS para un rol entre cuentas.
{
"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: Sustituye account_B:role/cross_account_role_name por tu ARN.
Permisos de CodeConnections
En el caso de las canalizaciones que utilizan AWS CodeConnections, asegúrate de que la conexión tenga los permisos para acceder al repositorio de origen. Si la lista solo incluye algunos repositorios, es posible que haya una restricción en la aplicación del conector instalada en tu sistema de administración de control de origen (SCM) de terceros.
Para resolver este problema, actualiza la aplicación en tu SCM con acceso a los repositorios. Para verificar el acceso al repositorio en tu SCM, revisa la configuración de acceso al repositorio. Puedes usar CodeConnections para agregar proveedores de origen de terceros a las canalizaciones.