> ## Documentation Index
> Fetch the complete documentation index at: https://docs.casebender.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Almacenamiento OpenShift ODF y Ceph RGW

> Conecte CaseBender a almacenamiento OBC o Ceph RGW independiente gestionado por el cliente

Este perfil conecta CaseBender a OpenShift Data Foundation (ODF) o Ceph RGW
existente gestionado por el cliente. CaseBender es un cliente S3; no instala,
actualiza, respalda, supervisa ni administra ODF, Ceph, RGW, usuarios ni
buckets.

<Warning>
  La certificación en vivo actual está pendiente de credenciales del cliente y de
  evidencia de versión exacta. El overlay está configurado y listo para
  cualificación, no certificado.
</Warning>

## Diseño del almacenamiento

Aprovisione tres buckets externos independientes:

| Perfil de propósito | Comportamiento requerido                                                                |
| ------------------- | --------------------------------------------------------------------------------------- |
| `quarantine`        | Cargas iniciales del usuario; ruta de promoción solo por el escáner; sin acceso público |
| `records`           | Adjuntos/evidencia/exportaciones durables; versionado y controles WORM requeridos       |
| `ephemeral`         | Canarios profundos y exportaciones de vida corta; política de ciclo de vida acotada     |

Los tres deben existir antes del arranque. El adaptador en tiempo de ejecución
nunca crea un bucket. El overlay usa HTTPS, direccionamiento S3 path-style,
confianza de CA privada verificada, solicitudes de cifrado del lado del servidor
AES-256 e integridad SHA-256 de la aplicación.

## Opción A: OBC externos gestionados

Identifique el StorageClass de bucket RGW aprobado por el cliente:

```bash theme={null}
oc get storageclass \
  -o custom-columns=NAME:.metadata.name,PROVISIONER:.provisioner
oc api-resources | rg -i objectbucketclaim
```

Copie
`k8s/overlays/openshift-odf-rgw/object-bucket-claims.example.yaml`
al repositorio del entorno del cliente, reemplace el marcador de StorageClass
y aplíquelo por separado de CaseBender. El ciclo de vida del bucket sigue
siendo propiedad del operador de almacenamiento.

```bash theme={null}
oc apply -f '<customer-obc-manifest.yaml>'
oc -n casebender wait --for=jsonpath='{.status.phase}'=Bound \
  objectbucketclaim/casebender-quarantine \
  objectbucketclaim/casebender-records \
  objectbucketclaim/casebender-ephemeral \
  --timeout=10m
```

Confirme, sin imprimir valores, que cada ConfigMap generado proporciona
`BUCKET_HOST`, `BUCKET_PORT`, `BUCKET_NAME` y `BUCKET_REGION`, y que cada
Secret proporciona `AWS_ACCESS_KEY_ID` y `AWS_SECRET_ACCESS_KEY`. Si el
operador OBC usa otras claves, parchee `valueFrom`; nunca copie credenciales
a un ConfigMap o archivo Kustomize.

## Opción B: RGW externo independiente

Use
`k8s/overlays/openshift-odf-rgw/standalone-rgw-resources.example.yaml`
como ejemplo de mapeo. Reemplace cada endpoint `.invalid` y cada marcador de
bucket en el overlay del cliente. Use el controlador de secretos externos
instalado u otro inyector de secretos aprobado. Mantenga los endpoints y los
nombres de bucket en ConfigMaps, las credenciales en Secrets y todos los
valores reales fuera de este repositorio.

El init container restringido lee estos recursos y escribe un
`STORAGE_CONFIG_FILE` estricto en un `emptyDir` respaldado en memoria con
modo `0400`. Web y worker lo montan en solo lectura.

## CA privada

Cree un ConfigMap de CA que contenga solo la cadena emisora:

```bash theme={null}
oc -n casebender create configmap casebender-rgw-ca \
  --from-file=ca.crt='<customer-rgw-ca-chain.pem>' \
  --dry-run=client -o yaml | oc apply -f -
```

El certificado debe cubrir el hostname exacto de RGW. La verificación TLS
permanece habilitada. Nunca use una dirección IP no listada, un endpoint HTTP,
`--insecure` ni una opción que omita el certificado.

## Egreso

