arrow-left

All pages
gitbookPowered by GitBook
1 of 5

Loading...

Loading...

Loading...

Loading...

Loading...

Development Tools

Rancher

Create an integration to manage access to a Rancher instance

Rancher is a Kubernetes management platform that simplifies the deployment and management of clusters across any environment, enhancing flexibility, scalability, and resource efficiency.

circle-check

For organizations requiring a more robust solution, SUSE Rancher Prime offers a hardened and fully-supported enterprise-grade experience.

By integrating with this ecosystem, Apono helps you discover your Kubernetes resources and securely manage access directly through your Rancher instance.


hashtag
Prerequisite

Item
Description

hashtag
Create a dedicated Apono user

Follow these steps to create a dedicated user for Apono:

  1. In Rancher, with a user-friendly name, such as apono-provisionser-user-role.

circle-info

You must create a global role (Create Global Role) that grants the following resource:

  • Verbs: list

  • Resource:

  1. Locate the new role.

  2. Click ☰ > Edit YAML.

  3. Above the metadata property, add the cluster-owner role.

circle-check

Assigning the cluster-owner role via inheritedClusterRoles does not provide access to the local cluster (the Rancher control plane cluster). This role inheritance applies only to downstream user clusters and excludes Rancher’s internal management plane.

  1. Click Save.

  2. with a user-friendly name, such as apono-provisioner-user.

  3. Assign the new dedicated user (apono-provisioner-user) to the new local user.

You can now .


hashtag
Integrate Rancher

circle-check

You can also use the steps below to integrate with Apono using Terraform. In step 10, instead of clicking Confirm, follow the Are you integrating with Apono using Terraform? guidance.

Follow these steps to complete the integration:

  1. On the tab, click Rancher. The Connect Integration page appears.

  2. Under Discovery, click Next. The Apono connector section expands.

  3. From the dropdown menu, select a connector.

circle-check

If the desired connector is not listed, click + Add new connector and follow the instructions for creating a connector (, , , ).

  1. Click Next. The Integration Config section expands.

  2. Define the Integration Config settings.

    Setting
    Description
chevron-right💡Are you integrating with Apono using Terraform?hashtag

If you want to integrate with Apono using Terraform, follow these steps instead of clicking Confirm:

  1. At the top of the screen, click View as Code. A modal appears with the completed Terraform configuration code.

Now that you have completed this integration, you can that grant permission to your Rancher instance.

