diff --git a/portal-ui/src/common/SecureComponent/permissions.ts b/portal-ui/src/common/SecureComponent/permissions.ts
index 6bce0f4a4..116dd8558 100644
--- a/portal-ui/src/common/SecureComponent/permissions.ts
+++ b/portal-ui/src/common/SecureComponent/permissions.ts
@@ -126,6 +126,8 @@ export const IAM_PAGES = {
GROUPS_VIEW: "/identity/groups/:groupName+",
ACCOUNT: "/identity/account",
ACCOUNT_ADD: "/identity/new-account",
+ USER_ACCOUNT: "/identity/new-user-sa",
+ USER_ACCOUNT_ADD: "/identity/new-user-sa/:userName+",
/* Access */
POLICIES: "/access/policies",
POLICY_ADD: "/access/add-policy",
@@ -314,6 +316,12 @@ export const IAM_PAGES_PERMISSIONS = {
IAM_SCOPES.ADMIN_DISABLE_USER,
IAM_SCOPES.ADMIN_DELETE_USER,
],
+ [IAM_PAGES.USER_ACCOUNT_ADD]: [
+ IAM_SCOPES.ADMIN_CREATE_SERVICEACCOUNT,
+ IAM_SCOPES.ADMIN_UPDATE_SERVICEACCOUNT,
+ IAM_SCOPES.ADMIN_REMOVE_SERVICEACCOUNT,
+ IAM_SCOPES.ADMIN_LIST_SERVICEACCOUNTS,
+ ],
[IAM_PAGES.USER_ADD]: [IAM_SCOPES.ADMIN_CREATE_USER], // displays create user button
[IAM_PAGES.ACCOUNT_ADD]: [IAM_SCOPES.ADMIN_CREATE_SERVICEACCOUNT],
[IAM_PAGES.DASHBOARD]: [
diff --git a/portal-ui/src/screens/Console/Console.tsx b/portal-ui/src/screens/Console/Console.tsx
index d4c449933..9c89c549d 100644
--- a/portal-ui/src/screens/Console/Console.tsx
+++ b/portal-ui/src/screens/Console/Console.tsx
@@ -111,6 +111,9 @@ const Account = React.lazy(() => import("./Account/Account"));
const AccountCreate = React.lazy(
() => import("./Account/AddServiceAccountScreen")
);
+const UserSACreate = React.lazy(
+ () => import("./Users/AddUserServiceAccountScreen")
+);
const Users = React.lazy(() => import("./Users/Users"));
const Groups = React.lazy(() => import("./Groups/Groups"));
@@ -419,6 +422,11 @@ const Console = ({
path: IAM_PAGES.ACCOUNT_ADD,
forceDisplay: true, // user has implicit access to service-accounts
},
+ {
+ component: UserSACreate,
+ path: IAM_PAGES.USER_ACCOUNT_ADD,
+ forceDisplay: true, // user has implicit access to service-accounts
+ },
{
component: License,
path: IAM_PAGES.LICENSE,
diff --git a/portal-ui/src/screens/Console/Users/AddUserServiceAccountHelpBox.tsx b/portal-ui/src/screens/Console/Users/AddUserServiceAccountHelpBox.tsx
new file mode 100644
index 000000000..5841fe1da
--- /dev/null
+++ b/portal-ui/src/screens/Console/Users/AddUserServiceAccountHelpBox.tsx
@@ -0,0 +1,142 @@
+// This file is part of MinIO Console Server
+// Copyright (c) 2022 MinIO, Inc.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+import React from "react";
+import { Box } from "@mui/material";
+import {
+ HelpIconFilled,
+ ServiceAccountIcon,
+ PasswordKeyIcon,
+ IAMPoliciesIcon,
+} from "../../../icons";
+
+const FeatureItem = ({
+ icon,
+ description,
+}: {
+ icon: any;
+ description: string;
+}) => {
+ return (
+
+ {icon}{" "}
+