michaeljmarshall opened a new pull request #13376:
URL: https://github.com/apache/pulsar/pull/13376


   Master Issue: https://github.com/apache/pulsar/issues/11269
   
   ### Motivation
   
   In order to increase the overall security of our Pulsar docker images, they 
should default to run as the non-root user. While updating these permissions, I 
make sure to comply with the OpenShift spec so the docker image can run on that 
platform out of the box.
   
   Once we finalize these changes, we will need to update the Apache Pulsar 
Helm chart to make sure that deployments take advantage of this feature. We'll 
use the `fsGroup` to make sure that k8s sets the appropriate file system 
permissions for the zookeeper, bookkeeper, and function pods.
   
   ### Modifications
   
   * Default to run as UID 10000. As noted in the `Dockerfile`, this UID is 
arbitrary. No logic should rely on this id.
   * Update filesystem permissions so that the group user has sufficient write 
permission. The group user is 0 (root).
   * Remove unnecessary write access.
       * The `/pulsar/{conf,data,logs}` directories and their members must be 
writable by the root group. I don't know of any other directories that need to 
be written to. Note that the `bin/pulsar-admin` too creates a log file in the 
`/pulsar/logs` directory. Please let me know if there are any additional
       * Note also that the executable file permissions are already set in our 
git repo. Those permissions are inherited by the docker image when we run the 
`COPY` directive in the `Dockerfile`.
   * There are no changes to the function worker in the k8s runtime. We do not 
need them because we already merged 
https://github.com/apache/pulsar/commit/04b5da0f95794259694cc781e8960b7e52fac06b.
   * Add note to `conf/bkenv.sh`, as it is a `.sh` script that is not 
executable (and doesn't need to be).
   * Update test docker image and `supervisord` configuration.
   
   Note: it's unclear to me how the OpenShift spec handles restarts. I know 
that the UID is arbitrary. It's possible that the umask needs to be switched 
from `022` to `002`. Setting the umask in the docker image does not persist for 
consumers of the image, so this would need to be set in a helm chart.
   
   ### Verifying this change
   
   You can access a test image built with these changes here: 
`michaelmarshall/pulsar:2.10.0-SNAPSHOT`. I have already run some manual tests 
like `bin/pulsar standalone` in the container. I still need to deploy an actual 
cluster to verify that all of the unique components work correctly. Because we 
already merged 
https://github.com/apache/pulsar/commit/04b5da0f95794259694cc781e8960b7e52fac06b,
 the upgrade scenarios are already simplified. If this change is in 2.10.0, 
that means 2.8 and 2.9 will be compatible for certain function worker upgrade 
scenarios.
   
   I wrote test criteria in https://github.com/apache/pulsar/issues/11269. I'll 
need to follow up on that criteria using my newly build image. I should be able 
to look closer at this tomorrow.
   
   We'll also need tests to pass, as I modified some tests with this PR.
   
   ### References
   
   The following links were useful in understanding how to make these changes:
   
   * 
https://engineering.bitnami.com/articles/running-non-root-containers-on-openshift.html
   * https://cloud.redhat.com/blog/a-guide-to-openshift-and-uids
   
   ### Does this pull request potentially affect one of the following parts:
   
   This PR updates our Docker images in a breaking way. It could result in 
bookkeepers, zookeepers, or functions with insufficient permissions. We will 
mitigate these permissions by updating the helm chart. These changes are easily 
overridden by extending the docker image. In k8s, you can use the pod's 
`securityContext` to override the user or group.
   
   ### Documentation
   
   - [x] `doc-required` 
     
   I need to add docs for this PR. I'll do that in a follow up commit tomorrow.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to