users
  • API Groups: management.cattle.io

  • Logged in as the new dedicated user (apono-provisioner-user), create an API keyarrow-up-right and copy the Access Key and Secret Key.
  • Create a secret for the dedicated user to use during the Apono integration setup. Use the values from step 7 to generate the secret.

  • Hostname of the Rancher server

    Port

    Rancher port value

    Certificate Authority (optional)

    (Optional) Ensures that the Kubernetes API server you are communicating with is trusted and authentic

    Leave this field blank to connect the cluster where the Apono connector is deployed.

    Rancher UI URL (optional)

    (Optional) URL of your Rancher UI

    This URL must be reachable from all the hosts that you add.

  • Click Next. The Secret Store section expands.

  • Associate the secret or credentials.

  • Click Next. The Get more with Apono section expands.

  • Define the Get more with Apono settings.

    Setting
    Description

    Credential Rotation

    (Optional) Number of days after which the database credentials must be rotated

    Learn more about the .

    User cleanup after access is revoked (in days)

    (Optional) Defines the number of days after access has been revoked that the user should be deleted

    Learn more about .

    Custom Access Details

    (Optional) Instructions explaining how to access this integration's resources Upon accessing an integration, a message with these instructions will be displayed to end users in the User Portal. The message may include up to 400 characters. To view the message as it appears to end users, click Preview.

    Integration Owner

  • Click Confirm.

  • Click to copy the code.
  • Make any additional edits.

  • Deploy the code in your Terraform.

  • Refer to Integration Config Metadataarrow-up-right for more details about the schema definition.

    Rancher Admin Access

    User account with admin permissions to create a new user account

    Integration Name

    Unique, alphanumeric, user-friendly name used to identify the integration when constructing an access flow

    create a custom rolearrow-up-right
    Create a local userarrow-up-right
    integrate Rancher
    Catalogarrow-up-right
    AWS
    Azure
    GCP
    Kubernetes
    create access flows
    Rancher tile

    Host

    inheritedClusterRoles:
      - cluster-owner
    "access_key": "RANCHER_ACCESS_KEY",
    "secret_key": "RANCHER_SECRET_KEY"

    (Optional) Fallback approver if no resource owner is found Follow these steps to define one or several integration owners:

    1. From the Attribute dropdown menu, select User or Group under the relevant identity provider (IdP) platform.

    2. From the Value dropdown menu, select one or multiple users or groups.

    NOTE: When Resource Owner is defined, an Integration Owner must be defined.

    Resource Owner

    (Optional) Group or role responsible for managing access approvals or rejections for the resource Follow these steps to define one or several resource owners:

    1. Enter a Key name. This value is the name of the tag created in your cloud environment.

    2. From the Attribute dropdown menu, select an attribute under the IdP platform to which the key name is associated. Apono will use the value associated with the key (tag) to identify the resource owner. When you update the membership of the group or role in your IdP platform, this change is also reflected in Apono.

    NOTE: When this setting is defined, an Integration Owner must also be defined.

    Credentials Rotation Policy
    Periodic User Cleanup & Deletion

    Grafana

    Create an integration to manage access to Grafana resources

    Grafana is an open-source observability platform that enables teams to monitor infrastructure, applications, and business metrics through interactive dashboards and alerts.

    With this integration, Apono helps you to manage access to Grafana's data sources based on access flow configurations.


    hashtag
    Prerequisites

    Item
    Description

    hashtag
    Integrate Grafana

    circle-check

    You can also use the steps below to integrate with Apono using Terraform.

    In step 10, instead of clicking Confirm, follow the Are you integrating with Apono using Terraform? guidance.

    Follow these steps to complete the integration:

    1. On the tab, click Grafana. The Connect Integration page appears.

    2. Under Discovery, click Next. The Apono connector section expands.

    3. From the dropdown menu, select a connector. Choosing a connector links Apono to all the services available on the account where the connector is located.

    circle-info

    If the desired connector is not listed, click + Add new connector and follow the instructions for creating a connector (, , , ).

    1. Click Next. The Integration Config section expands.

    2. Define the Integration Config settings.

      Setting
      Description
    circle-info

    If you select the Apono secret manager, enter your Grafana API Key.

    1. Click Next. The Get more with Apono section expands.

    2. Define the Get more with Apono settings.

      Setting
      Description
    chevron-right💡Are you integrating with Apono using Terraform?hashtag

    If you want to integrate with Apono using Terraform, follow these steps instead of clicking Confirm:

    1. At the top of the screen, click View as Code. A modal appears with the completed Terraform configuration code.

    Now that you have completed this integration, you can that grant permission to your Grafana resources.

    Public URL of your Grafana portal

    Example: https://grafana.company.com

  • Click Next. The Secret Store section expands.

  • Associate the secret or credentials.

  • Integration Owner

    (Optional) Fallback approver if no is found Follow these steps to define one or several integration owners:

    1. From the Attribute dropdown menu, select User or Group under the relevant identity provider (IdP) platform.

    2. From the Value dropdown menu, select one or multiple users or groups.

    NOTE: When Resource Owner is defined, an Integration Owner

    Resource Owner

    (Optional) Group or role responsible for managing access approvals or rejections for the resource Follow these steps to define one or several :

    1. Enter a Key name. This value is the name of the tag created in your cloud environment.

    2. From the Attribute dropdown menu, select an attribute under the IdP platform to which the key name is associated. Apono will use the value associated with the key (tag) to identify the resource owner. When you update the membership of the group or role in your IdP platform, this change is also reflected in Apono.

    NOTE: When this setting is defined, an

  • Click Confirm.

  • Click to copy the code.
  • Make any additional edits.

  • Deploy the code in your Terraform.

  • Refer to Integration Config Metadataarrow-up-right for more details about the schema definition.

    Apono connector

    On-prem connection serving as a bridge between a MySQL instance and Apono:

    • AWS

    • Azure

    • GCP

    Learn how to update an existing , , , or connector.

    Grafana Portal URL

    Public URL of your Grafana portal

    Grafana API key

    Randomly generated stringarrow-up-right used as an alternative to a password when accessing Grafana’s HTTP API

    Be sure to copy the key after it has been generated. Create your secret based on your Grafana API key:

    • "api_key": <GRAFANA_API_KEY>

    Integration Name

    Unique, alphanumeric, user-friendly name used to identify this integration when constructing an access flow

    Custom Access Details

    (Optional) Instructions explaining how to access this integration's resources Upon accessing an integration, a message with these instructions will be displayed to end users in the User Portal. The message may include up to 400 characters. To view the message as it appears to end users, click Preview.

    Catalogarrow-up-right
    AWS
    Azure
    GCP
    Kubernetes
    create access flows
    Grafana tile

    Grafana Portal URL

    must be defined.
    Integration Owner
    must also be defined.
    Kubernetes
    AWS
    Azure
    GCP
    Kubernetes
    resource owner
    resource owners

    GitHub

    Create an integration to manage access to GitHub repositories and roles

    GitHub is a code hosting and collaboration platform that enables developers to manage project versions, track changes, and collaborate on software development.

    Through this integration, Apono helps you securely manage access to your GitHub repositories, organizational, team and owner roles.


    hashtag
    Prerequisites

    Item
    Description

    hashtag
    Integrate Github

    circle-check

    You can also use the steps below to integrate with Apono using Terraform.

    In step 11, instead of clicking Confirm, follow the Are you integrating with Apono using Terraform? guidance.

    Follow these steps to complete the integration:

    1. On the tab, click GitHub. The Connect Integration page appears.

    2. Under Discovery, select one or multiple resource types.

    circle-info

    Apono automatically discovers and syncs all the instances in the environment. After syncing, you can manage access flows to these resources.

    1. Click Next. The Apono connector section expands.

    2. From the dropdown menu, select a connector. Choosing a connector links Apono to all the services available on the account where the connector is located.

    circle-check

    If the desired connector is not listed, click + Add new connector and follow the instructions for creating a connector (, , , ).

    1. Click Next. The Integration Config page appears.

    2. Define the Integration Config settings.

      Setting
      Description
    chevron-right💡Are you integrating with Apono using Terraform?hashtag

    If you want to integrate with Apono using Terraform, follow these steps instead of clicking Confirm:

    1. At the top of the screen, click View as Code. A modal appears with the completed Terraform configuration code.

    Now that you have completed this integration, you can that grant permission to your GitHub instance.

    GitHub organization name

  • Click Next. The Secret Store section expands.

  • Associate the secret or credentials.

  • Click Next. The Get more with Apono section expands.

  • Define the Get more with Apono settings.

    Setting
    Description

    Credential Rotation

    (Optional) Number of days after which the database credentials must be rotated Learn more about the .

    User cleanup after access is revoked (in days)

    (Optional) Defines the number of days after access has been revoked that the user should be deleted

    Learn more about .

    Custom Access Details

    (Optional) Instructions explaining how to access this integration's resources Upon accessing an integration, a message with these instructions will be displayed to end users in the User Portal. The message may include up to 400 characters. To view the message as it appears to end users, click Preview.

    Integration Owner

  • Click Confirm.

  • Click to copy the code.
  • Make any additional edits.

  • Deploy the code in your Terraform.

  • Refer to Integration Config Metadataarrow-up-right for more details about the schema definition.

    Apono Connector

    On-prem connection serving as a bridge between a GitHub database instance and Apono:

    • AWS

    • Azure

    • GCP

    Minimum Required Version: 1.3.2

    GitHub Organization Account

    GitHub organization account that possesses admin repository and user permissions

    Company Email of User

    (Non-Enterprise subscription) Company email associated with the user's GitHub profile

    For non-Enterprise organizations, set the user email to public in GitHub.

    If the email is private, Apono will not be able to locate the user.

    Synced IdP

    (Enterprise subscription) Identity provider (IdP) connected with your GitHub account

    For Enterprise organizations, sync GitHub with your IdParrow-up-right.

    GitHub Token

    GitHub authentication tokenarrow-up-right Under Select scopes, click the checkboxes next to the following parent scopes. By selecting each parent scope, all the children scopes will also be selected:

    • repo

    • admin:org

    • user

    Apono Secret

    Value generated in one of the following environments

    Create a secret for the GitHub instance. For the key, use token. For the value, use the generated GitHub token. "token": "<GITHUB_ACCESS_TOKEN>"

    Apono does not store credentials. The Apono Connector uses the secret to communicate with services in your environment and separate the Apono web app from the environment for maximal security.

    Integration Name

    Unique, alphanumeric, user-friendly name used to identify this integration when constructing an access flow

    Catalogarrow-up-right
    AWS
    Azure
    GCP
    Kubernetes
    create access flows

    Organization

    (Optional) Fallback approver if no resource owner is found Follow these steps to define one or several integration owners:

    1. From the Attribute dropdown menu, select User or Group under the relevant identity provider (IdP) platform.

    2. From the Value dropdown menu, select one or multiple users or groups.

    NOTE: When Resource Owner is defined, an Integration Owner must be defined.

    Resource Owner

    (Optional) Group or role responsible for managing access approvals or rejections for the resource Follow these steps to define one or several resource owners:

    1. Enter a Key name. This value is the name of the tag created in your cloud environment.

    2. From the Attribute dropdown menu, select an attribute under the IdP platform to which the key name is associated. Apono will use the value associated with the key (tag) to identify the resource owner. When you update the membership of the group or role in your IdP platform, this change is also reflected in Apono.

    NOTE: When this setting is defined, an Integration Owner must also be defined.

    Kubernetes
    Credentials Rotation Policy
    Periodic User Cleanup & Deletion

    ArgoCD

    Create an integration to manage access to ArgoCD resources

    ArgoCD is a Kubernetes-native continuous delivery (CD) tool that implements GitOps practices by using Git repositories as the single source of truth for application state.

    Through this integration, Apono helps you discover ArgoCD roles and resources and securely manage just-in-time (JIT) access to them.


    hashtag
    Prerequisites

    Item
    Description

    hashtag
    Set up Apono in ArgoCD

    The steps to set up Apono in ArgoCD depend on where the Apono Connector is running and what permissions it has. The connector’s location determines whether you need to create a new service account, bind roles, or provide a token secret.

    Use the tabs below to follow the instructions that match your environment:

    • Same cluster (cluster-admin): The connector already has full permissions.

    • Same cluster (limited permissions): Grant the connector’s existing service account the minimal Role/RoleBinding it needs.

    • Different cluster: Create a dedicated service account in the ArgoCD cluster and provide its token to Apono.

    Follow these steps to set up Apono access in ArgoCD:

    1. Open the argocd-cm ConfigMap in your default editor.

    1. Add email to both the OIDC scopes: requestedScopes and groupsClaim

    You can now Integrate ArgoCD.


    hashtag
    Integrate ArgoCD

    circle-check

    You can also use the steps below to integrate with Apono using Terraform.

    In step 11, instead of clicking Confirm, follow the Are you integrating with Apono using Terraform? guidance.

    Follow these steps to complete the integration:

    1. On the tab, click ArgoCD. The Connect Integration page appears.

    2. Under Discovery, click one or more resource types to sync with Apono.

    circle-info

    Apono automatically discovers and syncs all the instances in the environment. After syncing, you can manage Access Flows to these resources.

    1. Click Next. The Apono connector section expands.

    2. From the dropdown menu, select a connector. Choosing a connector links Apono to all the services available on the account where the connector is located.

    circle-check

    If the desired connector is not listed, click + Add new connector and follow the instructions for creating a connector (, , , ).

    1. Click Next. The Integration Config section expands.

    2. Define the Integration Config settings.

      Setting
      Description
    circle-info

    This step is not necessary when the Apono connector is in the same cluster as ArgoCD.

    If you select the Apono secret manager, enter the following value:

    • Kubernetes Service Account Token: Enter the service account token value from step 7 of the on the Different cluster tab.

    1. Click Next. The Get more with Apono section expands.

    2. Define the Get more with Apono settings.

      Setting
      Description
    chevron-right💡Are you integrating with Apono using Terraform?hashtag

    If you want to integrate with Apono using Terraform, follow these steps instead of clicking Confirm:

    1. At the top of the screen, click View as Code. A modal appears with the completed Terraform configuration code.

    Now that you have completed this integration, you can that grant permission to your ArgoCD resources.

    .
    circle-info

    This allows ArgoCD to map users by email, in addition to groups.

    The following example is an edited ConfigMap.

    1. Define your ArgoCD roles.

    circle-info

    Add any global roles in the argocd-rbac-cm configmap's policy.csvarrow-up-right for cluster-wide access. Add any project rolesarrow-up-right in the spec.roles of specific AppProject custom resource definitions (CRDs).

    Apono will sync ArgoCD roles (both project and global) from the argocd-rbac-cm ConfigMap. Apono policies can then be applied to grant or revoke Just-In-Time (JIT) access to ArgoCD resources.

    1. Restart the ArgoCD API server for the changes to take effect.

    Follow these steps to set up Apono access in ArgoCD:

    1. Copy and save the following snippet as apono-argocd-sa.yaml.

    circle-info

    This manifest does two things:

    • Grants the service account a role with permission to update the argocd-rbac-cm ConfigMap (global roles) and AppProject custom resource definitions (project roles).

    • Binds that role to the service account so Apono can discover and manage ArgoCD roles.

    chevron-rightapono-argocd-sa.yamlhashtag
    1. At the shell prompt, apply the file to your ArgoCD cluster.

    1. Open the argocd-cm ConfigMap in your default editor.

    1. Add email to both the OIDC scopes: requestedScopes and groupsClaim.

    circle-info

    This allows ArgoCD to map users by email, in addition to groups.

    The following example is an edited ConfigMap.

    1. Define your ArgoCD roles.

    circle-info

    Add any global roles in the argocd-rbac-cm configmap's for cluster-wide access. Add any in the spec.roles of specific AppProject custom resource definitions (CRDs).

    Apono will sync ArgoCD roles (both project and global) from the argocd-rbac-cm ConfigMap. Apono policies can then be applied to grant or revoke Just-In-Time (JIT) access to ArgoCD resources.

    1. Restart the ArgoCD API server for the changes to take effect.

    Follow these steps to set up Apono access in ArgoCD:

    1. Copy and save the following snippet as apono-argocd-sa.yaml.

    circle-info

    This manifest does three things:

    • Creates the apono-argocd-sa service account in the argocd namespace.

    • Grants the service account a role with permission to update the argocd-rbac-cm ConfigMap (global roles) and AppProject custom resource definitions (project roles).

    • Binds that role to the service account so Apono can discover and manage ArgoCD roles.

    chevron-rightapono-argocd-sa.yamlhashtag
    1. At the shell prompt, apply the file to your ArgoCD cluster.

    1. Open the argocd-cm ConfigMap in your default editor.

    1. Add email to both the OIDC scopes: requestedScopes and groupsClaim.

    circle-info

    This allows ArgoCD to map users by email, in addition to groups.

    The following example is an edited ConfigMap.

    1. Define your ArgoCD roles.

    circle-info

    Add any global roles in the argocd-rbac-cm configmap's for cluster-wide access. Add any in the spec.roles of specific AppProject custom resource definitions (CRDs).

    Apono will sync ArgoCD roles (both project and global) from the argocd-rbac-cm ConfigMap. Apono policies can then be applied to grant or revoke Just-In-Time (JIT) access to ArgoCD resources.

    1. Restart the ArgoCD API server for the changes to take effect.

    1. Generate the service account token.

    circle-exclamation

    Make sure you are using a Kubernetes version ≥1.24.

    On earlier versions, you may need to retrieve the token from the service account’s Secret.

    1. with the token from step 7. Use the following key-value pair structure when generating the secret. Be sure to replace #K8_SERVICE_TOKEN with the actual value.

    circle-check

    You can also input the token directly into the Apono UI during the integration process.

    Public URL of your ArgoCD instance

    Example: https://argocd.my-domain.com

    ArgoCD Namespace

    Kubernetes namespace where ArgoCD is installed Default: argocd

    Kubernetes Server URL

    (Optional) API server endpoint of the Kubernetes cluster hosting ArgoCD

    Provide the URL only when connecting to an external Kubernetes API server.

    Leave this field blank when Apono’s connector is running in the same cluster.

    Kubernetes Certificate Authority

    (Optional) Certificate Authority (CA) bundle used to validate the Kubernetes API server certificate

    Provide the CA file if connecting to an external cluster with a custom CA.

    Leave this field blank when Apono's connector is running in the same cluster.

  • Click Next. The Secret Store section expands.

  • (Different cluster) Associate the secret or credentials.

  • User cleanup after access is revoked (in days)

    (Optional) Defines the number of days after access has been revoked that the user should be deleted

    Learn more about .

    Custom Access Details

    (Optional) Instructions explaining how to access this integration's resources

    Upon accessing an integration, a message with these instructions will be displayed to end users in the User Portal. The message may include up to 400 characters.

    To view the message as it appears to end users, click Preview.

    Integration Owner

    (Optional) Fallback approver if no is found Follow these steps to define one or several integration owners:

    1. From the Attribute dropdown menu, select User or Group under the relevant identity provider (IdP) platform.

    2. From the Value dropdown menu, select one or multiple users or groups.

    NOTE: When Resource Owner is defined, an Integration Owner

    Resource Owner

    (Optional) Group or role responsible for managing access approvals or rejections for the resource Follow these steps to define one or several :

    1. Enter a Key name. This value is the name of the tag created in your cloud environment.

    2. From the Attribute dropdown menu, select an attribute under the IdP platform to which the key name is associated. Apono will use the value associated with the key (tag) to identify the resource owner. When you update the membership of the group or role in your IdP platform, this change is also reflected in Apono.

    NOTE: When this setting is defined, an

  • Click Confirm.

  • Click to copy the code.
  • Make any additional edits.

  • Deploy the code in your Terraform.

  • Refer to Integration Config Metadataarrow-up-right for more details about the schema definition.

    Apono connector

    On-prem connection serving as a bridge between an ArgoCD instance and Apono:

    • AWS

    • Azure

    • GCP

    Kubernetes Command Line Tool (kubectl)

    Command-line toolarrow-up-right used for communicating with a Kubernetes cluster's control plane

    ArgoCD

    Instance installed and configured with your Identity Provider (IdP) for authentication

    Integration Name

    Unique, alphanumeric, user-friendly name used to identify this integration when constructing an access flow

    Credential Rotation

    (Optional) Number of days after which the database credentials must be rotated

    Learn more about the Credentials Rotation Policy.

    Catalogarrow-up-right
    AWS
    Azure
    GCP
    Kubernetes
    previous section
    create access flows
    kubectl edit configmap argocd-cm -n argocd

    ArgoCD UI URL

    Example: argocd-cm ConfigMap
    oidc.config: |
      name: Authentik
      issuer: https://my-issuer.com
      clientID: myclientid
      clientSecret: myclientsecret
      requestedScopes:
        - openid
        - profile
        - email
        - groups
        - offline_access
      insecureSkipVerify: true
    
    # Example in argocd-rbac-cm
    policy.csv: |
      p, role:readonly, applications, get, */*, allow
      p, role:deployer, applications, sync, */*, allow
    # Example in an AppProject CRD
    roles:
      - name: deployer
        description: Can sync apps in this project
        policies:
          - p, proj:team-a:deployer, applications, sync, team-a/*, allow
    kubectl rollout restart deployment argocd-server -n argocd
    must be defined.
    Integration Owner
    must also be defined.
    requestedIDTokenClaims:
    groups:
    essential: true
    groupsClaim: [groups, email]
    policy.csvarrow-up-right
    project rolesarrow-up-right
    policy.csvarrow-up-right
    project rolesarrow-up-right
    Create a secret
    Kubernetes
    Periodic User Cleanup & Deletion
    resource owner
    resource owners
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: apono-argocd-editor
      namespace: argocd
    rules:
      - apiGroups: [""]
        resources: ["configmaps"]
        resourceNames: ["argocd-rbac-cm"]
        verbs: ["get", "list", "watch", "update", "patch"]
      - apiGroups: ["argoproj.io"]
        resources: ["appprojects"]
        verbs: ["get", "list", "watch", "update", "patch"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: apono-argocd-editor-binding
      namespace: argocd
    subjects:
      - kind: ServiceAccount
        name: <existing-connector-service-account-name>
        namespace: argocd
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: apono-argocd-editor
    kubectl apply -f apono-argocd-sa.yaml
    kubectl edit configmap argocd-cm -n argocd
    Example: argocd-cm ConfigMap
    oidc.config: |
      name: Authentik
      issuer: https://my-issuer.com
      clientID: myclientid
      clientSecret: myclientsecret
      requestedScopes:
        - openid
        - profile
        - email
        - groups
        - offline_access
      insecureSkipVerify: true
      requestedIDTokenClaims:
        groups:
          essential: true
      groupsClaim: [groups, email]
    
    # Example in argocd-rbac-cm
    policy.csv: |
      p, role:readonly, applications, get, */*, allow
      p, role:deployer, applications, sync, */*, allow
    # Example in an AppProject CRD
    roles:
      - name: deployer
        description: Can sync apps in this project
        policies:
          - p, proj:team-a:deployer, applications, sync, team-a/*, allow
    kubectl rollout restart deployment argocd-server -n argocd
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: apono-argocd-sa
      namespace: argocd
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: apono-argocd-editor
      namespace: argocd
    rules:
      - apiGroups: [""]
        resources: ["configmaps"]
        resourceNames: ["argocd-rbac-cm"]
        verbs: ["get", "list", "watch", "update", "patch"]
      - apiGroups: ["argoproj.io"]
        resources: ["appprojects"]
        verbs: ["get", "list", "watch", "update", "patch"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: apono-argocd-editor-binding
      namespace: argocd
    subjects:
      - kind: ServiceAccount
        name: apono-argocd-sa
        namespace: argocd
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: apono-argocd-editor
    kubectl apply -f apono-argocd-sa.yaml
    kubectl edit configmap argocd-cm -n argocd
    Example: argocd-cm ConfigMap
    oidc.config: |
      name: Authentik
      issuer: https://my-issuer.com
      clientID: myclientid
      clientSecret: myclientsecret
      requestedScopes:
        - openid
        - profile
        - email
        - groups
        - offline_access
      insecureSkipVerify: true
      requestedIDTokenClaims:
        groups:
          essential: true
      groupsClaim: [groups, email]
    
    # Example in argocd-rbac-cm
    policy.csv: |
      p, role:readonly, applications, get, */*, allow
      p, role:deployer, applications, sync, */*, allow
    # Example in an AppProject CRD
    roles:
      - name: deployer
        description: Can sync apps in this project
        policies:
          - p, proj:team-a:deployer, applications, sync, team-a/*, allow
    kubectl rollout restart deployment argocd-server -n argocd
    kubectl -n argocd create token apono-argocd-sa
    "kubernetes_sa_token":"#K8_SERVICE_TOKEN"