Skip to content

docs(proposal): decoupling app sync from control plane user w/ impersonation#14255

Merged
crenshaw-dev merged 24 commits intoargoproj:masterfrom
anandf:proposal_app_sync_impersonation
Feb 6, 2024
Merged

docs(proposal): decoupling app sync from control plane user w/ impersonation#14255
crenshaw-dev merged 24 commits intoargoproj:masterfrom
anandf:proposal_app_sync_impersonation

Conversation

@anandf
Copy link
Copy Markdown
Member

@anandf anandf commented Jun 28, 2023

Proposal for decoupling the application sync process from the Application controller service account.

Addresses issue #7689
Note on DCO:

If the DCO action in the integration test fails, one or more of your commits are not signed off. Please click on the Details link next to the DCO action for instructions on how to resolve this.

Checklist:

  • Either (a) I've created an enhancement proposal and discussed it with the community, (b) this is a bug fix, or (c) this does not need to be in the release notes.
  • The title of the PR states what changed and the related issues number (used for the release note).
  • The title of the PR conforms to the Toolchain Guide
  • I've included "Closes [ISSUE #]" or "Fixes [ISSUE #]" in the description to automatically close the associated issue.
  • I've updated both the CLI and UI to expose my feature, or I plan to submit a second PR with them.
  • Does this PR require documentation updates?
  • I've updated documentation as required by this PR.
  • Optional. My organization is added to USERS.md.
  • I have signed off all my commits as required by DCO
  • I have written unit and/or e2e tests for my change. PRs without these are unlikely to be merged.
  • My build is green (troubleshooting builds).
  • My new feature complies with the feature status guidelines.
  • I have added a brief description of why this PR is necessary and/or what this PR solves.

Please see Contribution FAQs if you have questions about your pull-request.

@codecov
Copy link
Copy Markdown

codecov bot commented Jun 28, 2023

Codecov Report

All modified and coverable lines are covered by tests ✅

Comparison is base (55713b3) 49.26% compared to head (d2c3cdf) 49.25%.
Report is 6 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master   #14255      +/-   ##
==========================================
- Coverage   49.26%   49.25%   -0.02%     
==========================================
  Files         274      274              
  Lines       48158    48170      +12     
==========================================
- Hits        23727    23724       -3     
- Misses      22085    22099      +14     
- Partials     2346     2347       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@anandf anandf force-pushed the proposal_app_sync_impersonation branch 2 times, most recently from c21ab55 to 3670f94 Compare June 28, 2023 15:10
- '*'
destinations:
- namespace: guestbook
server: https://kubernetes.default.svc
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we not have the defaultServiceAccountName in the destinations list instead? Then we'd have the possibility of doing something like below:

destinations:
- namespace: guestbook
  server: https://kubernetes.default.svc
  defaultServiceAccountName: foo
- namespace: guestbook-2
  server: https://kubernetes.default.svc
  defaultServiceAccountName: bar
- namespace: other-namespaces*
  server: https://kubernetes.default.svc
  defaultServiceAccountName: bat

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With this there shouldn't be a need to allow users to set serviceAccountName directly in the Application CRD. This would mean that this can be more tightly controlled by the Argo CD admins.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could perhaps be extended by adding allowedServiceAccounts, so that a destinations block could look as below:

destinations:
- namespace: guestbook
  server: https://kubernetes.default.svc
  defaultServiceAccountName: foo
  allowedServiceAccounts: 
  - foo
  - bar
  - bat
- namespace: guestbook-2
  server: https://kubernetes.default.svc
  defaultServiceAccountName: bar
  allowedServiceAccounts: 
  - foo
  - bar
  - bat
- namespace: other-namespaces*
  server: https://kubernetes.default.svc
  defaultServiceAccountName: bat
  allowedServiceAccounts: 
  - foo
  - bar
  - bat

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @blakepettersson for all your review comments and the doc fixes (which I missed) :-)
We too, had similar internal discussions of restricting the service account config only at the AppProject. Allowing it at the Application level was to give more flexibility to users to handle scenarios where there is a need to have 1 service account per Application. But, since we need to restrict the service account specified in the Application, it probably makes sense to have all the control in the AppProject itself. I like the idea of having it part of the destinations array as it allows us to specify 1 per destination target. Let me see what others think about this approach and then make the change in the proposal.

