Ingesta desde el Bucket S3

Descripción general

La ingestión de archivos desde un bucket S3 es una forma más de ingerir archivos desde diferentes fuentes (AWS S3).

Desde la perspectiva del procesamiento del contenido del archivo, esto será lo mismo que para la ingestión basada en archivos locales, pero la fuente del archivo es diferente.

El procesamiento de archivos es triggered a través de un Kafka notificación y los siguientes dos puntos de integración clave para el procesamiento:

  • Archivo disponible - Cuando el archivo esté disponible para su procesamiento, entonces el sistema bancario que carga el archivo DEBE enviar un Kafka notificación de alcanzabilidad. Esto es procesado por el conector de ingesta de archivos, notificando que un archivo está disponible para su procesamiento en un bucket S3.

  • Archivo procesado - Cuando el archivo ha terminado de ser procesado, se envía un mensaje de Notificación de Archivo Procesado al tema de Archivo Procesado (si enviar Confirmación solicitada), notificando al sistema bancario que el archivo ha terminado de procesarse (con una clara indicación del estado)

Se admiten los siguientes tipos diferentes de archivos:XML, TXT, JSON.

Formato de notificación y mapping errores a OutcomeDescription

Actualmente, hay 2 tipos de notifications:

  • Mensaje de notificación de archivo disponible - Notificando al ingestor de archivos de accesibilidad que un archivo está disponible para su procesamiento.

  • Mensaje de notificación de archivo procesado - Notificando al sistema bancario que el procesamiento de archivos ha finalizado (con una clara indicación del estado)

Formato de notifications es lo siguiente:

Formato de notificación para el mensaje de Notificación de Archivo Disponible

{
 "$schema": " http://json-schema.org/draft-07/schema#",
 "type": "objeto",
 "propiedades": {
 "requestId": {
 "type": "cadena",
 "description": "Un identificador único de la solicitud de notificación"
 },
 "fileProvider": {
 "type": "cadena",
 "description": "Indica qué Adaptador de Operaciones de Archivo utilizar, por ejemplo, S3, EFC"
 },
 "filePath": {
 "type": "cadena",
 "description": "La ruta absoluta del archivo, para S3 debe ser la URL de S3, consulte https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html#API_GetObject_RequestSyntax"
 },
 "fileName": {
 "type": "cadena",
 "description": "El nombre del archivo debe comenzar siempre con el tipo de archivo, por ejemplo, BANKDIRECTORYPLUS_V3_FULL_foo_bar." xml "
 },
 "uploadedAt": {
 "type": "cadena",
 "formato": "fecha-hora",
 "description": "Una marca de tiempo que indica cuándo se ha subido el archivo"
 },
 "enviarAcuse": {
 "type": "boolean",
 "description": "Si se necesita enviar un acuse de recibo del procesamiento de archivos"
 }
 },
 "requerido": [
 "requestId",
 "proveedorDeArchivos",
 "rutaDelArchivo",
 "nombreDeArchivo",
 "subidoEn",
 "enviarAcuseDeRecibo"
 ]
}

Formato de notificación para el mensaje de Notificación de Archivo Procesado

{
 "$schema": " http://json-schema.org/draft-07/schema#",
 "type": "objeto",
 "propiedades": {
 "requestId": {
 "type": "cadena",
 "description": "Un identificador único de la solicitud de notificación que se está reconociendo"
 },
 "fileProvider": {
 "type": "cadena",
 "description": "Copiado del input"
 },
 "filePath": {
 "type": "cadena",
 "description": "Copiado del input"
 },
 "fileName": {
 "type": "cadena",
 "description": "Copiado del input"
 },
 "processingFinishedAt": {
 "type": "cadena",
 "formato": "fecha-hora",
 "description": "Una marca de tiempo que indica cuándo se ha terminado de procesar el archivo"
 },
 "código Resultado": {
 "type": "cadena",
 "description": "Un código que describe el resultado, lista por determinar"
 },
 "outcomeDescription": {
 "type": "cadena",
 "description": "Una descripción textual del código"
 }
 },
 "requerido": [
 "requestId",
 "proveedorDeArchivos",
 "rutaDelArchivo",
 "nombreDelArchivo",
 "procesamientoFinalizadoEn",
 "código Resultado",
 "descripción Del Resultado"
 ]
}

Cuando outcomeCode is SUCCESS la descripción del resultado es Success y cuando outcomeCode is FAILED entonces outcomeDescription es un mensaje de excepción que explica el error que ocurrió.

Reconocimiento

Cuando se recibe el mensaje de Notificación de Archivo Disponible, dentro del mensaje hay un booleano sendAcknowledgement El mensaje de Notificación de Archivo Procesado se enviará o no se enviará en función de ese valor una vez que se haya completado el procesamiento del archivo.

Configuraciones de Credenciales del Cliente S3

Resumen de Credenciales

Al interactuar con AWS, se deben especificar las credenciales de seguridad de AWS para verificar la identidad y los permisos para acceder a los recursos solicitados. AWS utiliza estas credenciales de seguridad para autenticar y autorizar las solicitudes.

Por ejemplo, para descargar un archivo protegido de un bucket de Amazon Simple Storage Service (Amazon S3), las credenciales deben permitir ese acceso. Si las credenciales no autorizan la descarga, AWS deniega la solicitud.

Existen diferentes tipos de usuarios en AWS, y todos los usuarios de AWS tienen credenciales de seguridad. Estos usuarios incluyen al propietario de la cuenta (usuario raíz), usuarios en el Centro de Identidad de AWS IAM, usuarios federados y usuarios de IAM.

