Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Introducción a la resolución de errores de tiempo de ejecución en el AWS SDK para C++
A medida que aprenda a desarrollar aplicaciones con el AWS SDK para C++, también es útil que se familiarice con el uso de la Consola de administración de AWS y de la AWS CLI. Estas herramientas se pueden utilizar indistintamente para diversas tareas de diagnóstico y resolución de problemas cuando se producen errores de tiempo de ejecución.
En el siguiente tutorial, se muestra un ejemplo de estas tareas de diagnóstico y solución de problemas. Se centra en el error Access denied, que puede producirse por diversos motivos. El tutorial muestra un ejemplo de cómo se puede determinar la causa real del error. Se centra en dos de las posibles causas: permisos incorrectos del usuario actual y un recurso que no está disponible para el usuario actual.
Para obtener el código fuente y los ejecutables del proyecto
-
Descargue la carpeta de ejemplos de código de Amazon S3 del Repositorio de ejemplos de código de AWS
en GitHub. -
Abra
delete_bucket.cppy observe que hay dos métodos:main()yDeleteBucket().DeleteBucket()usa el SDK para eliminar el bucket. -
Cree el ejemplo de Amazon S3 siguiendo los mismos pasos de compilación que se explican en Introducción al uso del AWS SDK para C++. El proceso de compilación genera un ejecutable para cada archivo de origen.
-
Abra una línea de comandos en la carpeta en la que el sistema de compilación ha generado los ejecutables de la compilación. Ejecute el archivo ejecutable
run_create_bucket(el nombre del archivo ejecutable real variará en función del sistema operativo). Se creará un bucket en su cuenta (para que tenga uno para eliminar). -
En el símbolo del sistema, ejecute el archivo ejecutable
run_delete_bucket. En este ejemplo, el valor previsto es el parámetro del bucket que desea eliminar. Introduzca un nombre de depósito incorrecto; escriba mal de manera intencionada el nombre de este bucket para que podamos analizar la solución de problemas. -
Confirme que recibe el mensaje de error
Access Denied. El mensaje de errorAccess Deniedle preguntará si ha creado un usuario con todos los permisos para Amazon S3, algo que debe verificar a continuación.
Para instalar la AWS CLI y buscar el nombre de usuario que realiza las llamadas a AWS
-
Para instalar la AWS CLI más reciente en el equipo local, consulte Instalación de la AWS CLI en la Guía del usuario de AWS Command Line Interface.
-
Para comprobar que la AWS CLI funciona, abra una línea de comandos y ejecute el comando
aws -\-version.$aws -\-versionaws-cli/2.1.29 Python/3.8.8 Windows/10 exe/AMD64 prompt/off -
Para obtener el nombre de usuario que está realizando las llamadas realmente a AWS, ejecute el comando
aws sts get-caller-identityde la AWS CLI. En el siguiente resultado de ejemplo, ese nombre de usuario es userX.$aws sts get-caller-identity{ "UserId": "A12BCD34E5FGHI6JKLM", "Account": "1234567890987", "Arn": "arn:aws:iam::1234567890987:user/userX" }Hay muchas formas de especificar las credenciales, pero si ha seguido el procedimiento incluido en Autenticación AWS mediante AWS SDK para C++, este nombre de usuario proviene de su archivo de credenciales de AWS compartido. Durante ese procedimiento, concedió a su usuario los permisos de AmazonS3FullAccess.
nota
Por lo general, la mayoría de los comandos de la AWS CLI siguen esta estructura sintáctica:
$aws <command> <subcommand> [options and parameters]donde el
comandoes el servicio y elsubcomandoes el método al que se llama en ese servicio. Para obtener más información, consulte Estructura de comandos en la AWS CLI en la Guía del usuario de la AWS Command Line Interface.
Para comprobar si un usuario tiene permiso para eliminar un bucket
-
Abra la Consola de administración de AWS
e inicie sesión. Para obtener más información, consulte Introducción a la Consola de administración de AWS. -
En la barra de navegación principal, en Buscar servicios..., introduzca
IAMy seleccione el servicio de IAM en los resultados. -
En la barra lateral del panel de control o en Recursos de IAM, seleccione Usuarios.
-
En la tabla de usuarios disponibles para su cuenta, seleccione el nombre de usuario obtenido en el procedimiento anterior.
-
Seleccione la pestaña Permisos en la página de Resumen y en la tabla de Nombre de la política, seleccione AmazonS3FullAccess.
-
Consulte el resumen de la política y los datos de JSON. Compruebe que este usuario tiene acceso completo al servicio Amazon S3.
"Effect": "Allow", "Action": "s3:*", "Resource": "*"
Este proceso de eliminación es habitual para descartar dónde podría estar el problema. En este caso, ha comprobado que el usuario tiene los permisos correctos, por lo que el problema debe ser de otra índole. Es decir, dado que tiene los permisos correctos para acceder a los buckets, el error Access Denied puede significar que está intentando acceder a un bucket que no es suyo. Al solucionar el problema, debe revisar el nombre del bucket que ha proporcionado al programa y comprobar que en su cuenta no exista ningún depósito con ese nombre y que, por lo tanto, le impida "acceder" a él.
Para actualizar el ejemplo de código para que se ejecute correctamente
-
Vuelva a la función
main()dedelete_bucket.cpp, y utilice la enumeración para cambiar la región por la región de su cuenta. Para encontrar la región de su cuenta, inicie sesión en la Consola de administración de AWS y localice la región en la esquina superior derecha. También enmain(), puede cambiar el nombre del bucket por uno que ya exista en su cuenta. Existen varias maneras de encontrar los nombres de los buckets actuales:-
Puede usar el ejecutable
run_list_bucketsque también existe en la carpeta de este ejemplo de código para obtener mediante programación los nombres de sus buckets. -
También puede utilizar el siguiente comando de la AWS CLI para obtener una lista de buckets de Amazon S3.
$aws s3 ls2022-01-05 14:27:48amzn-s3-demo-bucket -
O bien, puede utilizar el alias Consola de administración de AWS
. En la barra de navegación principal, en Buscar servicios..., introduzca S3. En la página Buckets, se muestran los buckets de su cuenta.
-
-
Vuelva a compilar el código y ejecute el archivo ejecutable
run_delete_bucketmodificado. -
Utilice la Consola de administración de AWS o la AWS CLI, para comprobar que el bucket de Amazon S3 que ha creado anteriormente se ha eliminado.