- '*'
destinations:
- namespace: guestbook
server: https://kubernetes.default.svc
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With this there shouldn't be a need to allow users to set serviceAccountName directly in the Application CRD. This would mean that this can be more tightly controlled by the Argo CD admins.

@blakepettersson
Copy link
Copy Markdown
Member

@anandf the proposal as it stands is 👨‍🍳 💋, LGTM! Could you remove the docs/decouple-application-sync-user-using-impersonation doc since it was a bit confusing to follow and the actual proposal is located in docs/proposals/decouple-application-sync-user-using-impersonation?

@anandf anandf force-pushed the proposal_app_sync_impersonation branch from c40369f to ed0706f Compare July 14, 2023 04:32
Copy link
Copy Markdown
Member

@crenshaw-dev crenshaw-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the proposal, @gpaul! Most of my questions are just asking for clarification.

- Update the User Guide and other documentation where the CLI option usages are explained.


### Detailed examples
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be helpful to add a "how-to" example. Basically a step-by-step guide for a user to take advantage of this hypothetical feature. e.g.

  1. Create an AppProject for team A
  2. Add a destination for team A's cluster, https://team-a.kubernetes.svc
  3. Add a serviceAccountName team-a-service-account to the destination
  4. Create a cluster config that looks like X and do Y to allow that cluster config to impersonate team-a-service-account on the destination cluster
  5. etc...

I'm not super familiar with the mechanics of impersonation, so the more detailed drill-down will help me imagine exactly how this feature will work.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, how would the service account itself be managed? I suspect there'll need to be an impersonation opt-out (something like an annotation on the relevant manifest itself perhaps?), otherwise the service account would not be able to be managed in a Gitops-manner.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have added details on how to install argocd, setting up the feature flag for enabling this feature, create separate namespace, service account and rbac policies for trying out this feature. Let me know

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@blakepettersson The namespace, serviceaccount, and the related RBAC policies would be created separately as part of the tenant provisioning process is what I am thinking.

destinations:
- namespace: *
server: https://kubernetes.default.svc
serviceAccountName: generic-deployer
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One question that just came to me is what happens if there are multiple potential matches, i.e there are several potential serviceaccounts that gets returned? Does the first match win, or should this be an error?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The one with the closest match should be used. If there is an exact match of namespace and server, then that must be given the highest priority. The section matching with wildcard charcter * must have the lowest priority.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How should negated destinations be ranked? For example if we have a destination looking like

  destinations:
  - namespace: !something*
    server: !https://kubernetes.default.svc
    serviceAccountName: generic-deployer
  - namespace: not-something
    server: https://server-1
    serviceAccountName: some-other-deployer

How should that be ranked?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure how we should handle negative matches. Can that be prioritized the least ? or is it better to keep it simple and throw an error if there are multiple matches ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO I think it's better to keep it simple and throw an error on multiple matches, WDYT @crenshaw-dev?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keeping the logic to throw error if there are multiple matches either through regex or an exact match of the destination.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it might actually be kinda weird to have the destinations field serve two purposes: allowing/denying clusters/namespaces and also associating service account names with clusters.

What if we just add a new field called clusterServiceAccounts?

clusterServiceAccounts:
- server: https://kubernetes.default.svc # ! negation is not allowed here
  serviceAccountName: in-cluster
- server: * # Fallback, first match wins
  serviceAccountName: argocd-default-sa

I don't wanna overload the destinations field with too much functionality. Causes confusion.

Copy link
Copy Markdown
Member Author

@anandf anandf left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed the review comments.

- Update the User Guide and other documentation where the CLI option usages are explained.


### Detailed examples
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have added details on how to install argocd, setting up the feature flag for enabling this feature, create separate namespace, service account and rbac policies for trying out this feature. Let me know

- Update the User Guide and other documentation where the CLI option usages are explained.


### Detailed examples
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@blakepettersson The namespace, serviceaccount, and the related RBAC policies would be created separately as part of the tenant provisioning process is what I am thinking.

@ljupchokotev
Copy link
Copy Markdown

