Hello,

I'm using Ceph Squid, currently 19.2.1.   I'd like to use either the
built-in ingress service or an approach with the RGW service to restrict
/admin access from public endpoints.

My setup:

Firewall (NGINX reverse proxy - TCP 443 stream passthrough only - no SSL)
  |
Ingress Service (SSL Certificates applied)
 |
RGW Gateways (SSL Certificates applied)

All administrative functions interact with RGW Gateways directly.   Only
public flows pass through the Ingress Service.

As I understand /admin API is required for gateway and RGW
service management.   I want to manage my SSL certs ideally via ceph spec
files (we have automation for that).   The frontend firewall is designed to
act as a simple L3 / L4 ACL.

Is there a way to modify the Ingress service spec file to restrict /admin
access.   According to GROK adding the following to the ingress spec YAML
should work, but the custom_configs section throws an error as follows.

I can't seem to find any official documentation around this.   Feels like
it should be something to easily configure.   How are others securing this?

Thanks.

---

service_type: ingress

service_id: ingress01

placement:

  hosts:

    - ingress01

spec:

  backend_service: rgw.public

  virtual_ip: 10.1.1.1/24

  frontend_port: 443

  monitor_port: 1967

  custom_configs:

    - |

      frontend frontend

       acl block_admin path_beg /admin

       http-request deny if block_admin

  ssl_cert: |

    -----BEGIN CERTIFICATE-----

    ...

    -----END CERTIFICATE-----

    -----BEGIN PRIVATE KEY-----

    ...

    -----END PRIVATE KEY-----

Error EINVAL: Traceback (most recent call last):

  File "/usr/share/ceph/mgr/mgr_module.py", line 1862, in _handle_command

    return self.handle_command(inbuf, cmd)

  File "/usr/share/ceph/mgr/orchestrator/_interface.py", line 184, in
handle_command

    return dispatch[cmd['prefix']].call(self, cmd, inbuf)

  File "/usr/share/ceph/mgr/mgr_module.py", line 499, in call

    return self.func(mgr, **kwargs)

  File "/usr/share/ceph/mgr/orchestrator/_interface.py", line 120, in
<lambda>

    wrapper_copy = lambda *l_args, **l_kwargs: wrapper(*l_args, **l_kwargs)
# noqa: E731

  File "/usr/share/ceph/mgr/orchestrator/_interface.py", line 109, in
wrapper

    return func(*args, **kwargs)

  File "/usr/share/ceph/mgr/orchestrator/module.py", line 1697, in
apply_misc

    return self._apply_misc(specs, dry_run, format, no_overwrite)

  File "/usr/share/ceph/mgr/orchestrator/module.py", line 1700, in
_apply_misc

    completion = self.apply(specs, no_overwrite)

  File "/usr/share/ceph/mgr/orchestrator/_interface.py", line 1737, in inner

    completion = self._oremote(method_name, args, kwargs)

  File "/usr/share/ceph/mgr/orchestrator/_interface.py", line 1806, in
_oremote

    mgr.log.debug("_oremote {} -> {}.{}(*{}, **{})".format(mgr.module_name,
o, meth, args, kwargs))

  File "/lib/python3.9/site-packages/ceph/deployment/service_spec.py", line
1109, in __repr__

    y = yaml.dump(cast(dict, self), default_flow_style=False)

  File "/lib64/python3.9/site-packages/yaml/__init__.py", line 290, in dump

    return dump_all([data], stream, Dumper=Dumper, **kwds)

  File "/lib64/python3.9/site-packages/yaml/__init__.py", line 278, in
dump_all

    dumper.represent(data)

  File "/lib64/python3.9/site-packages/yaml/representer.py", line 27, in
represent

    node = self.represent_data(data)

  File "/lib64/python3.9/site-packages/yaml/representer.py", line 48, in
represent_data

    node = self.yaml_representers[data_types[0]](self, data)

  File "/lib/python3.9/site-packages/ceph/deployment/service_spec.py", line
1122, in yaml_representer

    return dumper.represent_dict(cast(Mapping, data.to_json().items()))

  File "/lib/python3.9/site-packages/ceph/deployment/service_spec.py", line
1062, in to_json

    ret['custom_configs'] = [c.to_json() for c in self.custom_configs]

  File "/lib/python3.9/site-packages/ceph/deployment/service_spec.py", line
1062, in <listcomp>

    ret['custom_configs'] = [c.to_json() for c in self.custom_configs]

AttributeError: 'str' object has no attribute 'to_json'

---
_______________________________________________
ceph-users mailing list -- ceph-users@ceph.io
To unsubscribe send an email to ceph-users-le...@ceph.io

Reply via email to