Amazon Q 企業版 - 身份聯合應用



Amazon Q 企業版透過 AWS Identity and Access Management 與您公司的身份系統連線,用於使用者管理和身份驗證。本章將簡要介紹如何使用 IAM 聯合身份訪問管理終端使用者訪問許可權來建立和配置 Amazon Q 企業版應用。

Okta IAM 聯合身份

以下步驟展示如何將 Amazon Q 企業版與 Okta 整合。

先決條件

在開始將 Amazon Q 企業版與 Okta 整合之前,請確保您已:

  • 建立 Okta 帳戶並新增至少一個具有有效電子郵件地址的使用者。
  • 建立包含使用 IAM 聯合身份訪問的 Amazon Q 企業版 Web 體驗中 IAM 角色中概述的許可權的 IAM 策略。

步驟 1:設定 Okta 應用

要建立 Okta 例項,請按照以下步驟操作:

  • 登入 Okta 並進入管理控制檯。
  • 在左側導航窗格中,選擇“應用程式”,然後選擇“建立應用程式整合”。
  • 在“建立新的應用程式整合”頁面上,選擇 SAML 2.0,然後選擇“下一步”。
  • 在“建立 SAML 整合”頁面上的“常規設定”中,為“應用程式名稱”輸入應用程式的名稱,然後選擇“下一步”。
  • 在“配置 SAML”中,執行以下操作:
    • 對於“單點登入 URL”,請輸入您的 Web 應用程式端點。
    • 自定義應用端點 URL 格式:[您的 URL]/saml(例如:https://:8000/saml

      生成的 Web 體驗端點 URL 格式:[您的 URL]/saml(例如:https://abcdefgh.qbusiness.us-east-1.on.aws/saml

    • 取消選中“將其用於接收者 URL”“目標 URL”複選框。
    • 然後,對於“接收者 URL 欄位”,請輸入以下 AWS 端點:https://signin.aws.amazon.com/saml
    • 對於“目標 URL”,請輸入您的 Web 應用程式端點。
    • 自定義應用端點 URL 格式:[您的 URL]/saml(例如:https://:8000/saml

      生成的 Web 體驗端點 URL 格式:[您的 URL]/saml(例如:https://abcdefgh.qbusiness.us-east-1.on.aws/saml

      生成的 Web 體驗端點 URL 格式:目前輸入佔位符 URL(例如:http://sampleurl.com),並在 Amazon Q 企業版應用程式建立過程結束時更新。

    • 對於“受眾 URI”(SP 標識 ID),請輸入以下 AWS 端點:https://signin.aws.amazon.com/saml
    • 對於“名稱 ID 格式”,設定為“持久”。
    • 然後,向下滾動到頁面底部,然後選擇“下一步”。
  • 在“建立 SAML 整合”頁面上選擇最佳選項,然後單擊“完成”。您將被重定向到應用程式摘要頁面。
  • 在應用程式摘要頁面上,從頂部導航選單中選擇“分配”,然後選擇“分配”
  • 接下來,您下載 SAML 負載並複製您的“登入 URL”。

步驟 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 中的 assigned-iam-idp-name。
    • "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 企業版應用

要使用控制檯建立應用程式,請按照以下步驟操作:

  • 登入 AWS 管理控制檯並開啟 Amazon Q 企業版控制檯。
  • 從“工作原理”選單中,選擇“試用快速應用程式”。
  • 在“建立應用程式”頁面上的“應用程式設定”中,輸入您的 Amazon Q 企業版應用程式的應用程式名稱。
  • 在“服務訪問”中,從選項(例如“建立並使用新的服務連結角色 (SLR)”、“建立並使用新的服務角色 (SR)”、“使用現有的服務角色 (SR)/服務連結角色 (SLR)”和“服務角色名稱”)中選擇授權 Amazon Q 企業版的方法。
  • 要自定義您的加密設定,請選擇“自定義加密設定(高階)”。
  • 對於“訪問管理方法”,選擇“IAM Identity Center”。
  • 要在 Amazon Q 企業版中為 IAM Identity Center 整合啟用跨區域呼叫,請先建立一個 IAM Identity Center 例項,然後啟用“啟用跨區域呼叫”。
  • 然後將 Amazon Q 企業版連線到 IAM Identity Center。
  • 要開始建立應用程式,請選擇“建立”。

步驟 5:設定 Q 企業版檢索器

要使用控制檯建立 Amazon Q 企業版檢索器,請按照以下步驟操作:

  • 登入 AWS 管理控制檯並開啟 Amazon Q 企業版控制檯。
  • 完成建立 Amazon Q 企業版應用程式的步驟。
  • 然後,對於“選擇檢索器”,選擇“使用本機檢索器”。
  • “索引配置”中,根據您的用例在“入門”和“企業”索引型別之間進行選擇,並選擇您需要的單元數量。
  • 對於“標籤”,選擇是否要新增索引標籤。
  • 要建立檢索器和索引,請選擇“建立”。

要使用控制檯建立 Amazon Kendra 檢索器,請按照以下步驟操作:

  • 登入 AWS 管理控制檯並開啟 Amazon Q 企業版控制檯。
  • 完成建立 Amazon Q 企業版應用程式的步驟。
  • 在“選擇檢索器”中,選擇“使用現有檢索器”。
  • 在“標籤”中,選擇是否要新增檢索器標籤。
  • 要將您的應用程式環境連線到您的資料來源,請選擇“下一步”。

步驟 6:連結 Q 企業版資料來源

為您的 Amazon Q 企業版應用程式選擇一個檢索器,然後將其連線到資料來源。可用的資料來源取決於您選擇的檢索器。

如果您使用 Amazon Q 企業版檢索器,您可以從以下選項中選擇:

  • 透過使用 CreateDataSource API 操作連線到任何 Amazon Q 企業版支援的資料來源聯結器。
  • 透過使用 BatchPutDocument API 操作直接上傳文件。

步驟 7:管理訪問許可權

要管理使用者訪問許可權,請按照以下步驟操作:

  • 登入 AWS 管理控制檯並開啟 Amazon Q 企業版控制檯。
  • 完成建立 Amazon Q 企業版應用程式的步驟。
  • 將預設訂閱層級設定為 Q 企業版專業版或 Q 企業版精簡版。這將成為所有登入到您的 Web 體驗的使用者預設設定。
  • 選擇“建立應用程式”。

自定義 Web 體驗

要自定義 Amazon Q 企業版 Web 體驗,您需要按照以下步驟操作:

  • 登入AWS 管理控制檯並開啟Amazon Q 企業版控制檯
  • 完成建立 Amazon Q 企業版應用程式的步驟。
  • 然後,在Amazon Q 企業版應用程式環境頁面上,選擇您的應用程式,然後選擇“自定義 Web 體驗”
  • “自定義 Web 體驗”中,從右側導航窗格中選擇“自定義 Web 體驗”
  • 在“自定義 Web 體驗”中,輸入標題、歡迎訊息、顯示示例提示。
  • 然後選擇“儲存”

將應用連線到單個 IdP

您可以將多個 Amazon Q 企業版自定義應用程式連線到單個基於 SAML 2.0 或 OIDC 的身份提供商 (IdP) 應用程式。

使用 SAML

要使用 SAML 將多個 Amazon Q 企業版自定義應用程式連線到 Okta,請按照以下步驟操作:

  • 登入 Okta 並進入管理控制檯。
  • 在左側導航窗格中,選擇“應用程式”,然後選擇您現有的 SAML 2.0 應用程式。
  • 從“常規”中,選擇“SAML 設定”。
  • 保持您的“常規設定”不變,然後選擇“下一步”。
  • 編輯 SAML 整合:在“SAML 設定”中的“常規”下,為您的第一個 SAML 應用程式輸入“單點登入 URL”和“受眾 URI”。
  • 然後,從“常規”中,選擇“顯示高階設定”。
  • 向下滾動到“其他可請求的 SSO URL”,然後選擇“新增其他”。
  • 新增其他 SAML 應用程式的“單點登入 URL”,包括每個應用程式的索引值。使用格式:https://:8000/saml。
  • 然後,向下滾動並選擇“下一步”。
  • 在“反饋”頁面上,選擇“完成”。

使用 OIDC

要使用 OIDC 將多個 Amazon Q 企業版自定義應用程式連線到 Okta,請按照以下步驟操作:

  • 登入 Okta 並進入管理控制檯。
  • 從“常規”中,向下滾動到“常規設定”,然後選擇“編輯”。
  • 從“登入”中,對於“登入重定向 URI”,然後選擇“編輯”。
  • 在“登入重定向 URI”中,選擇“新增 URI”以新增多個 URI。然後,選擇“儲存”。

建立 IAM API 應用

請按照以下步驟完成建立使用 API 的 IAM 聯合身份應用程式。

先決條件

在開始設定進行 Sig V4 身份驗證的 API 呼叫之前,請確保您已完成以下操作:

  • 建立 Amazon Q 企業版應用程式。
  • 建立 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
        
  • 接下來,建立 IAM 角色。為此,請執行以下步驟
    • 建立一個名為 policies 的目錄。
    • 在該目錄中,建立一個名為 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 策略。為此,請執行以下步驟

      在 policies 目錄中,建立一個名為 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"
              }
          }
      }
          
    • 最後,使用以下命令在 IAM 中建立並附加角色
    • 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
廣告
© . All rights reserved.