A question on the proposal, how would this help with fixing issues like #15027, #10897, #9606 and #9515. I see this proposal being mentioned as the fix, but I can't figure out how as all examples point to ArgoCD managing the same cluster where it is also deployed and not remote clusters. I think #12755 goes into a better direction to fix the mentioned issues, as long as Argo can differentiate clusters with the same cluster url.

Isn't it also assuming that ArgoCD will have the permission to impersonate all the needed service accounts which might be difficult in multi-tenant clusters where the cluster is managed by a team different than the team managing ArgoCD. The examples in the docs do not really setup the permissions, so am I missing something here? Don't you have to grant the impersonate verb to ArgoCD so it can impersonate other SAs?

@anandf
Copy link
Copy Markdown
Member Author

anandf commented Sep 4, 2023

A question on the proposal, how would this help with fixing issues like #15027, #10897, #9606 and #9515. I see this proposal being mentioned as the fix, but I can't figure out how as all examples point to ArgoCD managing the same cluster where it is also deployed and not remote clusters. I think #12755 goes into a better direction to fix the mentioned issues, as long as Argo can differentiate clusters with the same cluster url.

I see the issues #15027, #10897, #9606 and #9515 are all about managing multiple cluster URLs with different namespace. Probably one namespace per tenant and each tenant having its own set of cluster secrets.

Though this proposal might not directly address, it might help to remove the need for adding multiple cluster secrets per namespace. You can login to the remote cluster as cluster-admin user, for all the tenants, and for sync operations each tenant (cluster + namespace combination) would use a separate service account. That way you can manage with a single cluster secret and instead control the access to each application or tenant using appropriate RBAC policies. I can add an example of how to manage a remote cluster.

@ljupchokotev
Copy link
Copy Markdown

You can login to the remote cluster as cluster-admin user

That is exactly the problem in our case and I assume for a lot of other people judging by the feedback on the linked issues. I do not own the multi-tenant cluster, so I am not able to get a cluster-admin service account to setup in Argo. Tenants get a service account that has privileges in their own namespace only. Due to this, I don't see this proposal as a solution for that particular issue at least. The proposal in #12755 (or similar) should still be implemented as that allows for least-privilege principle to be implemented in an easy way. Impersonation can still be used as needed, whether with a cluster-admin SA or a namespace SA.

## Proposal

Enable ArgoCD Admin to specify a `serviceAccountName` in `AppProjects` CR on a per `destination` basis.
When applications gets synced, based on its destination, the `serviceAccountName` configured in the `AppProject` will be chosen and used for impersonation when executing the kubectl apply/create commands. There could either be a regex based match of the destination or an exact match of the destination. If there are multiple possible options, then an error would be thrown during the sync operation.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As this may be quite complex to comprehend and to implement, and it may degrade user experience, should we really allow regex for destination?

Instead, can it be thought to have an annotation on the destination?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we are going to throw an error upon multiple matches, would it make more sense to make it exact match for destination instead of regex?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea to support regex was to allow some kind of convention, where a standard service account name is used for all the deployments. In that case, users can configure same service account for all destinations and then ensure that the service account is created for each namespace. For instance use the service account name argocd-deployer for all namespaces for all clusters. Also regex is already supported for namespace field.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That makes sense. Can we consider the first matching destination only and ignore the rest instead of throwing an error?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If there is a glob pattern match and an exact match, we can give priority to the exact match and not throw any error. But if there are multiple glob pattern matches or multiple exact matches, its better to throw an error and make sure that the admin user corrects the configuration. wdyt ?


#### Component: ArgoCD Application Controller

- Provide a configuration in argocd-cm which can be modified to enable the Impersonation feature. Set `applicationcontroller.enable.impersonation: true` in the Argo CD ConfigMap.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we detail here how to get the legacy behaviour or an equivalent of it?
And what is or will be the default behaviour? The one with impersonation or without?

Copy link
Copy Markdown
Member Author

@anandf anandf Sep 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Impersonation would be disabled by default. Users have to opt-in by explicitly enabling this feature. I will add the default behaviour in this statement for better clarity.