Los usuarios tienen credenciales de seguridad a largo plazo o temporales. Los usuarios raíz, los usuarios de IAM y las claves de acceso tienen credenciales de seguridad a largo plazo que no caducan. Para proteger las credenciales a largo plazo, deben implementarse procesos para gestionar las claves de acceso, cambiar contraseñas y habilitar la MFA.

Las claves de acceso de AWS se proporcionan para realizar llamadas programáticas a AWS o para utilizar la Interfaz de Línea de Comandos de AWS o las Herramientas de AWS para PowerShell. Se recomienda utilizar claves de acceso a corto plazo siempre que sea posible.

El cliente S3 admite tres modos de gestión de acceso:

1. Credenciales Estáticas (Modo Predeterminado)

Cuando se crea una clave de acceso a largo plazo, se genera un ID de clave de acceso (por ejemplo, AKIAIOSFODNN7EXAMPLE) y una clave de acceso secreta (por ejemplo, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) como un conjunto. La clave de acceso secreta está disponible para su descarga únicamente en el momento de la creación. Si la clave de acceso secreta no se descarga o se pierde, se debe crear una nueva.

Configuración:

# Explicit configuration (optional, default is "static")
ipf.file-manager.s3.credentials-provider = static

# Required credentials
ipf.file-manager.s3.credentials.access-key-id = <your-access-key>
ipf.file-manager.s3.credentials.secret-access-key = <your-secret-key>

Características: * Utiliza credenciales de acceso a largo plazo. * Las credenciales se almacenan en la configuración. * Fácil de configurar pero menos seguro para entornos de producción. * Apropiado para el desarrollo y las pruebas

2. Autenticación de Token de Identidad Web STS

En muchos escenarios, no se necesitan claves de acceso a largo plazo que nunca expiren. En su lugar, se pueden crear roles de IAM y credenciales de seguridad temporales. Las credenciales de seguridad temporales incluyen un ID de clave de acceso y una clave de acceso secreta, así como un token de seguridad que indica cuándo expiran las credenciales. Después de la expiración, las credenciales ya no son válidas.

Configuración:

ipf.file-manager.s3.credentials-provider = sts-web-identity

Configuración: Para obtener orientación detallada sobre la configuración de la autenticación de token de identidad web de AWS STS, consulte la documentación oficial de AWS:

Configuración de Credenciales (Elija un Método):

Dependiendo de su entorno, puede configurar la Autenticación de Token de Identidad Web de varias maneras. Un método común es a través de variables de entorno:

Opción A: Variables de Entorno (comúnmente utilizadas en Kubernetes, EKS, CI/CD) Establezca lo siguiente:

AWS_ROLE_ARN– El rol IAM a asumir

AWS_WEB_IDENTITY_TOKEN_FILE– Ruta al archivo del token de identidad web

AWS_REGION– Región de AWS para operaciones (consulte docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)

Opción B: Archivos de configuración de AWS CLI/SDK Puede configurar la asunción de roles a través de los archivos de configuración y credenciales de AWS. (Consulte docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)

Opción C: Roles IAM de EKS para Cuentas de Servicio (IRSA) Al utilizar EKS con IRSA, las credenciales se proporcionan automáticamente a sus pods; no se requieren variables de entorno ni archivos. (Consulte docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)

Características:

  • Utiliza roles de IAM en lugar de credenciales estáticas.

  • Las credenciales son temporales y se rotan automáticamente.

  • No hay claves de acceso almacenadas en el servicio.

  • Recomendado para entornos de producción

3. Cadena de Proveedores de Credenciales Predeterminadas

  • Este modo utiliza la cadena de proveedores de credenciales predeterminada del SDK de AWS, que busca automáticamente credenciales en múltiples ubicaciones, tales como:

    • Variables de entorno (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, etc.)

    • Propiedades del sistema Java

    • Perfiles de credenciales predeterminados (~/.aws/credentials)

    • Roles de IAM adjuntos a instancias de EC2 o tareas de ECS

Configuración

Si ipf.file-manager.s3.credentials-provider no se especifica que se utilizará esta Cadena de Proveedores de Credenciales Predeterminada.

Características:

  • Descubre automáticamente credenciales de múltiples fuentes.

  • Simplifica la gestión de credenciales en entornos diversos.

Configuración Común

Independientemente del modo de autenticación, estas propiedades son siempre aplicables:

ipf.file-manager.s3.enabled = true
ipf.file-manager.s3.endpoint-url = https://s3.eu-west-1.amazonaws.com
ipf.file-manager.s3.path-style-requests = false

Roles

El único rol de AWS requerido es s3: GetObject porque solo es necesaria la recuperación de archivos de un bucket S3 (más información docs.aws.amazon.com/AmazonS3/latest/userguide/security_iam_service-with-iam.html).

Uso de archivos versionados

Si el mismo archivo existe con diferentes versiones, el archivo con la versión más reciente se selecciona por defecto. Para seleccionar una versión específica, el parámetro de consulta versionId debe ser incluido en la solicitud. Ejemplo del mensaje de entrada con la versión específica del archivo:

Clave Valor

requestId

bicdir2018-req001

fileProvider

s3

filePath

s3://test-bucket.s3.amazonaws.com/BICDIR2018_V1_FULL.txt?versionId=HKPn Haf HX2uf Q-_fa JX-dw

fileName

BICDIR2018_V1_FULL.txt

enviarAcuseRecibo

verdadero

Configuración Adicional

Para una configuración detallada instructions y las directrices de configuración, por favor consulte Configuración de Ingesta de Archivos en el Bucket S3.