La política incluida permite que web y worker alcancen TCP 443 en pods
etiquetados `app=rook-ceph-rgw` en `openshift-storage`. Verifique el
namespace real, las etiquetas, el puerto y el comportamiento del CNI.

Para RGW externo, copie y adapte
`external-rgw-network-policy.example.yaml` con CIDR estables aprobados, o
enrute a través de un proxy de egreso controlado por el operador.
NetworkPolicy de Kubernetes no puede seleccionar FQDN. No restaure el egreso
comodín `0.0.0.0/0` ni `::/0`.

Añada políticas de mínimo privilegio separadas para PostgreSQL, Redis,
identidad, escáner e integraciones aprobadas.

## Prerrequisito del escáner

Las cargas de usuario en producción requieren `clamd` externo. El parche de
worker proporcionado espera `casebender-malware-scanner` (`host`, `port`) y
`casebender-malware-scanner-ca` (`ca.crt`) y habilita TLS. Un escáner en el
mismo pod puede usar en su lugar `CLAMD_SOCKET_PATH`. Si el escáner no está
disponible, los objetos permanecen en cuarentena y los reintentos pueden
acabar en dead-letter; las descargas no fallan en abierto.

## Renderizar y validar

```bash theme={null}
kubectl kustomize k8s/overlays/openshift-odf-rgw \
  > /tmp/casebender-openshift-odf-rgw.yaml
./scripts/openshift/validate.sh \
  /tmp/casebender-openshift-odf-rgw.yaml
oc apply --server-side --dry-run=server \
  -f /tmp/casebender-openshift-odf-rgw.yaml
oc apply --server-side \
  -f /tmp/casebender-openshift-odf-rgw.yaml
oc -n casebender rollout status deployment/webapp deployment/worker \
  --timeout=10m
```

A continuación, ejecute la cualificación en vivo desde la red de la carga de
trabajo y el contexto de confianza:

```bash theme={null}
STORAGE_TEST_ENDPOINT='https://<rgw-host>' \
STORAGE_TEST_BUCKET='<dedicated-test-bucket>' \
AWS_REGION='<rgw-region>' \
STORAGE_TEST_CA_BUNDLE='<private-ca-file>' \
STORAGE_TEST_ODF_VERSION='<exact-odf-version>' \
STORAGE_TEST_CEPH_VERSION='<exact-ceph-version>' \
STORAGE_TEST_CAP_VERSIONING='<true-or-false>' \
STORAGE_TEST_CAP_DELETE_MARKERS='<true-or-false>' \
STORAGE_TEST_CAP_OBJECT_LOCK='<true-or-false>' \
./scripts/storage/validate-ceph-rgw.sh
```

Proporcione las credenciales a través de la cadena de credenciales de AWS,
acotadas al bucket/prefijo de prueba dedicado. Complete y firme
`apps/docs/en/deployment/odf-ceph-rgw-validation-evidence.md`. Un render, una
prueba de emulador o una transcripción sin firmar no es certificación en vivo.

## Rotación de credenciales

1. Rote mediante el procedimiento soportado de ODF/Ceph; no edite a mano un
   Secret OBC propiedad del operador.
2. Permita un solapamiento acotado mientras se actualiza el Secret generado o
   el ExternalSecret.
3. Reinicie web y worker para que el init container regenere el archivo
   montado.
4. Exija que `/api/health/ready` y la validación de contrato en vivo pasen.
5. Revoque la credencial anterior y revise las métricas/registros de
   autenticación saneados.

## Rotación de CA

1. Publique un paquete de CA temporal que contenga las CA emisoras antigua y
   nueva.
2. Reinicie y valide web y worker.
3. Rote el certificado de servicio de RGW.
4. Publique el paquete de CA solo nuevo, reinicie y valide de nuevo.
5. Registre las versiones de recurso del ConfigMap, los hashes SHA-256 de la
   CA, las versiones exactas de ODF/Ceph y la evidencia; nunca los valores de
   las credenciales.

Consulte [Salud y solución de problemas del almacenamiento](/es/deployment/storage-health-troubleshooting)
y el
`k8s/overlays/openshift-odf-rgw/README.md` del repositorio para los detalles
del overlay.