```
kubectl ctx remote-cluster
kubectl create serviceaccount argocd-admin
kubectl create clusterrole argocd-admin-role --verb=impersonate --resource="users,groups"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, that was something like this that I was mentioning previously. Is it required for the previous examples as well? isn'it?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When you add a cluster using argocd cluster add without providing any specific service account, ArgoCD creates a service account argocd-manager, ClusterRole called argocd-manager-role with cluster-admin level of access and binds it using a ClusterRoleBinding named argocd-manager-role-binding. That is why it was not required in the previous example.

## Proposal

Enable ArgoCD Admin to specify a `serviceAccountName` in `AppProjects` CR on a per `destination` basis.
When applications gets synced, based on its destination, the `serviceAccountName` configured in the `AppProject` will be chosen and used for impersonation when executing the kubectl apply/create commands. There could either be a regex based match of the destination or an exact match of the destination. If there are multiple possible options, then an error would be thrown during the sync operation.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we are going to throw an error upon multiple matches, would it make more sense to make it exact match for destination instead of regex?

serviceAccountName: guestbook-deployer
```

#### Example 4: Remote destination with cluster-admin access and using different service account for the sync operation
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to be same as example 3. Can you be more explicit about the difference in both the examples?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have modified the title. Copy-Paste error. Example 4 is where the default service account argocd-manager is not created on the remote cluster and instead, only a restrictive service account is provided.

@anandf anandf force-pushed the proposal_app_sync_impersonation branch from 9ec64f3 to 5880d07 Compare September 18, 2023 13:14
@anandf anandf requested review from a team as code owners September 19, 2023 13:40
serviceAccountName: guestbook-dev-deployer
- namespace: guestbook-stage
server: https://kubernetes.default.svc
serviceAccountName: guestbook-stage-deployer
Copy link
Copy Markdown
Contributor

@reegnz reegnz Sep 20, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additionally supporting full principal name would be preferable, eg. system:serviceaccount:guestbook-stage:guestbook-stage-deployer, eg whatever you would pass on to in the --as flag.

This allows easier understanding of what flag it gets translated to.
Also supports use-cases when you want to put the deployer service accounts in a separate namespace, not the same namespace that you're targeting.
Eg. SA is in 'deployer' namespace, but targeting 'guestbook-stage'.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to restrict users from being able to use service account from a different namespace. This is also the convention followed even for pods where you can just specify the serviceAccountName and it will be looked up in the pod's namespace.

Copy link
Copy Markdown
Contributor

@reegnz reegnz Oct 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you go for the pod serviceAccountName analogy then approject should only use SA from the same namespace and use the serviceAccountName field name.

The proposal however seems to follow semantics that are much closer to role binding semantics, which allows for what I described.

Also a single service account could be used to deploy across namespaces, and the cross namespace permissions are more natural to represent in RBAC.

But the proposal currently forces the use of switching between multiple service accounts if an app targets multiple namespaces, and thereby the cross namespace role binding aspect of RBAC is not utilized, instead it bleeds into the spec and the argocd implementation, and argocd has to implement conscious selection of SA per namespace during the sync of a single app.

If you leave that to RBAC (eg single SA, role bindings to that SA per Target namespace) then the implementation becomes trivial as it only requires a single impersonate API call with no additional logic to determine when to switch SA-s within an application sync.

Just using a single impersonation seems less hassle to implement as it delegates these concerns completely to RBAC for the entire sync operation.

Copy link
Copy Markdown
Contributor

@reegnz reegnz Oct 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some other problems I'm finding:

  • how does the audit trail in the k8s audit logs look like if a single application deployment touching multiple namespaces is switching between multiple SA-s? IMHO that would be somewhat chaotic.
  • how do you control deploying cluster-scoped resources?

From an audit-trail story IMHO it would be a cleaner story if the approject has a clean audit-identity by a 1:1 mapping of AppProject to ServiceAccount (or even better would be App to ServiceAccount).

Copy link
Copy Markdown
Contributor

@reegnz reegnz Oct 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Created an example so its clear what particular deployment model I'm talking about:
https://gist.github.com/reegnz/e83a5958be0d92698061c318f893120e

You have some helm chart, that deploys into one or more namespaces, plus it also deploys cluster-scoped resources.
From an audit perspective you likely don't want the deployment of this particular application to be split between multiple principals. Also you want it to be able to deploy clusterscoped resources and control which clusterscoped resources the app is allowed to deploy.

This kind of deployment works today with flux helm controller where you can define a single SA for an individual helm chart to control what service account it can use to deploy, and the semantics of serviceAccountName pick up the SA from the same namespace as the CRD is defined in.

