minio / mc

Unix like utilities for object store
https://min.io/download
GNU Affero General Public License v3.0
2.86k stars 548 forks source link

Large MC Update ( encryption flags, functional test suite, removal of session code, minor cleanup, vuln. updates ) #4882

Closed zveinn closed 6 months ago

zveinn commented 7 months ago

Community Contribution License

All community contributions in this pull request are licensed to the project maintainers under the terms of the Apache 2 license. By creating this pull request I represent that I have the right to license the contributions to the project maintainers under the Apache 2 license.

Note

This is a rather large update to the mc so let's take our time to review and discuss

The test suite

The new test suite is created to run an mc binary against an endpoint. The idea is to be able to run any version of mc against any version of minio by just changing .env variables. Our ci pipeline is currently not set up for that, so the test suite will not run automatically for now.

The test suite is a replacement for the bash functional suite we had before and was hard to modify and maintain. The new suite covers all tests cases that the bash test suite used to cover, hence why it took so long to submit this PR. Along with the old test cases we have a lot of new ones as well, especially regarding the new encryption flags.

MC updates

This PR contains a few items that needed a fix and have been sittin in the backlog. Normally I would not bundle so many things together but since the core change for this PR was to deprecate the --encrypt --encrypt-kms and --encrypt-s3 flags it was a good chance to also include the new functional test suite to cover the changes.

During the update I discovered that some of the mc methods have documentation stating that they can accept encryption flags, but in reality these methods do not need encryption at all. This lead to a small refactor of certain methods.

Another change that kind of just happened during this refactor was the removal of the --continue flag. This flag was behaving in an insecure way and after a discussion with AB, we decided to completely remove this code from the mc client.

Things that were fixed/changed

Changed encryption flag functionality

The new encryption flags (--enc-s3, --enc-kms, --enc-c) will only accept RawBase64 encoded keys and the cli parameters are now '[]string' instead of 'string'. This allows us to properly parse the keys.

Deprecated flags

New flags

Types of changes

Checklist:

ravindk89 commented 7 months ago

@zveinn is it a hard requirement for us to rename --encrypt<method> to --enc-<method> ?

zveinn commented 7 months ago

@zveinn is it a hard requirement for us to rename --encrypt<method> to --enc-<method> ?

It's not a hard requirement, but even if we rename the flags they will not function the same. So it's better to change the name entirely to prevent confusion. Originally we were going to keep backwards compatibility on this, but we decided that was not a good idea.

But I am neutral on the renaming tbh, if we want to keep the old names then that's all good.

ravindk89 commented 7 months ago

:thinking: @djwfyi @feorlen I'm not of a strong opinion - it's more important that we keep consistent moving forward.. We can document it either way.

feorlen commented 7 months ago

🤔 @djwfyi @feorlen I'm not of a strong opinion - it's more important that we keep consistent moving forward.. We can document it either way.

Do we have a schedule to deprecate then remove for these? I'm fine with name changes as long as we are able to handle the transition in an orderly fashion.

ravindk89 commented 7 months ago

🤔 @djwfyi @feorlen I'm not of a strong opinion - it's more important that we keep consistent moving forward.. We can document it either way.

Do we have a schedule to deprecate then remove for these? I'm fine with name changes as long as we are able to handle the transition in an orderly fashion.

@kannappanr it might be nice to flesh out how exactly we want to time deprecations, this conversation is also at hand in https://github.com/minio/operator/pull/2032#issuecomment-2010034521

zveinn commented 7 months ago

🤔 @djwfyi @feorlen I'm not of a strong opinion - it's more important that we keep consistent moving forward.. We can document it either way.

Do we have a schedule to deprecate then remove for these? I'm fine with name changes as long as we are able to handle the transition in an orderly fashion.

I don't think we're doing a deprecation phase for this one.

zveinn commented 6 months ago

Just did a small refactor for the encryption key parsing, there was a method that was forcing the use of only one type of key at a time. It's been removed and the code paths simplified.