Đăng vào

Tích hợp SSO cho Backstage dùng Azure AD (Entra ID)

Giới thiệu

Hôm trước mình có giới thiệu bài viết: Cài đặt và thiết lập Backstage trên Kubernetes với Argo CD, như đã hứa, bài viết này mình sẽ hướng dẫn tích hợp tính năng Single Sign On (SSO) cho Backstage sử dụng Microsoft Entra ID (Azure AD)

Chỉnh sửa source code

Đầu tiên, mình sử dụng Microsoft Azure Authentication Provider, các bước hướng dẫn đã rất chi tiết: https://backstage.io/docs/auth/microsoft/provider/ mình sẽ không nói lại.

Tới phần Adding the provider to the Backstage frontend docs chỉ đề cập tới ví dụ về Sign in using GitHub, phần Sign in using Microsoft sẽ làm tương tự:

packages/app/src/App.tsx
import { microsoftAuthApiRef } from '@backstage/core-plugin-api';
import {
  AlertDisplay,
  OAuthRequestDialog,
  SignInPage,
} from '@backstage/core-components';

const app = createApp({
  apis,
  plugins: [badgesPlugin],
  components: {
    SignInPage: props => (
      <SignInPage
        {...props}
        auto
        provider={{
          id: 'microsoft-auth-provider',
          title: 'Microsoft',
          message: 'Sign in using Microsoft',
          apiRef: microsoftAuthApiRef,
        }}
      />
    ),
  },
  // ..
});

Tiếp theo, khai báo 1 user cho team-a.

sso-user.yaml
apiVersion: backstage.io/v1alpha1
kind: User
metadata:
  name: your-user-name
spec:
  profile:
    email: your-email@corp.com
  memberOf: [team-a]

File sso-user.yaml lưu ở ngoài thư mục gốc của demo repository.

Sau khi chỉnh xong, thì nhớ build lại docker image và đẩy lên artifactory.

Tạo secrets chứa thông tin Entra ID app

Tạo secret chứa thông tin của Entra ID app cũng như một vài thông số khác

secrets.yaml
apiVersion: v1
stringData:
  BACKEND_AUTH_KEY: <your-secret>
  GHC_TOKEN: <your-token>
  PORT: "7007"
  AZURE_CLIENT_SECRET: <client-secret>
  AZURE_CLIENT_ID: <client-id>
  AZURE_TENANT_ID: <tenant-id>
kind: Secret
metadata:
  name: app-secrets
  namespace: backstage
type: Opaque

Tốt nhất là nên đóng gói secrets.yaml bằng SealedSecret và lưu trên Git một cách an toàn.

Chỉnh sửa lại app-config.yaml

Ở bài viết trước, app-config.yaml của Backstage được lưu trong Configmap, chi tiết có thể xem thêm app-config.yaml

Dưới đây là một vài cập nhật cho app-config.yaml để có thể tích hợp SSO được

app-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
  annotations:
    argocd.argoproj.io/sync-wave: "-1"
data:
  main.yaml: |
    enableExperimentalRedirectFlow: true

    # ...

    auth:
      environment: production
      providers:
        # ...
        microsoft:
          production:
            clientId: ${AZURE_CLIENT_ID}
            clientSecret: ${AZURE_CLIENT_SECRET}
            tenantId: ${AZURE_TENANT_ID}
            domainHint: ${AZURE_TENANT_ID}
            signIn:
              resolvers:
                - resolver: emailMatchingUserEntityProfileEmail

    # ...
    
    catalog:
      # ...
      locations:
        # ...

        # Add user
        - type: file
          target: sso-user.yaml

        # ...
        

Kết luận

  • Trên đây là các bước cơ bản để chúng ta có thể tích hợp SSO cho Backstage.
  • Đối với các workflow phức tạp hơn chúng ta cần chỉnh sửa source code nhiều hơn.

Chúc thành công,

ANH NGUYỄN