Copy link
Copy Markdown
Contributor

@reegnz reegnz Oct 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess with this proposal the granularity I'm looking for is likely achieved with a 1:1 mapping of AppProject to App for most use-cases. Except that I'm tied to placing the SA into the target namespace if I'm just targeting one namespace.

However it would still be preferable to not assume the deployer SA is in the same namespace as the application, just as we don't assume the AppProject has to reside in the same namespace.
Ideally deployer SA should be allowed to live next to the AppProject IMHO. Otherwise I feel like RedHat Openshift-like opinionated SA structures start leaking into ArgoCD (which I assume where the proposal assumptions on SA placement is coming from).

One use-case of mine is where I create namespaces from an argocd app, and the same app is deploying quotas limitranges and serviceaccounts into all of the newly created namespaces.
To achieve that use-case I'd need something that doesn't assume which namespace the SA lives in.

tl;dr - the audit-trail for multi-namespace deployments is still highly problematic IMHO, also tying to the target namespace doesn't make sense if there is no target namespace (eg. when bootstrapping namespaces). IMHO if you'd allow for a 'default' serviceAccountName for resources that don't match any of the other configured namespace rules I'd be good.

eg.

defaultDestination:
  namespace: argocd
  server: https://kubernetes.default.svc
  serviceAccountName: my-deployer

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how does the audit trail in the k8s audit logs look like if a single application deployment touching multiple namespaces is switching between multiple SA-s? IMHO that would be somewhat chaotic.

Do you have an example of an Application deployment touching multiple namespaces?

also tying to the target namespace doesn't make sense if there is no target namespace (eg. when bootstrapping namespaces)

I'm inclined to agree on this one, I'm having trouble understanding how this would work in a Gitops context to create namespaces which do not already exist.

I'd be for amending the destinations array to take a full principal name instead of a service account name.

Copy link
Copy Markdown
Contributor

@reegnz reegnz Oct 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One example of mine is an application that sets up namespaces + their quotas, limitranges, etc. Essentially bootstrapping the namespaces themselves. It wouldn't make sense splitting them into multiple applications TBQH. We also don't have service accounts available inside the namespaces in the beginning, so it's a chicken and egg problem.
I wouldn't want to provision them outside argocd, but manage all with argocd after an initial manual bootstrap of the argocd namespace and argocd deployments.
I also still want to ensure I follow principle of least privilege and when deploying namespaces I still want to enforce that the app only touches namespaces, quotas, limitranges, and likely roles+rolebindings. (maybe clusterrole bindings in case I want to set up an SA to provision cluster-scoped resources in another app).

Copy link
Copy Markdown
Contributor

@reegnz reegnz Oct 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another use-case is, when you provision the really critical parts of your cluster, eg. setting up cluster roles to be used by deployer service accounts. You likely want to treat that as a separate app, because creating clusterroles is a VERY sensitive issue. What namespace do I target with that, it's not a namespaced resource.

I might have separation of duties in my application teams, where a dedicated security team manages the service accounts, roles and rolebindings, and application teams have no business in provisioning them. I might have m:n mapping of apps to namespaces with m<n that the security team manages.

I think not allowing flexibility on using one principal touching multiple namespaces in a one-to-many manner is a problem in itself (eg. from an audit trail perspective it is just unnecessarily complicated to hunt down who deployed what)

The CD tool shouldn't be opinionated about anybody's security model, instead it should provide the most flexibility on how one ties it together with RBAC. Leave the job of being opinionated to the user.

Allowing the basic as semantics we have in kubeconfigs and kubectl for impersonation makes the most sense as it is the least opinionated approach on one's security model.

I can easily say several more examples if someone wants them. In enterprise contexts there's a ton of non-trivial cases and not everyone uses OpenShift-like RBAC with per-namespace deployer SA-s, which this proposal smells like it's opinionated towards (probably unintentionally).


#### Component: ArgoCD API

- Support new property `serviceAccountName` in `ApplicationDestination` section of `AppProject`
Copy link
Copy Markdown
Contributor

@reegnz reegnz Sep 20, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To leave it flexible, next to serviceAccountName I'd also expose the feature with as and asGroups attributes, to match kubectl flags and kubecontext configuration.

