<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.kuberocketci.io/blog</id>
    <title>KubeRocketCI Blog</title>
    <updated>2024-12-03T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.kuberocketci.io/blog"/>
    <subtitle>KubeRocketCI Blog</subtitle>
    <icon>https://docs.kuberocketci.io/img/favicon.ico</icon>
    <rights>Copyright © 2026 KubeRocketCI.</rights>
    <entry>
        <title type="html"><![CDATA[Integrating OIDC Authentication with Microsoft Entra in AWS EKS]]></title>
        <id>https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks</id>
        <link href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks"/>
        <updated>2024-12-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Learn how to implement Single Sign-On (SSO) using OpenID Connect (OIDC) and Microsoft Entra to enhance security and streamline authentication processes in Amazon Elastic Kubernetes Service (AWS EKS).]]></summary>
        <content type="html"><![CDATA[<p>In modern cloud environments, secure and efficient access management is essential, especially for platforms like Amazon EKS. This blog will guide you through integrating OpenID Connect (OIDC) authentication using Microsoft Entra, making it easier to manage access to your EKS clusters and KubeRocketCI Portal. By implementing this approach, you can simplify user authentication while ensuring strong security controls. Whether you're improving compliance or streamlining access for your team, this integration is a practical solution to enhance your cloud-native workflows.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="prerequisites">Prerequisites<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h2>
<p>Before you begin, ensure you have the following:</p>
<ul>
<li class="">Access to the <a href="https://entra.microsoft.com/?feature.msaljs=true#home" target="_blank" rel="noopener noreferrer" class="">Microsoft Entra Admin Center</a> with administrative privileges.</li>
<li class="">A running <a href="https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html" target="_blank" rel="noopener noreferrer" class="">AWS EKS</a> cluster with the necessary permissions for access and management.</li>
<li class="">The <a href="https://github.com/int128/kubelogin" target="_blank" rel="noopener noreferrer" class="">kubelogin</a> plugin installed for authenticating to the EKS cluster using OIDC.</li>
<li class="">The <a href="https://kubernetes.io/docs/tasks/tools/#kubectl" target="_blank" rel="noopener noreferrer" class="">kubectl</a> CLI tool installed.</li>
<li class="">The <a href="https://aws.amazon.com/cli/" target="_blank" rel="noopener noreferrer" class="">aws cli</a> tool installed.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="understanding-sso-oidc-and-microsoft-entra">Understanding SSO, OIDC, and Microsoft Entra<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#understanding-sso-oidc-and-microsoft-entra" class="hash-link" aria-label="Direct link to Understanding SSO, OIDC, and Microsoft Entra" title="Direct link to Understanding SSO, OIDC, and Microsoft Entra" translate="no">​</a></h2>
<p>In the context of enhancing digital security and user experience, we prioritize the integration of three key elements: Single Sign-On (SSO), OpenID Connect (OIDC), and Microsoft Entra. Here’s how they connect:</p>
<ul>
<li class="">
<p><strong>Single Sign-On (SSO)</strong> serves as the foundation, enabling users to access multiple applications with one set of login credentials, significantly simplifying the authentication process.</p>
</li>
<li class="">
<p><strong>OpenID Connect (OIDC)</strong> builds on the SSO framework by providing an authentication layer, which uses straightforward identity verification to ensure secure and seamless access across services.</p>
</li>
<li class="">
<p><strong>Microsoft Entra</strong> (formerly known as <strong>Azure Active Directory</strong>) is Microsoft's comprehensive identity and access management solution. It supports the implementation of both Single Sign-On (SSO) and OpenID Connect (OIDC), enabling organizations to securely manage user identities and enforce access controls. With its reliable set of tools, Microsoft Entra simplifies authentication, enhances security, and ensures seamless access to applications and services, making it an essential platform for modern identity management.</p>
</li>
</ul>
<p>Together, these technologies streamline the login process, reinforce security, and enhance the user experience by allowing secure, seamless navigation across our digital ecosystem.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="microsoft-entra-overview">Microsoft Entra Overview<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#microsoft-entra-overview" class="hash-link" aria-label="Direct link to Microsoft Entra Overview" title="Direct link to Microsoft Entra Overview" translate="no">​</a></h3>
<p>Microsoft Entra, formerly known as Azure Active Directory (Azure AD), is a modern identity and access management solution designed for secure access to applications and services. It provides features like Single Sign-On (SSO), identity federation, and seamless integration with on-premises directories such as LDAP and Active Directory. Microsoft Entra supports industry-standard protocols, including OpenID Connect (OIDC), OAuth 2.0, and Security Assertion Markup Language (SAML) 2.0, making it a versatile solution for managing user identities. By leveraging Microsoft Entra, organizations can enhance security, simplify user access, and avoid the complexities of building identity management features from scratch. For more details, see the <a href="https://learn.microsoft.com/en-gb/entra/identity/" target="_blank" rel="noopener noreferrer" class="">Microsoft Entra official documentation</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-a-new-microsoft-entra-tenant">Create a new Microsoft Entra Tenant<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#create-a-new-microsoft-entra-tenant" class="hash-link" aria-label="Direct link to Create a new Microsoft Entra Tenant" title="Direct link to Create a new Microsoft Entra Tenant" translate="no">​</a></h2>
<p>To get started with Microsoft Entra, you need to create a new tenant in the Microsoft Entra Admin Center. Follow these steps:</p>
<ol>
<li class="">
<p>Log in to the <a href="https://entra.microsoft.com/?feature.msaljs=true#home" target="_blank" rel="noopener noreferrer" class="">Microsoft Entra Admin Center</a> using your Microsoft account.</p>
<p><img decoding="async" loading="lazy" alt="Microsoft Entra Admin Center" src="https://docs.kuberocketci.io/assets/images/microsoft-entra-admin-center-8a597425e8e1e33a8867e316ee37be41.png" width="3364" height="1648" class="img_ev3q"></p>
</li>
<li class="">
<p>In the left sidebar menu, select <strong>Overview</strong> section and then navigate to <strong>Manage tenants</strong> tab.</p>
<p><img decoding="async" loading="lazy" alt="Manage Tenants" src="https://docs.kuberocketci.io/assets/images/manage-tenants-c260f4975163bf0c5cb83eeb99217660.png" width="3364" height="1648" class="img_ev3q"></p>
</li>
<li class="">
<p>Click on <strong>Create</strong> button to create a new tenant.</p>
<p><img decoding="async" loading="lazy" alt="Create Tenant" src="https://docs.kuberocketci.io/assets/images/create-tenant-ea455de07150c662e89cc2896be821ff.png" width="3364" height="1648" class="img_ev3q"></p>
</li>
<li class="">
<p>Select the configuration type <strong>Workforce</strong>.</p>
<p><img decoding="async" loading="lazy" alt="Configuration Type" src="https://docs.kuberocketci.io/assets/images/configuration-type-31ef85a58475500f22b83a05c93b4276.png" width="3364" height="1648" class="img_ev3q"></p>
</li>
<li class="">
<p>Fill in the fields for <strong>Tenant Name</strong>, <strong>Domain Name</strong>, and <strong>Location</strong>.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The <strong>Tenant Name</strong> and <strong>Domain Name</strong> <code>kuberocketci</code> are used as a demonstration examples. In your case, it is recommended to choose names that align with your organization's specific needs and naming conventions.</p></div></div>
<p><img decoding="async" loading="lazy" alt="Tenant Details" src="https://docs.kuberocketci.io/assets/images/tenant-details-6753dbbdbe872963be3e49632442654b.png" width="3364" height="1648" class="img_ev3q"></p>
</li>
<li class="">
<p>The new tenant will be created, and you can start configuring it for OIDC integration. Ensure you have switched to the new tenant.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="creating-and-configuring-oidc-application-in-microsoft-entra">Creating and Configuring OIDC Application in Microsoft Entra<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#creating-and-configuring-oidc-application-in-microsoft-entra" class="hash-link" aria-label="Direct link to Creating and Configuring OIDC Application in Microsoft Entra" title="Direct link to Creating and Configuring OIDC Application in Microsoft Entra" translate="no">​</a></h2>
<p>After creating the tenant, you need to set up an OIDC Application in Microsoft Entra. Here's how you can do it:</p>
<ol>
<li class="">
<p>In the Microsoft Entra Admin Center, in the left sidebar menu, select <strong>Applications</strong> and then click on <strong>App registrations</strong>.</p>
<p><img decoding="async" loading="lazy" alt="App Registrations" src="https://docs.kuberocketci.io/assets/images/app-registrations-c04b119572cc459069182f6aeab95995.png" width="3364" height="1648" class="img_ev3q"></p>
</li>
<li class="">
<p>Click on the <strong>New registration</strong> button to create a new application.</p>
<p><img decoding="async" loading="lazy" alt="New Registration" src="https://docs.kuberocketci.io/assets/images/new-registration-63846c96d5ff493abbc9903c638fb6cf.png" width="3364" height="1648" class="img_ev3q"></p>
</li>
<li class="">
<p>Fill in the details for the application, such as <strong>Name</strong>, <strong>Supported account types</strong>, and <strong>Redirect URI</strong> (<code>http://localhost:8000/</code>).</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The <strong>Name</strong> <code>kuberocketci</code> is used as a demonstration example. In your case, it is recommended to choose a name that aligns with your application's specific needs and naming conventions (e.g. your AWS EKS cluster name).</p></div></div>
<p><img decoding="async" loading="lazy" alt="Application Details" src="https://docs.kuberocketci.io/assets/images/application-details-b0691226247a0b3f611936922040e4b6.png" width="3364" height="1648" class="img_ev3q"></p>
</li>
<li class="">
<p>In the created application, navigate to the <strong>Authentication</strong> section from the left sidebar menu. In the <strong>Implicit grant and hybrid flows</strong> section, select <strong>ID tokens</strong> for the token type. In the <strong>Allow public client flows</strong> section, set the value to <strong>No</strong>.</p>
<p><img decoding="async" loading="lazy" alt="Authentication Settings" src="https://docs.kuberocketci.io/assets/images/authentication-settings-b3ad780dbc75b519a96e4138242666dd.png" width="3364" height="1647" class="img_ev3q"></p>
</li>
<li class="">
<p>Navigate to the <strong>Certificates &amp; secrets</strong> section from the left sidebar menu. In the <strong>Client secrets</strong> tab, click on the <strong>New client secret</strong> button to create a new secret.</p>
<p><img decoding="async" loading="lazy" alt="Client Secret" src="https://docs.kuberocketci.io/assets/images/client-secret-2adb6894937ed5c8e84c077423b51fbb.png" width="3364" height="1647" class="img_ev3q"></p>
</li>
<li class="">
<p>Copy the generated client secret value and store it securely.</p>
<p><img decoding="async" loading="lazy" alt="Client Secret Value" src="https://docs.kuberocketci.io/assets/images/client-secret-value-26326b1338acafd94f8e5a647f6407f4.png" width="3364" height="1647" class="img_ev3q"></p>
</li>
<li class="">
<p>Navigate to the <strong>Token configuration</strong> section and click on <strong>Add group claim</strong> button. Choose the group type as <strong>Security Groups</strong> and for the ID token type, select <strong>Group ID</strong>.</p>
<p><img decoding="async" loading="lazy" alt="Token Configuration" src="https://docs.kuberocketci.io/assets/images/token-configuration-0fa9c3f0e471ac1b1ffcf11f69bee22c.png" width="3364" height="1647" class="img_ev3q"></p>
</li>
<li class="">
<p>(Optional) Additionally, add an optional <strong>upn</strong> claim in the <strong>Token configuration</strong> section.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>This step is optional and should only be performed if external users (i.e., users with <strong>User type: Guest</strong>) will be added to the Microsoft Entra Tenant and require access to the Application.</p></div></div>
<p><img decoding="async" loading="lazy" alt="upn Claim" src="https://docs.kuberocketci.io/assets/images/upn-claim-0ae2415ae51d8eab1bfce10492cbf021.png" width="3362" height="1660" class="img_ev3q"></p>
</li>
<li class="">
<p>(Optional) After adding the <strong>upn</strong> claim, click on the three dots next to it, select <strong>Edit</strong>, and turn on the <strong>Externally authenticated</strong> toggle to <strong>Yes</strong> value.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>This step is optional and should only be performed if external users (i.e., users with <strong>User type: Guest</strong>) will be added to the Microsoft Entra Tenant and require access to the Application.</p></div></div>
<p><img decoding="async" loading="lazy" alt="Externally Authenticated" src="https://docs.kuberocketci.io/assets/images/externally-authenticated-1bfd6efbb519c1633eb00d846fd99dc6.png" width="3362" height="1660" class="img_ev3q"></p>
</li>
<li class="">
<p>Navigate to the <strong>API permissions</strong> section. Ensure that the <strong>User.Read</strong> permission is added under the <strong>Microsoft Graph</strong> API. If not, click on the <strong>Add a permission</strong> button, select <strong>Microsoft Graph</strong>, and add the <strong>User.Read</strong> permission. After adding the permission, click on the <strong>Grant admin consent for 'Tenant name'</strong> button to grant the required permissions.</p>
<p><img decoding="async" loading="lazy" alt="API Permissions" src="https://docs.kuberocketci.io/assets/images/api-permissions-ec305b38ce662e114e3e614ceabca58a.png" width="3364" height="1647" class="img_ev3q"></p>
</li>
<li class="">
<p>(Optional) Additionally, for <strong>Microsoft Graph</strong> API, add the <strong>OpenId</strong> permissions, such as <strong>openid</strong>, <strong>email</strong>, and <strong>profile</strong>.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>This step is optional and should only be performed if external users (i.e., users with <strong>User type: Guest</strong>) will be added to the Microsoft Entra Tenant and require access to the Application.</p></div></div>
<p><img decoding="async" loading="lazy" alt="OpenID Permissions" src="https://docs.kuberocketci.io/assets/images/openid-permissions-f130d9bd007be3509b7f33b48e6e488d.png" width="3362" height="1660" class="img_ev3q"></p>
</li>
<li class="">
<p>The OIDC Application in Microsoft Entra is now configured and ready for integration with AWS EKS.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="creating-users-and-groups-in-microsoft-entra">Creating Users and Groups in Microsoft Entra<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#creating-users-and-groups-in-microsoft-entra" class="hash-link" aria-label="Direct link to Creating Users and Groups in Microsoft Entra" title="Direct link to Creating Users and Groups in Microsoft Entra" translate="no">​</a></h2>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>Only users who are part of the groups configured in the Microsoft Entra Admin Center will be able to authenticate to the AWS EKS cluster using OIDC.</p></div></div>
<p>To create users and groups in Microsoft Entra, follow these steps:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="creating-a-group">Creating a Group<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#creating-a-group" class="hash-link" aria-label="Direct link to Creating a Group" title="Direct link to Creating a Group" translate="no">​</a></h3>
<ol>
<li class="">
<p>In the Microsoft Entra Admin Center, in the left sidebar menu, select <strong>Groups</strong> and then <strong>All groups</strong>. Click on <strong>New group</strong> button to create a new group(s) for users who will have access to the AWS EKS cluster.</p>
<p><img decoding="async" loading="lazy" alt="New Group" src="https://docs.kuberocketci.io/assets/images/new-group-057769fdc60e88276e453cfe1d13520a.png" width="3364" height="1647" class="img_ev3q"></p>
</li>
<li class="">
<p>Fill in the details for the group, such as <strong>Group type</strong> and <strong>Group name</strong>. Click on the <strong>Create</strong> button to create the group.</p>
<p><img decoding="async" loading="lazy" alt="Group Details" src="https://docs.kuberocketci.io/assets/images/group-details-f699a47eca753f3e4f7fed9bd27ac86d.png" width="3364" height="1647" class="img_ev3q"></p>
</li>
<li class="">
<p>The group will be created, and you can start adding users to it.</p>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="adding-users-to-the-group">Adding Users to the Group<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#adding-users-to-the-group" class="hash-link" aria-label="Direct link to Adding Users to the Group" title="Direct link to Adding Users to the Group" translate="no">​</a></h3>
<ol>
<li class="">
<p>In the Microsoft Entra Admin Center, in the left sidebar menu, select <strong>Users</strong> and then click on <strong>All users</strong>. In the <strong>New user</strong> tab, click on the <strong>Create new user</strong> button to create a new user.</p>
<p><img decoding="async" loading="lazy" alt="New User" src="https://docs.kuberocketci.io/assets/images/new-user-8d00fa515a4025b42a98f013a37d9a8f.png" width="3364" height="1648" class="img_ev3q"></p>
</li>
<li class="">
<p>Fill in the details for the user, such as <strong>User principal name</strong>, <strong>Mail nickname</strong>, <strong>Display name</strong>, and temporary password. In the <strong>Properties</strong> tab you can set the <strong>First name</strong>, <strong>Last name</strong>, and other details.</p>
<p><img decoding="async" loading="lazy" alt="User Details" src="https://docs.kuberocketci.io/assets/images/user-details-b5f580cd6fe8db3a519fd95a7d42fdc5.png" width="3364" height="1647" class="img_ev3q"></p>
</li>
<li class="">
<p>In the <strong>Assignment</strong> tab, click on the <strong>Add group</strong> button. In the <strong>Select Group</strong> window, choose the group(s) you created earlier (e.g., <code>oidc-cluster-admins</code>) and click on the <strong>Select</strong> button.</p>
<p><img decoding="async" loading="lazy" alt="Add Group" src="https://docs.kuberocketci.io/assets/images/add-group-ad90704de9b5399c8ce85605ca530a7d.png" width="3364" height="1647" class="img_ev3q"></p>
</li>
<li class="">
<p>Click on the <strong>Review + create</strong> button to create the user. The user will be created and added to the group(s) you selected.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuring-microsoft-entra-as-an-identity-provider-in-aws-eks">Configuring Microsoft Entra as an Identity Provider in AWS EKS<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#configuring-microsoft-entra-as-an-identity-provider-in-aws-eks" class="hash-link" aria-label="Direct link to Configuring Microsoft Entra as an Identity Provider in AWS EKS" title="Direct link to Configuring Microsoft Entra as an Identity Provider in AWS EKS" translate="no">​</a></h2>
<p>There are two methods to configure Microsoft Entra as an Identity Provider in AWS EKS: through the AWS Management Console and using Terraform.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The Application data, such as <strong>Directory (tenant) ID</strong>, <strong>Application (client) ID</strong>, and <strong>Issuer URL</strong>, can be found in the <strong>Overview</strong> section of the OIDC Application in the Microsoft Entra Admin Center.
<img decoding="async" loading="lazy" alt="Application Data" src="https://docs.kuberocketci.io/assets/images/application-data-79ef843fc1e677bbbc0597ce1b9c2f50.png" width="1306" height="664" class="img_ev3q"></p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="method-1-using-the-aws-management-console">Method 1: Using the AWS Management Console<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#method-1-using-the-aws-management-console" class="hash-link" aria-label="Direct link to Method 1: Using the AWS Management Console" title="Direct link to Method 1: Using the AWS Management Console" translate="no">​</a></h3>
<ol>
<li class="">
<p>Log in to the <a href="https://aws.amazon.com/console/" target="_blank" rel="noopener noreferrer" class="">AWS Management Console</a> and navigate to the <a href="https://console.aws.amazon.com/eks/" target="_blank" rel="noopener noreferrer" class="">Amazon EKS console</a>. Select the EKS cluster you want to configure and click on the <strong>Access</strong> tab.</p>
<p><img decoding="async" loading="lazy" alt="EKS Cluster Access Tab" src="https://docs.kuberocketci.io/assets/images/eks-cluster-access-tab-707d67886863028877f32b1630411b4e.png" width="3356" height="1180" class="img_ev3q"></p>
</li>
<li class="">
<p>In the <strong>OIDC identity providers</strong> section, click on the <strong>Associate identity provider</strong> button.</p>
<p><img decoding="async" loading="lazy" alt="Associate Identity Provider" src="https://docs.kuberocketci.io/assets/images/associate-identity-provider-8d81c9b345b76eb0bf49961342edde54.png" width="3356" height="1642" class="img_ev3q"></p>
</li>
<li class="">
<p>Fill in the following details:</p>
<ul>
<li class="">
<p><strong>Name</strong>: <code>Entra</code></p>
</li>
<li class="">
<p><strong>Issuer URL</strong>: <code>https://login.microsoftonline.com/&lt;Tenant-ID&gt;/</code>, where <code>&lt;Tenant-ID&gt;</code> is the <strong>Directory</strong> (tenant) <strong>ID</strong>. Ensure that the URL ends with <code>/</code>.</p>
</li>
<li class="">
<p><strong>Client ID</strong>: <code>&lt;Application (client) ID&gt;</code>, which corresponds to the <strong>Application</strong> (client) <strong>ID</strong> of the OIDC Application.</p>
</li>
<li class="">
<p><strong>Username Claim</strong>: <code>upn</code>.</p>
</li>
<li class="">
<p><strong>Groups Claim</strong>: <code>groups</code>.</p>
<p><img decoding="async" loading="lazy" alt="Identity Provider Details" src="https://docs.kuberocketci.io/assets/images/identity-provider-details-43942f4911d1c02742267b8b19d106cb.png" width="1506" height="1022" class="img_ev3q"></p>
</li>
</ul>
</li>
<li class="">
<p>The process of applying the changes may take a few minutes. Once completed, the Microsoft Entra OIDC identity provider will be associated with the AWS EKS cluster.</p>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="method-2-using-terraform">Method 2: Using Terraform<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#method-2-using-terraform" class="hash-link" aria-label="Direct link to Method 2: Using Terraform" title="Direct link to Method 2: Using Terraform" translate="no">​</a></h3>
<p>To configure Microsoft Entra as an Identity Provider in AWS EKS using Terraform, you can use <a href="https://registry.terraform.io/modules/terraform-aws-modules/eks/aws/20.30.1" target="_blank" rel="noopener noreferrer" class="">AWS EKS Terraform module</a>. Here's an example of how you can do it:</p>
<ul>
<li class=""><strong>variables.tf</strong>:</li>
</ul>
<div class="language-hcl codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-hcl codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">variable</span><span class="token keyword type variable" style="color:#36acaa"> "cluster_identity_providers" </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">description</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Configuration for OIDC identity provider"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">type</span><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> any</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">default</span><span class="token plain">     </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>terraform.tfvars</strong>:</li>
</ul>
<div class="language-hcl codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-hcl codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token property" style="color:#36acaa">cluster_identity_providers</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">entra</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">client_id</span><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"&lt;Application (client) ID&gt;"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">issuer_url</span><span class="token plain">   </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://sts.windows.net/&lt;Tenant ID&gt;/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">groups_claim</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"groups"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">username_claim</span><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"upn"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>main.tf</strong>:</li>
</ul>
<div class="language-hcl codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-hcl codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">module</span><span class="token keyword type variable" style="color:#36acaa"> "eks" </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">source</span><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"terraform-aws-modules/eks/aws"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">version</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"20.14.0"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># OIDC Identity provider</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">cluster_identity_providers</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> var.cluster_identity_providers</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>After applying the Terraform configuration, the Microsoft Entra OIDC identity provider will be associated with the AWS EKS cluster.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuring-rbac-resources-in-aws-eks-cluster-for-microsoft-entra-user-groups">Configuring RBAC Resources in AWS EKS cluster for Microsoft Entra User Groups<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#configuring-rbac-resources-in-aws-eks-cluster-for-microsoft-entra-user-groups" class="hash-link" aria-label="Direct link to Configuring RBAC Resources in AWS EKS cluster for Microsoft Entra User Groups" title="Direct link to Configuring RBAC Resources in AWS EKS cluster for Microsoft Entra User Groups" translate="no">​</a></h2>
<p>In this section, user authorization will be configured using Kubernetes Role-Based Access Control (RBAC). Microsoft Entra groups will be linked to Kubernetes ClusterRoles through ClusterRoleBinding resources, enabling precise control over resource access within the EKS cluster. Additionally, Roles and RoleBindings can be used for more granular access control within specific namespaces.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The <strong>Object ID</strong> of the Microsoft Entra group can be found in the <strong>Overview</strong> section of the group in the Microsoft Entra Admin Center.
<img decoding="async" loading="lazy" alt="Group Object ID" src="https://docs.kuberocketci.io/assets/images/group-object-id-074d9c1a6ef1ebdd351442b25e07f37d.png" width="1504" height="1090" class="img_ev3q"></p></div></div>
<ol>
<li class="">
<p>Log in to the AWS EKS cluster and create the following <strong>ClusterRoleBinding</strong> resource, which associates the Microsoft Entra group <code>oidc-cluster-admins</code> with the <code>cluster-admin</code> Kubernetes Cluster Role. Replace <code>&lt;your-microsoft-entra-admin-group-object-id&gt;</code> with the Object ID of the <code>oidc-cluster-admins</code> group, which can be found on the <code>Group</code> overview page in the Microsoft Entra admin center.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> rbac.authorization.k8s.io/v1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> ClusterRoleBinding</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">metadata</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> oidc</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">cluster</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">admins</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">roleRef</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">apiGroup</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> rbac.authorization.k8s.io</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> ClusterRole</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> cluster</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">admin</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">subjects</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Group</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;your</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">microsoft</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">entra</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">admin</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">group</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">object</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">id</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">apiGroup</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> rbac.authorization.k8s.io</span><br></div></code></pre></div></div>
<p>Save the above YAML to a file, for example, <code>clusterrolebinding.yaml</code>, and apply it to the EKS cluster using the following command:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl apply </span><span class="token parameter variable" style="color:#36acaa">-f</span><span class="token plain"> clusterrolebinding.yaml</span><br></div></code></pre></div></div>
<p>The <code>oidc-cluster-admins</code> group will now have <code>cluster-admin</code> permissions within the EKS cluster.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="authenticating-to-aws-eks-using-microsoft-entra-with-kubectl">Authenticating to AWS EKS using Microsoft Entra with kubectl<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#authenticating-to-aws-eks-using-microsoft-entra-with-kubectl" class="hash-link" aria-label="Direct link to Authenticating to AWS EKS using Microsoft Entra with kubectl" title="Direct link to Authenticating to AWS EKS using Microsoft Entra with kubectl" translate="no">​</a></h2>
<p>To authenticate to the AWS EKS cluster using Microsoft Entra, you can use the <code>kubectl</code> CLI tool with the <code>kubelogin</code> plugin. The <code>kubelogin</code> plugin simplifies the OIDC authentication process by handling the token exchange and session management. Here's how you can authenticate to the EKS cluster:</p>
<ol>
<li class="">
<p>Create or update the kubeconfig file with the OIDC configuration. Replace <code>&lt;cluster-name&gt;</code> with the name of your EKS cluster and <code>&lt;region-code&gt;</code> with the AWS region code where the cluster is located.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">aws eks update-kubeconfig </span><span class="token parameter variable" style="color:#36acaa">--region</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">region-code</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--name</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">cluster-name</span><span class="token operator" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Execute the following command to create a new kubeconfig context using the <code>kubelogin</code> plugin. Replace <code>&lt;cluster-name&gt;</code> with the name of your EKS cluster.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl config set-credentials </span><span class="token string" style="color:#e3116c">"eks"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exec-api-version</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">client.authentication.k8s.io/v1beta1 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exec-command</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">kubelogin </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exec-arg</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">get-token </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exec-arg</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">--oidc-issuer-url </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exec-arg</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">https://sts.windows.net/</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">Tenant ID</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain">/ </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exec-arg</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">--oidc-client-id </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exec-arg</span><span class="token operator" style="color:#393A34">=</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">Application </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">client</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> ID</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exec-arg</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">--oidc-client-secret </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exec-arg</span><span class="token operator" style="color:#393A34">=</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">Application </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">client</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> Secret</span><span class="token operator" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>Replace <code>&lt;Tenant ID&gt;</code>, <code>&lt;Application (client) ID&gt;</code>, and <code>&lt;Application (client) Secret&gt;</code> with the corresponding values from the OIDC Application in the Microsoft Entra Admin Center.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>You can test the authentication to the EKS cluster immediately by running the following command:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl </span><span class="token parameter variable" style="color:#36acaa">--user</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">eks get nodes</span><br></div></code></pre></div></div></div></div>
</li>
<li class="">
<p>Set the context for the kubeconfig file to use the <code>eks</code> user and the OIDC configuration. Replace <code>&lt;cluster-name&gt;</code> with the name of your EKS cluster.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl config set-context eks </span><span class="token parameter variable" style="color:#36acaa">--user</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">eks </span><span class="token parameter variable" style="color:#36acaa">--cluster</span><span class="token operator" style="color:#393A34">=</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">cluster-name</span><span class="token operator" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>To switch to the <code>eks</code> context, execute the following command:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl config use-context eks</span><br></div></code></pre></div></div>
<p>Test the authentication by running the following command:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl get nodes</span><br></div></code></pre></div></div>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuring-kuberocketci-portal-with-microsoft-entra-oidc-authentication">Configuring KubeRocketCI Portal with Microsoft Entra OIDC Authentication<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#configuring-kuberocketci-portal-with-microsoft-entra-oidc-authentication" class="hash-link" aria-label="Direct link to Configuring KubeRocketCI Portal with Microsoft Entra OIDC Authentication" title="Direct link to Configuring KubeRocketCI Portal with Microsoft Entra OIDC Authentication" translate="no">​</a></h2>
<ol>
<li class="">
<p>Starting from version 3.10, KubeRocketCI platform supports Microsoft Entra as an Identity Provider for OIDC authentication in the Portal UI. To configure Microsoft Entra OIDC authentication, navigate to the <a href="https://github.com/epam/edp-install" target="_blank" rel="noopener noreferrer" class="">edp-install</a> Helm chart repository and set the following values in the <code>values.yaml</code> file:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">edp-headlamp</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">oidc</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">issuerUrl</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://sts.windows.net/&lt;Tenant ID&gt;/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">clientID</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"&lt;Application (client) ID&gt;"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">clientSecretName</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"&lt;name of the secret containing the client-secret value&gt;"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">clientSecretKey</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"clientSecret"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">...</span><br></div></code></pre></div></div>
<p>Replace <code>&lt;Tenant ID&gt;</code> and <code>&lt;Application (client) ID&gt;</code> with the corresponding values from the OIDC Application in the Microsoft Entra Admin Center. Also, specify the name of the Kubernetes Secret containing the Application <strong>Client secret</strong> value in the <code>clientSecretName</code> field.</p>
</li>
<li class="">
<p>In the Microsoft Entra Admin Center, navigate to the created OIDC Application and select the <strong>Authentication</strong> section. In the <strong>Redirect URIs</strong> field, add the URL of the KubeRocketCI Portal, for example, <code>https://portal-&lt;krci-namespace&gt;.&lt;dns-wildcard&gt;/oidc-callback</code>.</p>
<p><img decoding="async" loading="lazy" alt="Redirect URIs" src="https://docs.kuberocketci.io/assets/images/redirect-uris-7fdaed8d83ca7e79234435a232fce0ec.png" width="3364" height="1660" class="img_ev3q"></p>
</li>
<li class="">
<p>After applying the changes, the KubeRocketCI Portal will be configured to use Microsoft Entra OIDC authentication. Users will be able to log in to the Portal using <strong>Sign In</strong> option.</p>
<p><img decoding="async" loading="lazy" alt="Sign In" src="https://docs.kuberocketci.io/assets/images/sign-in-61897514acf347a032e4a3eaa2582c2d.png" width="3364" height="1660" class="img_ev3q"></p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://docs.kuberocketci.io/blog/integrating-oidc-authentication-microsoft-entra-aws-eks#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Integrating OpenID Connect (OIDC) authentication with Microsoft Entra in AWS EKS is a powerful way to enhance security and streamline user access management. By leveraging the capabilities of SSO, OIDC, and Microsoft Entra, organizations can simplify authentication processes, enforce access controls, and ensure secure navigation across cloud-native environments. Whether you're managing user identities, enhancing compliance, or improving user experience, this integration provides a robust solution to meet your identity and access management needs. By following the steps outlined in this guide, you can configure Microsoft Entra as an Identity Provider in AWS EKS, authenticate users using OIDC, and secure access to your EKS clusters and KubeRocketCI Portal effectively.</p>]]></content>
        <author>
            <name>Daniil Nedostup</name>
            <uri>https://github.com/daniil-nedostup</uri>
        </author>
        <category label="KubeRocketCI" term="KubeRocketCI"/>
        <category label="AWS EKS" term="AWS EKS"/>
        <category label="SSO" term="SSO"/>
        <category label="Microsoft Entra" term="Microsoft Entra"/>
        <category label="OIDC" term="OIDC"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="Security" term="Security"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Advanced AWS EKS Management: Implementing SSO via OIDC and Keycloak]]></title>
        <id>https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak</id>
        <link href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak"/>
        <updated>2024-10-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Learn how to implement Single Sign-On (SSO) using OpenID Connect (OIDC) and Keycloak to boost security and streamline authentication processes in Amazon Elastic Kubernetes Service (AWS EKS).]]></summary>
        <content type="html"><![CDATA[<p>In today's cloud-first world, ensuring seamless and secure access to Amazon Elastic Kubernetes Service (EKS) is essential for IT teams. Our guide helps you enhance EKS security by integrating Single Sign-On (SSO) with OpenID Connect (OIDC) and Keycloak. This integration simplifies authentication and strengthens security measures. We aim to provide you with effective strategies to implement a robust SSO solution that meets your organization's standards, making your EKS environment more secure and compliant. KubeRocketCI leverages this integration to provide Role-Based Access Control (RBAC) for your EKS clusters, ensuring that only authorized users can access platform resources.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="prerequisites">Prerequisites<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h2>
<p>Before you begin, ensure you have the following:</p>
<ul>
<li class="">A running <a href="https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html" target="_blank" rel="noopener noreferrer" class="">AWS EKS</a> cluster with the necessary permissions for access and management.</li>
<li class="">Forked and cloned the <a href="https://github.com/epam/edp-cluster-add-ons" target="_blank" rel="noopener noreferrer" class="">edp-cluster-add-ons</a> repository.</li>
<li class="">The <a href="https://github.com/int128/kubelogin" target="_blank" rel="noopener noreferrer" class="">kubelogin</a> plugin installed for authenticating to the EKS cluster using OIDC.</li>
<li class="">The <a href="https://kubernetes.io/docs/tasks/tools/#kubectl" target="_blank" rel="noopener noreferrer" class="">kubectl</a> cli tool installed.</li>
<li class="">The <a href="https://aws.amazon.com/cli/" target="_blank" rel="noopener noreferrer" class="">aws cli</a> tool installed.</li>
<li class=""><a class="" href="https://docs.kuberocketci.io/docs/operator-guide/auth/keycloak">Keycloak</a> installed and configured with the <a href="https://github.com/epam/edp-cluster-add-ons/tree/main/clusters/core/addons/kuberocketci-rbac" target="_blank" rel="noopener noreferrer" class="">kuberocketci-rbac</a> Helm chart, which can be found in the <a href="https://github.com/epam/edp-cluster-add-ons" target="_blank" rel="noopener noreferrer" class="">add-ons repository</a>.</li>
<li class="">The <a href="https://github.com/epam/edp-keycloak-operator" target="_blank" rel="noopener noreferrer" class="">Keycloak-operator</a> installed.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="understanding-sso-oidc-and-keycloak">Understanding SSO, OIDC, and Keycloak<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#understanding-sso-oidc-and-keycloak" class="hash-link" aria-label="Direct link to Understanding SSO, OIDC, and Keycloak" title="Direct link to Understanding SSO, OIDC, and Keycloak" translate="no">​</a></h2>
<p>In the context of enhancing digital security and user experience, we prioritize the integration of three key elements: Single Sign-On (SSO), OpenID Connect (OIDC), and the Keycloak solution. Here’s how they connect:</p>
<ul>
<li class="">
<p><strong>Single Sign-On (SSO)</strong> serves as the foundation, enabling users to access multiple applications with one set of login credentials, significantly simplifying the authentication process.</p>
</li>
<li class="">
<p><strong>OpenID Connect (OIDC)</strong> builds on the SSO framework by providing an authentication layer, which uses straightforward identity verification to ensure secure and seamless access across services.</p>
</li>
<li class="">
<p><strong>Keycloak</strong> acts as the orchestrator, implementing both SSO and OIDC to manage user identities and security protocols efficiently. It provides a comprehensive platform for securing applications and services with minimal hassle for end-users.</p>
</li>
</ul>
<p>Together, these technologies streamline the login process, reinforce security, and enhance the user experience by allowing secure, seamless navigation across our digital ecosystem.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-sso">What is SSO?<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#what-is-sso" class="hash-link" aria-label="Direct link to What is SSO?" title="Direct link to What is SSO?" translate="no">​</a></h3>
<p>Single sign-on (SSO) is a user authentication method that lets you use one set of login credentials (such as a username and password) to access multiple applications. The primary benefits of SSO include an improved user experience by eliminating the need for multiple passwords and logins, and enhanced security through centralized management of user access. Organizations widely adopt SSO to streamline their authentication processes and reduce the likelihood of password fatigue among users, thereby decreasing the risk of security breaches. For more information, see <a href="https://en.wikipedia.org/wiki/Single_sign-on" target="_blank" rel="noopener noreferrer" class="">Single sign-on on Wikipedia</a>.</p>
<!-- -->
<p>This diagram shows the following steps:</p>
<ol>
<li class="">User logs in once at the single sign-on (SSO) gateway by providing their credentials.</li>
<li class="">The SSO gateway authenticates the user, creates a session, and then allows the user to access multiple applications.</li>
<li class="">When the user attempts to access Application 1, the application verifies the user's session with the SSO gateway.</li>
<li class="">The SSO gateway confirms that the session is valid, and Application 1 grants the user access.</li>
</ol>
<p>The same process is repeated for Application 2 and Application 3. Since the user's session is already established with the SSO gateway, they do not need to log in again to access these applications.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="understanding-oidc">Understanding OIDC<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#understanding-oidc" class="hash-link" aria-label="Direct link to Understanding OIDC" title="Direct link to Understanding OIDC" translate="no">​</a></h3>
<p>OpenID Connect (OIDC) is an authentication layer on top of the OAuth 2.0 protocol. It lets clients verify the identity of the end user based on authentication by an authorization server and get basic profile information about the end user in an interoperable and REST-like manner. OIDC uses JSON Web Tokens (JWTs) to securely transmit information about an end user from the identity provider to the client. This protocol is essential for modern web applications, providing a more secure and streamlined method for user authentication and authorization. Reference: <a href="https://openid.net/specs/openid-connect-core-1_0.html" target="_blank" rel="noopener noreferrer" class="">OIDC Specification</a></p>
<p>OIDC enables single sign-on (SSO) functionality, simplifying the user experience by allowing individuals to use a single set of credentials across multiple applications. The protocol also supports robust security features, including token revocation and introspection, enhancing overall application security.</p>
<p>This diagram simplifies the OIDC flow into its core components:</p>
<!-- -->
<ol>
<li class=""><strong>User (U)</strong>: The end user who wants to access the client application.</li>
<li class=""><strong>Client Application (C)</strong>: The application requiring authentication from the user.</li>
<li class=""><strong>Authorization Server (AS)</strong>: The server that authenticates the user and issues tokens to the client application.</li>
<li class=""><strong>Resource Server (RS)</strong>: The server hosting protected resources that the client application wants to access on behalf of the user.</li>
</ol>
<p>The sequence starts with the user requesting access to the client application, moving through authentication with the authorization server, and ending with the client application accessing protected resources.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="keycloak-overview">Keycloak Overview<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#keycloak-overview" class="hash-link" aria-label="Direct link to Keycloak Overview" title="Direct link to Keycloak Overview" translate="no">​</a></h3>
<p>Keycloak is an open-source identity and access management solution for modern applications and services. It offers features like single sign-on (SSO), social login, and identity brokering, making it a comprehensive solution for managing user identities. Keycloak integrates seamlessly with LDAP (Lightweight Directory Access Protocol) and Active Directory and supports OpenID Connect (OIDC), OAuth 2.0, and Security Assertion Markup Language (SAML) 2.0. By using Keycloak, organizations can enhance their security and provide a better user experience without building complex identity management features from scratch. For more details, see the Keycloak <a href="https://www.keycloak.org/documentation.html" target="_blank" rel="noopener noreferrer" class="">official documentation</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keycloak-configuration">Keycloak Configuration<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#keycloak-configuration" class="hash-link" aria-label="Direct link to Keycloak Configuration" title="Direct link to Keycloak Configuration" translate="no">​</a></h2>
<p>The first step to enable OIDC authentication to the AWS EKS cluster using Keycloak is to set up Keycloak with the necessary configurations, such as realm, client, groups, and other settings. For this purpose, we will use the <a href="https://github.com/epam/edp-cluster-add-ons/tree/main/clusters/core/addons/kuberocketci-rbac" target="_blank" rel="noopener noreferrer" class="">kuberocketci-rbac</a> Helm chart available in the <a href="https://github.com/epam/edp-cluster-add-ons" target="_blank" rel="noopener noreferrer" class="">edp-cluster-add-ons</a> repository.</p>
<ol>
<li class="">
<p>Clone the forked <a href="https://github.com/epam/edp-cluster-add-ons" target="_blank" rel="noopener noreferrer" class="">edp-cluster-add-ons</a> repository and navigate to the <code>clusters/core/addons/kuberocketci-rbac</code> directory.</p>
</li>
<li class="">
<p>In the <code>values.yaml</code> file, set the <code>kubernetes.enabled</code> field to <code>true</code> to enable the creation of the necessary Keycloak resources:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">values.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">kubernetes</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>If you use the External Secrets Operator to manage secrets, ensure the AWS Parameter Store object contains the correct Client Secret value for the <strong>keycloak-client-eks-secret</strong> secret:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">AWS Parameter Store object</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"keycloak-client-eks-secret"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"clientSecret"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"&lt;Client_Secret_Value&gt;"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>If you are not using the External Secrets Operator, you can create the <strong>keycloak-client-eks-secret</strong> secret manually:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl create secret generic keycloak-client-eks-secret </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --from-literal</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">clientSecret</span><span class="token operator" style="color:#393A34">=</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">Client_Secret_Value</span><span class="token operator" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Install the <strong>kuberocketci-rbac</strong> Helm chart. You can use the <strong>kubectl</strong> cli tool or <strong>Argo CD</strong> for this purpose.</p>
<ul>
<li class=""><strong>kubectl</strong></li>
</ul>
<p>Ensure you are in the <code>clusters/core/addons/kuberocketci-rbac</code> directory if you want to install the chart with the kubectl command. For example:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl upgrade </span><span class="token parameter variable" style="color:#36acaa">--install</span><span class="token plain"> kuberocketci-rbac </span><span class="token parameter variable" style="color:#36acaa">-n</span><span class="token plain"> security </span><span class="token builtin class-name">.</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>Argo CD</strong></li>
</ul>
<p>If you are using Argo CD to deploy charts in the <strong>edp-cluster-add-ons</strong> repository, ensure that the following fields for the <strong>kuberocketci-rbac</strong> Helm chart are correctly set in the <code>values.yaml</code> file in the <code>clusters/core/apps</code> directory:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">values.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">kuberocketci-rbac</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">createNamespace</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">false</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">enable</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><br></div></code></pre></div></div>
<p>After the installation is complete, check that the Keycloak resources, such as the realm, client, and groups, have been created successfully.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="adding-users-to-groups-in-keycloak">Adding Users to Groups in Keycloak<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#adding-users-to-groups-in-keycloak" class="hash-link" aria-label="Direct link to Adding Users to Groups in Keycloak" title="Direct link to Adding Users to Groups in Keycloak" translate="no">​</a></h2>
<p>To manage user access to the AWS EKS cluster, you need to assign users to specific groups in Keycloak. These groups will define the permissions for users accessing the AWS EKS cluster.</p>
<ol>
<li class="">
<p>Log in to the Keycloak admin console and navigate to the <strong>shared</strong> realm.</p>
</li>
<li class="">
<p>Select the <strong>Users</strong> section from the left sidebar menu and select the user you want to add to a group. Navigate to the <strong>Groups</strong> tab and click on the <strong>Join Group</strong> button to add the user to a group.</p>
<p><img decoding="async" loading="lazy" alt="Keycloak Add User to Group" src="https://docs.kuberocketci.io/assets/images/keycloak-add-user-to-group-c578b2c460fee04b308e5555c5c4aaa9.png" width="3362" height="1660" class="img_ev3q"></p>
</li>
<li class="">
<p>Select the group you want to add the user to (e.g., <strong>oidc-cluster-admins</strong>). Click on the <strong>Join</strong> button to add the user to the selected group.</p>
<p><img decoding="async" loading="lazy" alt="Keycloak Join Group" src="https://docs.kuberocketci.io/assets/images/keycloak-join-group-2bd628e00f93dec1d0611ab7d0ebbb38.png" width="3362" height="1660" class="img_ev3q"></p>
</li>
<li class="">
<p>Repeat the process of adding users to groups for all users who need access to the AWS EKS cluster.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuring-keycloak-as-an-identity-provider-in-aws-eks">Configuring Keycloak as an Identity Provider in AWS EKS<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#configuring-keycloak-as-an-identity-provider-in-aws-eks" class="hash-link" aria-label="Direct link to Configuring Keycloak as an Identity Provider in AWS EKS" title="Direct link to Configuring Keycloak as an Identity Provider in AWS EKS" translate="no">​</a></h2>
<p>There are two methods to configure Keycloak as an identity provider in AWS EKS: using the AWS Management Console or Terraform.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="method-1-using-the-aws-management-console">Method 1: Using the AWS Management Console<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#method-1-using-the-aws-management-console" class="hash-link" aria-label="Direct link to Method 1: Using the AWS Management Console" title="Direct link to Method 1: Using the AWS Management Console" translate="no">​</a></h3>
<ol>
<li class="">
<p>Log in to the <a href="https://aws.amazon.com/console/" target="_blank" rel="noopener noreferrer" class="">AWS Management Console</a> and navigate to the Amazon EKS service. Select the EKS cluster you want to configure and click on the <strong>Access</strong> tab.</p>
<p><img decoding="async" loading="lazy" alt="EKS Cluster Access Tab" src="https://docs.kuberocketci.io/assets/images/eks-cluster-access-tab-707d67886863028877f32b1630411b4e.png" width="3356" height="1180" class="img_ev3q"></p>
</li>
<li class="">
<p>In the <strong>OIDC identity providers</strong> section, click on the <strong>Associate identity provider</strong> button.</p>
<p><img decoding="async" loading="lazy" alt="Associate Identity Provider" src="https://docs.kuberocketci.io/assets/images/associate-identity-provider-8d81c9b345b76eb0bf49961342edde54.png" width="3356" height="1642" class="img_ev3q"></p>
</li>
<li class="">
<p>Fill in the following details for the Keycloak Identity Provider:</p>
<ul>
<li class="">
<p><strong>Name</strong>: <code>Keycloak</code></p>
</li>
<li class="">
<p><strong>Issuer URL</strong>: <code>https://&lt;keycloak_url&gt;/auth/realms/shared</code>, where <code>&lt;keycloak_url&gt;</code> is the URL of your Keycloak instance.</p>
</li>
<li class="">
<p><strong>Client ID</strong>: <code>eks</code>.</p>
</li>
<li class="">
<p><strong>Groups Claim</strong>: <code>groups</code>.</p>
<p><img decoding="async" loading="lazy" alt="Identity Provider Details" src="https://docs.kuberocketci.io/assets/images/identity-provider-details-43942f4911d1c02742267b8b19d106cb.png" width="1506" height="1022" class="img_ev3q"></p>
</li>
</ul>
</li>
<li class="">
<p>The process of applying the changes may take a few minutes. Once completed, you will see the Keycloak Identity Provider associated with your EKS cluster.</p>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="method-2-using-terraform">Method 2: Using Terraform<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#method-2-using-terraform" class="hash-link" aria-label="Direct link to Method 2: Using Terraform" title="Direct link to Method 2: Using Terraform" translate="no">​</a></h3>
<p>To configure Keycloak as an Identity Provider in AWS EKS cluster using Terraform, you can use the <a href="https://registry.terraform.io/modules/terraform-aws-modules/eks/aws/20.30.1" target="_blank" rel="noopener noreferrer" class="">AWS EKS Terraform module</a>. Here's an example of how to define the Keycloak Identity Provider in Terraform configuration files:</p>
<ul>
<li class=""><strong>variables.tf</strong>:</li>
</ul>
<div class="language-hcl codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-hcl codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">variable</span><span class="token keyword type variable" style="color:#36acaa"> "cluster_identity_providers" </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">description</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Configuration for OIDC identity provider"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">type</span><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> any</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">default</span><span class="token plain">     </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>terraform.tfvars</strong>:</li>
</ul>
<div class="language-hcl codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-hcl codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token property" style="color:#36acaa">cluster_identity_providers</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">keycloak</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">client_id</span><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"eks"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">issuer_url</span><span class="token plain">   </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://&lt;keycloak_url&gt;/auth/realms/shared"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">groups_claim</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"groups"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>main.tf</strong>:</li>
</ul>
<div class="language-hcl codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-hcl codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">module</span><span class="token keyword type variable" style="color:#36acaa"> "eks" </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">source</span><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"terraform-aws-modules/eks/aws"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">version</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"20.14.0"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># OIDC Identity provider</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">cluster_identity_providers</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> var.cluster_identity_providers</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>After applying the Terraform configuration, the Keycloak identity provider will be associated with your EKS cluster.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="authenticating-to-aws-eks-cluster-using-kubectl">Authenticating to AWS EKS cluster using kubectl<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#authenticating-to-aws-eks-cluster-using-kubectl" class="hash-link" aria-label="Direct link to Authenticating to AWS EKS cluster using kubectl" title="Direct link to Authenticating to AWS EKS cluster using kubectl" translate="no">​</a></h2>
<ol>
<li class="">
<p>Configure <strong>kubeconfig</strong> file to use the Keycloak Identity Provider for authentication to the AWS EKS cluster. You can use the following template:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">kubeconfig</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> v1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">preferences</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">kind</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Config</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">clusters</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">cluster</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">server</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">//&lt;eks_cluster_endpoint</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain">.eks.amazonaws.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">certificate-authority-data</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;eks_cluster_ca</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> eks</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">contexts</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">context</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">cluster</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> eks</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">user</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;keycloak_user_email</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> eks</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">current-context</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> eks</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">users</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;keycloak_user_email</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">user</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">exec</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">apiVersion</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> client.authentication.k8s.io/v1beta1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">command</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> kubectl</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">args</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> oidc</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">login</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> get</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">token</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">v1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">oidc</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">issuer</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">url=https</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">//&lt;keycloak_url</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain">/auth/realms/shared</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">oidc</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">client</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">id=eks</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">oidc</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">client</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">secret=&lt;keycloak_client_secret</span><span class="token punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>Replace the placeholders with the actual values:</p>
<ul>
<li class=""><code>&lt;eks_cluster_endpoint&gt;</code>: The endpoint of your AWS EKS cluster.</li>
<li class=""><code>&lt;eks_cluster_ca&gt;</code>: The CA certificate of your AWS EKS cluster.</li>
<li class=""><code>&lt;keycloak_user_email&gt;</code>: The email address of the Keycloak user.</li>
<li class=""><code>&lt;keycloak_url&gt;</code>: The URL of your Keycloak instance.</li>
<li class=""><code>&lt;keycloak_client_secret&gt;</code>: The Client secret of the <strong>eks</strong> Keycloak client (provided during the <strong>Keycloak Configuration</strong> step).</li>
</ul>
</li>
<li class="">
<p>Save the kubeconfig file and set the <code>KUBECONFIG</code> environment variable to point to the file:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">KUBECONFIG</span><span class="token operator" style="color:#393A34">=</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">path_to_kubeconfig_file</span><span class="token operator" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Test the authentication to the AWS EKS cluster by running the following command:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl get nodes</span><br></div></code></pre></div></div>
<p>After the first command execution, you will be prompted to log in to Keycloak. Enter your credentials to authenticate and access the EKS cluster. If the authentication is successful, you will see the list of nodes in the EKS cluster.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuring-kuberocketci-portal-with-keycloak-oidc-authentication">Configuring KubeRocketCI Portal with Keycloak OIDC Authentication<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#configuring-kuberocketci-portal-with-keycloak-oidc-authentication" class="hash-link" aria-label="Direct link to Configuring KubeRocketCI Portal with Keycloak OIDC Authentication" title="Direct link to Configuring KubeRocketCI Portal with Keycloak OIDC Authentication" translate="no">​</a></h2>
<p>The KubeRocketCI platform natively supports Keycloak as an Identity Provider for OIDC authentication.</p>
<ol>
<li class="">
<p>To configure the KubeRocketCI Portal with Keycloak OIDC authentication, navigate to the <a href="https://github.com/epam/edp-install" target="_blank" rel="noopener noreferrer" class="">edp-install</a> Helm chart and set the following values in the <code>values.yaml</code> file:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">values.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">edp-headlamp</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">oidc</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">issuerUrl</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://&lt;keycloak_url&gt;/auth/realms/shared"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">clientID</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"eks"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">clientSecretName</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"keycloak-client-headlamp-secret"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">clientSecretKey</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"clientSecret"</span><br></div></code></pre></div></div>
<p>Replace the <strong>keycloak_url</strong> with the URL of your Keycloak instance.</p>
</li>
<li class="">
<p>Ensure the AWS Parameter Store object contains the correct Client Secret value for the <strong>keycloak-client-headlamp-secret</strong> secret:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">AWS Parameter Store object</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"keycloak-client-headlamp-secret"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"&lt;Client_Secret_Value&gt;"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>After setting the values, install the <strong>edp-install</strong> Helm chart to apply the changes:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">helm upgrade </span><span class="token parameter variable" style="color:#36acaa">--install</span><span class="token plain"> krci </span><span class="token parameter variable" style="color:#36acaa">--namespace</span><span class="token plain"> krci </span><span class="token builtin class-name">.</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>After applying the changes, the KubeRocketCI Portal will be configured to use Keycloak OIDC authentication. Users will be able to log in to the Portal using <strong>Sign In</strong> option.</p>
<p><img decoding="async" loading="lazy" alt="Sign In" src="https://docs.kuberocketci.io/assets/images/sign-in-61897514acf347a032e4a3eaa2582c2d.png" width="3364" height="1660" class="img_ev3q"></p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://docs.kuberocketci.io/blog/advanced-aws-eks-management-oidc-keycloak#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Integrating OpenID Connect (OIDC) authentication with Keycloak in AWS EKS enhances security and simplifies user access management. By leveraging Keycloak's capabilities, you can implement a reliable Single Sign-On (SSO) solution that meets your organization's security standards. This guide has provided step-by-step instructions to configure Keycloak as an Identity Provider, set up necessary Keycloak resources, and enable OIDC authentication for the KubeRocketCI Portal. By following these steps, you can ensure secure and seamless access to your EKS clusters and KubeRocketCI Portal, improving both security and user experience.</p>]]></content>
        <author>
            <name>Sergiy Kulanov</name>
            <uri>https://github.com/sergk</uri>
        </author>
        <author>
            <name>Mykola Marusenko</name>
            <uri>https://github.com/mykolamarusenko</uri>
        </author>
        <author>
            <name>Daniil Nedostup</name>
            <uri>https://github.com/daniil-nedostup</uri>
        </author>
        <category label="KubeRocketCI" term="KubeRocketCI"/>
        <category label="Keycloak" term="Keycloak"/>
        <category label="AWS EKS" term="AWS EKS"/>
        <category label="SSO" term="SSO"/>
    </entry>
</feed>