Saltar al contenido

¿Por qué aparece el error «S3 error: Access Denied» en CloudFormation?

5 minutos de lectura
0

Quiero resolver el error «Access Denied» de Amazon Simple Storage Service (Amazon S3) que aparece al crear o actualizar pilas en AWS CloudFormation.

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Solución de problemas relacionados con el rol o la política de usuario de IAM

Asegúrate de que el usuario o rol de AWS Identity and Access Management (IAM) que utilizaste con CreateChangeSet o CreateStack tenga los permisos necesarios. Es posible que tengas que adjuntar una política que conceda el permiso GetObject a la identidad de IAM. El siguiente ejemplo de política incluye el permiso GetObject:

{   "Version":"2012-10-17",
     "Statement":[
        {
           "Effect":"Allow",
           "Action":[
              "s3:GetObject",
              "s3:GetObjectVersion"
           ],
           "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
     ]
  }

Nota: Sustituye amzn-s3-demo-bucket por el nombre de tu bucket.

Comprobación de que el archivo de plantilla existe y no contiene errores tipográficos

Para comprobar si el archivo de plantilla existe y no contiene errores tipográficos, ejecuta el comando list-objects de la AWS CLI:

aws s3 list-objects --bucket amzn-s3-demo-bucket --prefix file-path/template-file.json

Nota: Sustituye amzn-s3-demo-bucket por tu bucket y file-path/template-file.json por la ruta del archivo y tu archivo de plantilla. Asegúrate de que la URL de la plantilla no contenga espacios adicionales. Los errores tipográficos pueden provocar el error «S3 Access Denied».

Comprobación de que el archivo de plantilla no esté vacío

Si el archivo de plantilla existe pero está vacío, es posible que aparezca el error «S3 Access Denied». Para comprobar si el archivo de plantilla está vacío, ejecuta el comando get-object de la AWS CLI:

aws s3api get-object --bucket amzn-s3-demo-bucket --key key-name template-file.txt

Nota: Sustituye amzn-s3-demo-bucket por tu bucket, key-name por el nombre de tu clave y template-file.txt por tu archivo de plantilla.

A continuación, abre el archivo de plantilla.

Consulta de la política de bucket de S3 para ver las instrucciones de denegación explícitas

Para comprobar si el bucket de S3 tiene una instrucción de denegación explícita para el rol de IAM, sigue estos pasos:

  1. Abre la consola de Amazon S3.
  2. En el panel de navegación, selecciona Buckets.
  3. En la lista desplegable Buckets, selecciona el bucket que contiene el archivo de plantilla.
  4. Seleccione la pestaña Permisos.
  5. En Política de bucket, elige Editar.
  6. Busca instrucciones que incluyan «Efecto»: «Denegar».
  7. Actualiza las instrucciones «Efecto»: «Denegar» que deniegan el acceso del rol de IAM a s3:GetObject o s3:GetObjectVersion.
  8. Elimina el rol de IAM que usas con CloudFormation.
  9. Selecciona Guardar cambios.
  10. Vuelve a crear o actualizar la pila.

Para obtener más información, consulta Ejemplos de políticas de bucket de Amazon S3.

Validación de la configuración de cifrado en el bucket de S3 y activación del acceso a KMS para el rol de IAM

Es posible que aparezca el error «S3 Access Denied» cuando el bucket utiliza una clave de AWS Key Management Service (KMS) administrada por el cliente para activar el cifrado. Si has cifrado tu bucket, actualiza la política de claves para permitir que la identidad de IAM acceda a la clave de KMS.

Sigue estos pasos:

  1. Abre la consola de AWS KMS.
  2. En el panel de navegación, selecciona Claves administradas por el cliente.
  3. En la lista de claves de KMS, selecciona el alias o el ID de clave de la clave que cifra los objetos de s3 y, a continuación, elige la pestaña Política de claves.
  4. Utiliza la siguiente instrucción para actualizar la política:
{    "Action": [
      "kms:Decrypt",
      "kms:GenerateDataKey"
    ],
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::111122223333:user/IDENTITY"
    },
    "Resource": "arn:aws:kms:aa-example-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
}

Nota: Sustituye arn:aws:iam::111122223333:user/IDENTITY por tu nombre de recurso de Amazon (ARN) de usuario de IAM y arn:aws:kms:aa-example-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd por tu ARN de KMS. Si la identidad de IAM está en otra cuenta de AWS, consulta Mi bucket de Amazon S3 tiene un cifrado predeterminado mediante una clave de AWS KMS personalizada. ¿Cómo puedo permitir que los usuarios realicen operaciones de carga y descarga en el bucket?

Comprobación de los permisos de ACL del objeto para el archivo de plantilla

Cuando una cuenta de destino carga un archivo de plantilla que pertenece a la cuenta de origen, el usuario de la cuenta de destino no puede acceder a la plantilla de la cuenta de origen. Para resolver este problema, copia el archivo de plantilla en el bucket de S3 para que el propietario del bucket tenga acceso completo a la plantilla.

Para dar acceso al bucket, ejecuta el siguiente comando put-object de la AWS CLI:

aws s3api put-object --bucket amzn-s3-demo-bucket --key key-name --body path-to-file --acl bucket-owner-full-control

Nota: Sustituye amzn-s3-demo-bucket por tu bucket, key-name por el nombre de tu clave y path-to-file por la ruta a tu archivo.

Para obtener más información sobre las listas de control de acceso (ACL), consulta Control de la propiedad de los objetos y desactivación de las ACL del bucket.

OFICIAL DE AWSActualizada hace 3 meses