It would make sense to try and match the 1st party kubernetes semantics around impersonation behaviour, it'd be much easier for the user to connect the behaviour to how kubectl behaves.

See https://kubernetes.io/docs/reference/config-api/kubeconfig.v1/#AuthInfo and https://kubernetes.io/docs/reference/kubectl/kubectl/#options

@anandf anandf force-pushed the proposal_app_sync_impersonation branch 2 times, most recently from eb23146 to 19b96d1 Compare October 15, 2023 03:51
anandf and others added 14 commits February 5, 2024 19:42
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>
Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
Signed-off-by: anandf <anjoseph@redhat.com>
…approach

Signed-off-by: anandf <anjoseph@redhat.com>
Signed-off-by: anandf <anjoseph@redhat.com>
…access

Signed-off-by: anandf <anjoseph@redhat.com>
Signed-off-by: anandf <anjoseph@redhat.com>
Signed-off-by: anandf <anjoseph@redhat.com>
… swell

Signed-off-by: anandf <anjoseph@redhat.com>
Signed-off-by: anandf <anjoseph@redhat.com>
Signed-off-by: anandf <anjoseph@redhat.com>
…amespace to match that of destination

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
…ceAccounts

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
@anandf anandf force-pushed the proposal_app_sync_impersonation branch from 8e67d83 to 10b3f76 Compare February 5, 2024 14:12
Signed-off-by: anandf <anjoseph@redhat.com>
…dence when multiple matches are available

