Amazon Q Business - 身份联合应用程序
Amazon Q Business 通过 AWS Identity and Access Management 连接您公司的身份系统,以进行用户管理和身份验证。本章将简要介绍如何使用 IAM 联合来创建和配置 Amazon Q Business 应用程序以管理最终用户访问。
Okta IAM 联合
以下步骤介绍如何将 Amazon Q Business 与 Okta 集成:
先决条件
在开始将 Amazon Q Business 与 Okta 集成之前,请确保您已:
- 创建 Okta 账户并添加至少一个具有有效电子邮件地址的用户。
- 创建 IAM 策略,其中包含 IAM 角色中概述的权限,用于使用 IAM 联合实现 Amazon Q Business Web 体验。
步骤 1:设置 Okta 应用程序
要创建 Okta 实例,请按照以下步骤操作:
- 登录 Okta并转到管理控制台。
- 在左侧导航窗格中,选择"应用程序",然后选择"创建应用程序集成"。
- 在"创建新的应用程序集成"页面上,选择"SAML 2.0",然后选择"下一步"。
- 在"创建 SAML 集成"页面上的"常规设置"中,对于"应用程序名称",输入应用程序的名称并选择"下一步"。
- 在"配置 SAML"中,执行以下操作:
- 对于"单点登录 URL",输入您的 Web 应用程序端点。
- 取消选中将此用于收件人 URL和目标 URL框。
- 然后,对于收件人 URL 字段,输入以下 AWS 端点:https://signin.aws.amazon.com/saml。 <
- 对于目标 URL,输入您的 Web 应用程序端点。
- 对于 Audience URI(SP 身份 ID),输入以下 AWS 端点:https://signin.aws.amazon.com/saml。
- 对于 Name ID 格式,设置为 Persistent。
- 然后,向下滚动到页面底部并选择 Next。
- 在 Create SAML Integration 页面上选择最佳选项,然后单击 Finish。您将被重定向到应用程序摘要页面。
- 在应用程序摘要页面上,从顶部导航菜单中选择分配,然后选择分配
- 接下来,下载 SAML 负载并复制您的登录 URL。
自定义应用程序端点 URL 格式:[您的 URL]/saml(例如http://localhost:8000/saml)
生成的 Web 体验端点 URL 格式:[您的 URL]/saml(例如 https://abcdefgh.qbusiness.us-east-1.on.aws/saml)
<自定义应用程序端点 URL 格式:[您的 URL]/saml(例如 http://localhost:8000/saml)
生成的 Web 体验端点URL 格式:[您的 URL]/saml(例如 https://abcdefgh.qbusiness.us-east-1.on.aws/saml)
生成的 Web 体验端点 URL 格式:暂时输入占位符 URL(例如 http://sampleurl.com),在 Amazon Q Business 应用程序创建过程结束时进行更新。
<第 2 步:添加 IAM 身份提供商
要将 Okta 连接到 AWS Identity and Access Management,请按照以下步骤操作:
- 登录 AWS Identity and Access Management 控制台。
- 在左侧导航菜单中,从访问管理中选择身份提供商。
- 从身份提供商中选择添加提供商。
- 在添加身份提供商中,对于配置提供商,执行以下操作:
- 对于提供商类型,选择SAML。
- 对于提供商名称,添加一个名称来标识您的身份提供商。
- 对于元数据文档,上传您在步骤 1 中从 Okta 下载并保存的 .xml 文件。
- 选择添加提供商。
- 在身份提供商摘要中页面,从提供商中选择您刚刚添加的提供商,然后执行以下操作:
- 从"摘要"页面复制并保存 ARN。您将需要它来进行信任策略和 Okta 设置。 ARN 格式:arn:aws:iam::aws-account-id:saml-provider/assigned-iam-idp-name。
- 然后,选择分配角色以创建具有身份提供商所需权限的 IAM 角色。
- 在分配角色中,对于角色选项,选择创建一个新角色。
- 然后,在选定的受信任实体页面上,执行以下操作:
- 对于受信任实体类型,选择 SAML 2.0 联合。
- 在 SAML 2.0 联合中,从基于 SAML 2.0 的提供商下拉列表中,选择您添加的身份提供商。
- 对于允许访问,选择仅允许编程访问。
- 对于属性,选择 SAML:aud。
- 对于值,输入以下内容:https://signin.aws.amazon.com/saml。
- 选择下一步。
- 在添加权限页面上选择具有所需权限的 IAM 策略,然后单击下一步。
- 在名称、审核和创建页面上输入角色名称、可选描述和标签。然后,单击创建角色。
- 在角色页面中,选择您刚刚创建的 IAM 角色。然后,从角色摘要页面执行以下操作:
- 复制并保存角色 ARN(例如,arn:aws:iam::111122223333:role/sample-role),以将您的 AWS IAM 身份提供商实例连接到 Okta
- 通过添加新语句编辑信任策略,将"account_id"替换为您的 AWS 账户 ID,将"saml_provider"替换为您的 IAM 身份提供商 ARN 中的分配的 iam-idp 名称。
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::{{account_id}}:saml-provider/[[saml_provider]]" }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "SAML:aud": "https://signin.aws.amazon.com/saml" } } }, { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::{{account_id}}:saml-provider/[[saml_provider]]" }, "Action": "sts:TagSession", "Condition": { "StringLike": { "aws:RequestTag/Email": "*" } } } ]<
步骤 3:将 IAM 连接到 Okta
在此步骤中,我们将配置 AWS IAM 和 Okta 之间的信任关系。
- 登录 Okta 并转到管理控制台。
- 在左侧导航窗格中,选择"应用程序",然后选择您创建的 Okta 应用程序。
- 在"常规"中,从"SAML 设置"中选择"编辑"。
- 在"编辑 SAML"中,对于"常规设置",选择"下一步"。
- 在"配置 SAML"中,向下滚动到"属性语句"部分,然后添加属性
步骤 4:创建 Q Business 应用程序
要使用控制台创建应用程序,请按照以下步骤操作:
- 登录 AWS 管理控制台并打开 Amazon Q Business控制台。
- 从"工作原理"菜单中,选择"尝试快速应用"。
- 在"创建应用程序"页面上,对于"应用程序设置",输入您的 Amazon Q Business 应用程序的应用程序名称
- 在"服务访问"中,从"创建并使用新的服务链接角色 (SLR)"、"创建并使用新的服务角色 (SR)"、"使用现有服务角色 (SR)/服务链接角色 (SLR)"和"服务角色名称"等选项中选择授权 Amazon Q Business 的方法。
- 要自定义加密设置,请选择"自定义加密设置(高级)"。
- 对于"访问管理方法",请选择"IAM 身份中心"。
- 要在 Amazon Q Business 中为 IAM 身份中心集成启用跨区域调用,请创建 IAM 身份中心实例,然后激活"启用跨区域调用"。
- 然后将 Amazon Q Business 连接到 IAM 身份中心
- 要开始创建应用程序,请选择创建。
步骤 5:设置 Q Business Retriever
要使用控制台创建 Amazon Q Business 检索器,请按照以下步骤操作:
- 登录 AWS 管理控制台并打开 Amazon Q Business 控制台。
- 完成创建 Amazon Q Business 应用程序的步骤。
- 然后,对于选择检索器,选择使用本机检索器
- 在索引配置中,根据您的用例在入门级和企业级索引类型之间进行选择,并选择您需要的单位数。
- 对于标签,选择是否要添加索引标签。
- 要创建检索器和索引,请选择创建。
要使用控制台创建 Amazon Kendra 检索器,请按照以下步骤操作:
- 登录 AWS 管理控制台并打开 Amazon Q Business 控制台。
- 完成创建 Amazon Q Business 应用程序的步骤。
- 在"选择检索器"中,选择"使用现有检索器"
- 在"标签"中,选择是否要添加检索器标签。
- 要将您的应用程序环境连接到数据源,请选择"下一步"。
步骤 6:链接 Q Business 数据源
为您的 Amazon Q Business 应用程序选择一个检索器,然后将数据源连接到它。可用的数据源取决于您选择的检索器。
如果您使用 Amazon Q Business 检索器,则可以从以下选项中进行选择:
- 使用 CreateDataSource API 操作连接到任何 Amazon Q Business 支持的数据源连接器。
- 使用 BatchPutDocument API 操作直接上传文档。
步骤 7:管理访问权限
要管理用户访问权限,请按照以下步骤操作:
- 登录 AWS 管理控制台并打开 Amazon Q Business 控制台。
- 完成创建 Amazon Q Business 应用程序的步骤。
- 将默认订阅层设置为 Q Business Pro 或 Q Business Lite。这将是所有用户登录您的 Web 体验的默认设置。
- 选择"创建应用程序"。
自定义 Web 体验
要自定义 Amazon Q Business Web 体验,您需要按照以下步骤操作:
- 登录 AWS 管理控制台 并打开 Amazon Q Business 控制台。
- 完成创建 Amazon Q Business 应用程序的步骤。
- 然后,从 Amazon Q Business 应用程序环境页面中选择您的应用程序,然后选择 自定义 Web 体验。
- 在 自定义 Web 体验 中,从右侧导航窗格中选择 自定义 Web 体验。
- 在自定义 Web 体验中输入标题、欢迎消息、显示示例提示。
- 然后选择保存
将应用程序连接到单个 IdP
您可以将多个 Amazon Q Business 自定义应用程序连接到单个基于 SAML 2.0 或 OIDC 的身份提供商 (IdP) 应用程序。
使用 SAML
要使用 SAML 将多个 Amazon Q Business 自定义应用程序连接到 Okta,请按照以下步骤操作:
- 登录 Okta 并转到管理控制台。
- 在左侧导航窗格中,选择"应用程序",然后选择您现有的 SAML 2.0 应用程序。
- 从"常规"中选择"SAML 设置"。
- 保留"常规设置"原样,然后选择"下一步"。
- 编辑 SAML 集成:在"SAML 设置"中的"常规"下,输入第一个 SAML 应用程序的单点登录 URL 和受众 URI。
- 然后,从"常规"中选择"显示高级设置"。
- 向下滚动到"其他可请求的 SSO URL",然后选择"添加另一个"。
- 为其他 SAML 应用程序添加单点登录 URL,包括每个应用程序的索引值。使用格式:http://localhost:8000/saml。
- 然后,向下滚动并选择下一步。
- 在反馈页面上,选择完成。
使用 OIDC
要使用 OIDC 将多个 Amazon Q Business 自定义应用程序连接到 Okta,请按照以下步骤操作:
- 登录 Okta 并转到管理控制台。
- 从常规,向下滚动到常规设置,然后选择编辑。
- 从登录,对于登录重定向 URI,然后选择编辑。
- 在登录重定向 URI 中,选择添加 URI 以添加多个 URI。然后,选择"保存"。
创建 IAM API 应用程序
完成下面提到的步骤,使用 API 创建 IAM 联合应用程序
先决条件
在开始设置进行 Sig V4 身份验证 API 调用之前,请确保您已完成以下操作:
- 创建 Amazon Q Business 应用程序。
- 创建 Okta IdP 实例并设置用户和组。这些步骤也适用于连接到您的 IAM 实例的其他身份提供商。
- 为您的 Amazon Q Business 应用程序创建 IAM 实例,并将 Okta 连接为您的身份源。
- 配置对 AWS CLI 的访问权限。
一次性设置
以下部分概述了设置 Amazon Q Business 控制平面的步骤。您只需执行一次这些步骤。
- 在 Okta 中创建 OIDC 应用集成。
- 使用以下命令创建 IAM 身份提供商:
aws iam \ create-open-id-connect-provider \ --url issuer-url
- 创建一个名为 strategies 的目录。 <
- 在该目录中,创建并保存一个名为 trustpolicyforfederation.json 的文件,其中包含以下 JSON:
{ "Version": "2012-10-17", "Statement": { "Sid": "RoleForOkta", "Effect": "Allow", "Principal": { "Federated": "OpenIdConnectProviderArn" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "issuer-url:aud": "client-id" } } } }
接下来,为您的 Web 体验创建 IAM 策略。为此,请执行以下步骤:
在策略目录中,创建并保存一个名为 permspolicyforfederation.json 的新文件,其中包含以下 JSON:
"Version": "2012-10-17", "Statement": [{ "Sid": "QBusinessConversationPermissions", "Effect": "Allow", "Action": [ "qbusiness:Chat", "qbusiness:ChatSync", "qbusiness:ListMessages", "qbusiness:ListConversations", "qbusiness:PutFeedback", "qbusiness:DeleteConversation", "qbusiness:GetWebExperience", "qbusiness:GetApplication", "qbusiness:ListPlugins", "qbusiness:GetChatControlsConfiguration", "qbusiness:ListRetrievers" ], "Resource": "arn:aws:qbusiness:{{region}}:{{source_account}}:application/{{application_id}}" }, { "Sid": "QBusinessRetrieverPermission", "Effect": "Allow", "Action": [ "qbusiness:GetRetriever" ], "Resource": [ "arn:aws:qbusiness:{{region}}:{{source_account}}:application/{{application_id}}", "arn:aws:qbusiness:{{region}}:{{source_account}}:application/{{application_id}}/retriever/*" ] }, { "Sid": "QBusinessAutoSubscriptionPermission", "Effect": "Allow", "Action": [ "user-subscriptions:CreateClaim" ], "Condition": { "Bool": { "user-subscriptions:CreateForSelf": "true" }, "StringEquals": { "aws:CalledViaLast": "qbusiness.amazonaws.com" } }, "Resource": [ "*" ] }, { "Sid": "QBusinessKMSDecryptPermissions", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:{{region}}:{{account_id}}:key/[[key_id]]" ], "Condition": { "StringLike": { "kms:ViaService": [ "qbusiness.{{region}}.amazonaws.com", "qapps.{{region}}.amazonaws.com" ] } } }, { "Sid": "QAppsResourceAgnosticPermissions", "Effect": "Allow", "Action": [ "qapps:CreateQApp", "qapps:PredictQApp", "qapps:PredictProblemStatementFromConversation", "qapps:PredictQAppFromProblemStatement", "qapps:ListQApps", "qapps:ListLibraryItems", "qapps:CreateSubscriptionToken" ], "Resource": "arn:aws:qbusiness:{{region}}:{{source_account}}:application/{{application_id}}" }, { "Sid": "QAppsAppUniversalPermissions", "Effect": "Allow", "Action": [ "qapps:DisassociateQAppFromUser" ], "Resource": "arn:aws:qapps:{{region}}:{{source_account}}:application/{{application_id}}/qapp/*" }, { "Sid": "QAppsAppOwnerPermissions", "Effect": "Allow", "Action": [ "qapps:GetQApp", "qapps:CopyQApp", "qapps:UpdateQApp", "qapps:DeleteQApp", "qapps:ImportDocument", "qapps:ImportDocumentToQApp", "qapps:CreateLibraryItem", "qapps:UpdateLibraryItem", "qapps:StartQAppSession" ], "Resource": "arn:aws:qapps:{{region}}:{{source_account}}:application/{{application_id}}/qapp/*", "Condition": { "StringEqualsIgnoreCase": { "qapps:UserIsAppOwner": "true" } } }, { "Sid": "QAppsPublishedAppPermissions", "Effect": "Allow", "Action": [ "qapps:GetQApp", "qapps:CopyQApp", "qapps:AssociateQAppWithUser", "qapps:GetLibraryItem", "qapps:CreateLibraryItemReview", "qapps:AssociateLibraryItemReview", "qapps:DisassociateLibraryItemReview", "qapps:StartQAppSession" ], "Resource": "arn:aws:qapps:{{region}}:{{source_account}}:application/{{application_id}}/qapp/*", "Condition": { "StringEqualsIgnoreCase": { "qapps:AppIsPublished": "true" } } }, { "Sid": "QAppsAppSessionModeratorPermissions", "Effect": "Allow", "Action": [ "qapps:ImportDocument", "qapps:ImportDocumentToQAppSession", "qapps:GetQAppSession", "qapps:GetQAppSessionMetadata", "qapps:UpdateQAppSession", "qapps:UpdateQAppSessionMetadata", "qapps:StopQAppSession" ], "Resource": "arn:aws:qapps:{{region}}:{{source_account}}:application/{{application_id}}/qapp/*/session/*", "Condition": { "StringEqualsIgnoreCase": { "qapps:UserIsSessionModerator": "true" } } }, { "Sid": "QAppsSharedAppSessionPermissions", "Effect": "Allow", "Action": [ "qapps:ImportDocument", "qapps:ImportDocumentToQAppSession", "qapps:GetQAppSession", "qapps:GetQAppSessionMetadata", "qapps:UpdateQAppSession" ], "Resource": "arn:aws:qapps:{{region}}:{{source_account}}:application/{{application_id}}/qapp/*/session/*", "Condition": { "StringEqualsIgnoreCase": { "qapps:SessionIsShared": "true" } } }<
aws iam \ create-role \ --role-name --assume-role-policy-document file://policies/trustpolicyforfederation.json \ --policy-document file://policies/permspolicyforfederation.json<
API 调用会话工作流程
首先,使用 Okta 中的 IdToken 调用 AssumeRoleWithWebIdentity API 来获取 AWS 凭证。为此,请使用以下命令:
aws sts assume-role-with-web-identity --role-arn role arn --role-session-name session-name --web-identity-token id-token-from-okta
然后,使用您从 AssumeRoleWithWebIdentity API 调用收到的响应凭证,在命令行环境中设置以下环境变量。
AWS_ACCESS_KEY_ID="identity-aware-sigv4-access-key" AWS_SECRET_ACCESS_KEY="identity-aware-sigv4-secret-key" AWS_SESSION_TOKEN="identity-aware-sigv4-session-token"
然后,使用以下命令进行 Amazon Q Business API 调用:
aws qbusiness \ chat-sync \ --application-id application-id --user-message sample-chat-request