Todo en Google Cloud vive dentro de un "Proyecto". No puedes crear nada sin uno.
Ve a la Consola de Google Cloud.
En la barra superior, verás un menú desplegable de proyectos (justo al lado del logo de "Google Cloud").
Si ya tienes un proyecto: Selecciónalo de la lista y continúa al Paso 1.
Si no tienes un proyecto:
Haz clic en el selector de proyectos y elige "Proyecto Nuevo".
Dale un Nombre de Proyecto (ej. "Mi-App-Storage").
Haz clic en "Crear". Espera unos segundos a que el proyecto se aprovisione y asegúrate de que esté seleccionado.
Aquí es donde crearemos la identidad "robot" para tu aplicación.
Abre el Menú de Navegación (el ícono de hamburguesa ☰ en la esquina superior izquierda).
Ve a la sección "IAM y Administración".
En el submenú, haz clic en "Cuentas de Servicio".
(Consejo rápido: También puedes simplemente escribir "Cuentas de Servicio" en la barra de búsqueda principal de la consola y seleccionar el resultado).
Ahora estás en el panel de "Cuentas de Servicio".
Haz clic en el botón "+ CREAR CUENTA DE SERVICIO" que se encuentra en la parte superior.
Paso 1 (Detalles):
Nombre de la cuenta de servicio: Escribe un nombre descriptivo para saber qué hace. (ej. mi-app-lector-gcs).
ID de la cuenta de servicio: Se generará automáticamente basado en el nombre (ej. mi-app-lector-gcs@tu-proyecto-id.iam.gserviceaccount.com). Déjalo como está. Este ID es su "email" único.
Descripción: Añade una descripción clara (ej. "Cuenta de servicio para leer archivos del bucket 'reportes-mensuales'").
Haz clic en "CREAR Y CONTINUAR".
Esta es la parte más importante donde defines qué puede hacer esta identidad y dónde.
Paso 2 (Acceso): Ahora estás en la pantalla "Otorga a esta cuenta de servicio acceso al proyecto".
Haz clic en el campo "Selecciona un rol".
Aparecerá un filtro. Para encontrar roles de Google Cloud Storage (GCS), escribe "Storage" en el filtro.
Verás varios roles. Los más comunes son:
Storage Object Viewer (Visor de objetos de Storage): Solo puede leer y descargar archivos.
Storage Object Creator (Creador de objetos de Storage): Solo puede subir archivos nuevos. (No puede ver, sobrescribir ni borrar).
Storage Object Admin (Administrador de objetos de Storage): Control total sobre los archivos (leer, escribir, borrar, sobrescribir).
Selecciona el rol que necesitas (ej. Storage Object Viewer).
¡IMPORTANTE! Seguridad a Nivel de Bucket (Tu punto 4)
Asignar el rol aquí (a nivel de "Proyecto") le da a la credencial acceso a TODOS los buckets del proyecto. La mejor práctica, como mencionaste, es limitar el acceso a un solo bucket.
La forma más segura (Recomendada):
No añadas ningún rol en esta pantalla. Simplemente haz clic en "CONTINUAR" sin seleccionar un rol.
Haz clic en "LISTO" en el siguiente paso opcional (la consola te dirá que la creaste "sin roles a nivel de proyecto", lo cual está bien).
Ahora, ve al servicio de Cloud Storage desde el menú de navegación.
Haz clic en tu bucket específico (ej. "mi-bucket-privado").
Ve a la pestaña "PERMISOS".
Haz clic en "+ OTORGAR ACCESO".
En el campo "Principales nuevos", pega el ID (el "email" largo) de la cuenta de servicio que acabas de crear (ej. mi-app-lector-gcs@...).
En "Asignar roles", selecciona ahora sí el rol específico (ej. Storage Object Viewer).
Haz clic en "GUARDAR".
Ahora has creado una cuenta de servicio que solo tiene permisos para ese bucket específico, lo cual es mucho más seguro.
Ya tenemos la identidad creada y con permisos. Ahora necesitamos generar la "llave" (la contraseña) para que tu aplicación la use.
Vuelve al panel de "IAM y Administración" > "Cuentas de Servicio".
Haz clic en el nombre (o el email) de la cuenta de servicio que acabas de crear.
Se abrirá la página de detalles de esa cuenta. Haz clic en la pestaña "CLAVES".
Haz clic en el botón "AÑADIR CLAVE".
Selecciona "Crear nueva clave".
En el tipo de clave, asegúrate de que esté seleccionado JSON (es el estándar y el recomendado).
Haz clic en "CREAR".
Inmediatamente, tu navegador descargará un archivo .json.
¡Felicidades! Ese archivo JSON es tu credencial.
Trata este archivo .json descargado como si fuera la contraseña de administrador más importante que tienes.
Es un secreto. Contiene la clave privada para autenticarse como esa cuenta de servicio.
No lo guardes en tu código fuente, no lo subas a GitHub ni lo compartas públicamente.
Tu aplicación deberá cargar este archivo de forma segura para poder autenticarse con Google Cloud.