Signed-off-by: anandf <anjoseph@redhat.com>
@crenshaw-dev crenshaw-dev merged commit 555f6f4 into argoproj:master Feb 6, 2024
JulienFuix pushed a commit to JulienFuix/argo-cd that referenced this pull request Feb 12, 2024
…onation (argoproj#14255)

* Proposal for decoupling application sync from control plane user using impersonation

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Moved the proposal document to the right directory

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Modified the proposal to have control in AppProjects alone instead of Application and AppProject

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Removed proposal placed in wrong directory and corrected examples

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Addressed review comments

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Additional corrections

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed alternative proposals section to include only AppProject based approach

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information on impersonation and added related links

Signed-off-by: anandf <anjoseph@redhat.com>

* Added examples for remote cluster destination with the required RBAC access

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed clusterrole and clusterrolebinding creation commands

Signed-off-by: anandf <anjoseph@redhat.com>

* Addressed review comments from Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Corrected RBAC to include serviceaccounts that can be impersonated as swell

Signed-off-by: anandf <anjoseph@redhat.com>

* Address few more review comments from Ishita, Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed a typo and updated the last updated date field

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information of the sync hook behaviour and also corrected the namespace to match that of destination

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Changed proposal to meet the latest api design using destinationServiceAccounts

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Fixed proposal document to use destinationServiceAccounts struct

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Renamed proposal file to have .md extension

Signed-off-by: anandf <anjoseph@redhat.com>

* Using glob pattern instead of regex, and corrected the order of precedence when multiple matches are available

Signed-off-by: anandf <anjoseph@redhat.com>

---------

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>
Signed-off-by: anandf <anjoseph@redhat.com>
Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
clement-heetch pushed a commit to clement-heetch/argo-cd that referenced this pull request Feb 12, 2024
…onation (argoproj#14255)

* Proposal for decoupling application sync from control plane user using impersonation

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Moved the proposal document to the right directory

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Modified the proposal to have control in AppProjects alone instead of Application and AppProject

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Removed proposal placed in wrong directory and corrected examples

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Addressed review comments

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Additional corrections

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed alternative proposals section to include only AppProject based approach

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information on impersonation and added related links

Signed-off-by: anandf <anjoseph@redhat.com>

* Added examples for remote cluster destination with the required RBAC access

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed clusterrole and clusterrolebinding creation commands

Signed-off-by: anandf <anjoseph@redhat.com>

* Addressed review comments from Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Corrected RBAC to include serviceaccounts that can be impersonated as swell

Signed-off-by: anandf <anjoseph@redhat.com>

* Address few more review comments from Ishita, Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed a typo and updated the last updated date field

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information of the sync hook behaviour and also corrected the namespace to match that of destination

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Changed proposal to meet the latest api design using destinationServiceAccounts

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Fixed proposal document to use destinationServiceAccounts struct

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Renamed proposal file to have .md extension

Signed-off-by: anandf <anjoseph@redhat.com>

* Using glob pattern instead of regex, and corrected the order of precedence when multiple matches are available

Signed-off-by: anandf <anjoseph@redhat.com>

---------

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>
Signed-off-by: anandf <anjoseph@redhat.com>
Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
adriananeci pushed a commit to adriananeci/argo-cd that referenced this pull request Feb 25, 2024
…onation (argoproj#14255)

* Proposal for decoupling application sync from control plane user using impersonation

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Moved the proposal document to the right directory

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Modified the proposal to have control in AppProjects alone instead of Application and AppProject

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Removed proposal placed in wrong directory and corrected examples

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Addressed review comments

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Additional corrections

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed alternative proposals section to include only AppProject based approach

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information on impersonation and added related links

Signed-off-by: anandf <anjoseph@redhat.com>

* Added examples for remote cluster destination with the required RBAC access

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed clusterrole and clusterrolebinding creation commands

Signed-off-by: anandf <anjoseph@redhat.com>

* Addressed review comments from Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Corrected RBAC to include serviceaccounts that can be impersonated as swell

Signed-off-by: anandf <anjoseph@redhat.com>

* Address few more review comments from Ishita, Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed a typo and updated the last updated date field

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information of the sync hook behaviour and also corrected the namespace to match that of destination

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Changed proposal to meet the latest api design using destinationServiceAccounts

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Fixed proposal document to use destinationServiceAccounts struct

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Renamed proposal file to have .md extension

Signed-off-by: anandf <anjoseph@redhat.com>

* Using glob pattern instead of regex, and corrected the order of precedence when multiple matches are available

Signed-off-by: anandf <anjoseph@redhat.com>

---------

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>
Signed-off-by: anandf <anjoseph@redhat.com>
Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Adrian Aneci <aneci@adobe.com>
penglongli pushed a commit to penglongli/argo-cd that referenced this pull request Mar 6, 2024
…onation (argoproj#14255)

* Proposal for decoupling application sync from control plane user using impersonation

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Moved the proposal document to the right directory

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Modified the proposal to have control in AppProjects alone instead of Application and AppProject

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Removed proposal placed in wrong directory and corrected examples

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Addressed review comments

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Additional corrections

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed alternative proposals section to include only AppProject based approach

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information on impersonation and added related links

Signed-off-by: anandf <anjoseph@redhat.com>

* Added examples for remote cluster destination with the required RBAC access

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed clusterrole and clusterrolebinding creation commands

Signed-off-by: anandf <anjoseph@redhat.com>

* Addressed review comments from Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Corrected RBAC to include serviceaccounts that can be impersonated as swell

Signed-off-by: anandf <anjoseph@redhat.com>

* Address few more review comments from Ishita, Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed a typo and updated the last updated date field

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information of the sync hook behaviour and also corrected the namespace to match that of destination

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Changed proposal to meet the latest api design using destinationServiceAccounts

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Fixed proposal document to use destinationServiceAccounts struct

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Renamed proposal file to have .md extension

Signed-off-by: anandf <anjoseph@redhat.com>

* Using glob pattern instead of regex, and corrected the order of precedence when multiple matches are available

Signed-off-by: anandf <anjoseph@redhat.com>

---------

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>
Signed-off-by: anandf <anjoseph@redhat.com>
Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: penglongli <pelenli@tencent.com>
lyda pushed a commit to lyda/argo-cd that referenced this pull request Mar 28, 2024
…onation (argoproj#14255)

* Proposal for decoupling application sync from control plane user using impersonation

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Moved the proposal document to the right directory

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Modified the proposal to have control in AppProjects alone instead of Application and AppProject

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Removed proposal placed in wrong directory and corrected examples

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Addressed review comments

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Additional corrections

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed alternative proposals section to include only AppProject based approach

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information on impersonation and added related links

Signed-off-by: anandf <anjoseph@redhat.com>

* Added examples for remote cluster destination with the required RBAC access

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed clusterrole and clusterrolebinding creation commands

Signed-off-by: anandf <anjoseph@redhat.com>

* Addressed review comments from Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Corrected RBAC to include serviceaccounts that can be impersonated as swell

Signed-off-by: anandf <anjoseph@redhat.com>

* Address few more review comments from Ishita, Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed a typo and updated the last updated date field

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information of the sync hook behaviour and also corrected the namespace to match that of destination

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Changed proposal to meet the latest api design using destinationServiceAccounts

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Fixed proposal document to use destinationServiceAccounts struct

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Renamed proposal file to have .md extension

Signed-off-by: anandf <anjoseph@redhat.com>

* Using glob pattern instead of regex, and corrected the order of precedence when multiple matches are available

Signed-off-by: anandf <anjoseph@redhat.com>

---------

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>
Signed-off-by: anandf <anjoseph@redhat.com>
Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Kevin Lyda <kevin@lyda.ie>
mkieweg pushed a commit to mkieweg/argo-cd that referenced this pull request Jun 11, 2024
…onation (argoproj#14255)

* Proposal for decoupling application sync from control plane user using impersonation

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Moved the proposal document to the right directory

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Modified the proposal to have control in AppProjects alone instead of Application and AppProject

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Removed proposal placed in wrong directory and corrected examples

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Addressed review comments

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Additional corrections

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed alternative proposals section to include only AppProject based approach

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information on impersonation and added related links

Signed-off-by: anandf <anjoseph@redhat.com>

* Added examples for remote cluster destination with the required RBAC access

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed clusterrole and clusterrolebinding creation commands

Signed-off-by: anandf <anjoseph@redhat.com>

* Addressed review comments from Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Corrected RBAC to include serviceaccounts that can be impersonated as swell

Signed-off-by: anandf <anjoseph@redhat.com>

* Address few more review comments from Ishita, Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed a typo and updated the last updated date field

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information of the sync hook behaviour and also corrected the namespace to match that of destination

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Changed proposal to meet the latest api design using destinationServiceAccounts

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Fixed proposal document to use destinationServiceAccounts struct

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Renamed proposal file to have .md extension

Signed-off-by: anandf <anjoseph@redhat.com>

* Using glob pattern instead of regex, and corrected the order of precedence when multiple matches are available

Signed-off-by: anandf <anjoseph@redhat.com>

---------

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>
Signed-off-by: anandf <anjoseph@redhat.com>
Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Hariharasuthan99 pushed a commit to AmadeusITGroup/argo-cd that referenced this pull request Jun 16, 2024
…onation (argoproj#14255)

* Proposal for decoupling application sync from control plane user using impersonation

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Moved the proposal document to the right directory

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/decouple-application-sync-user-using-impersonation

Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Modified the proposal to have control in AppProjects alone instead of Application and AppProject

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Removed proposal placed in wrong directory and corrected examples

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Update docs/proposals/decouple-application-sync-user-using-impersonation

Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>

* Addressed review comments

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Additional corrections

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed alternative proposals section to include only AppProject based approach

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information on impersonation and added related links

Signed-off-by: anandf <anjoseph@redhat.com>

* Added examples for remote cluster destination with the required RBAC access

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed clusterrole and clusterrolebinding creation commands

Signed-off-by: anandf <anjoseph@redhat.com>

* Addressed review comments from Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Corrected RBAC to include serviceaccounts that can be impersonated as swell

Signed-off-by: anandf <anjoseph@redhat.com>

* Address few more review comments from Ishita, Akram

Signed-off-by: anandf <anjoseph@redhat.com>

* Fixed a typo and updated the last updated date field

Signed-off-by: anandf <anjoseph@redhat.com>

* Added information of the sync hook behaviour and also corrected the namespace to match that of destination

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Changed proposal to meet the latest api design using destinationServiceAccounts

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Fixed proposal document to use destinationServiceAccounts struct

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>

* Renamed proposal file to have .md extension

Signed-off-by: anandf <anjoseph@redhat.com>

* Using glob pattern instead of regex, and corrected the order of precedence when multiple matches are available

Signed-off-by: anandf <anjoseph@redhat.com>

---------

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
Signed-off-by: Anand Francis Joseph <anandfrancis.joseph@gmail.com>
Signed-off-by: anandf <anjoseph@redhat.com>
Co-authored-by: Blake Pettersson <blake.pettersson@gmail.com>
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants