

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 針對 Amazon Chime SDK 使用 AppKeys 和 TenantIDs
<a name="app-keys-tenant-ids"></a>

您可以使用 AppKeys 和 TenantIDs限制*從網路*存取特定應用程式的 Amazon Chime SDK WebRTC 媒體工作階段。

開發人員使用 Amazon Chime 開發套件來建立透過 UDP 傳送和接收即時影片的應用程式。應用程式使用者需要[https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)子網路的 UDP 存取權。Organizations （網路擁有者） 可以使用 AppKeys 和 TenantIDs將網路的存取權限制為僅限特定應用程式的 WebRTC 媒體工作階段。

**範例 1：使用 AppKeys**  
如果 App-A 和 App-B 使用 Amazon Chime 開發套件，組織可以允許 App-A 從其網路存取 WebRTC 媒體工作階段，但封鎖 App-B 和任何其他使用 Amazon Chime 開發套件的應用程式。Organizations 可以使用 App-A 的 AppKey 和 HTTPS 代理來執行此操作。如需詳細資訊[限制對特定應用程式的存取](#limit-app-access)，請參閱本主題稍後的 。

**範例 2：使用 AppKeys 和 TenantIDs**  
如果 App-A 可供許多客戶公開使用，則組織可能希望允許 App-A 在使用者屬於工作階段的一部分時從其網路存取 WebRTC 媒體工作階段，並封鎖對所有其他 App-A 工作階段的存取。組織可以使用應用程式的 AppKey、組織的 TenantID 和 HTTPS 代理來執行此操作。如需詳細資訊[限制對特定租用戶的存取](#limit-tenant-access)，請參閱本主題稍後的 。

若要使用 AppKeys 和 TenantIDs，您必須擁有允許將 HTTPS 標頭新增至請求的 HTTPS 代理伺服器。下圖顯示 AppKeys 和 TenantIDs 的運作方式。

![圖表顯示 AppKeys 和TenantIDs如何控制應用程式和租用戶對 WebRTC 工作階段的存取。](http://docs.aws.amazon.com/zh_tw/chime-sdk/latest/dg/images/app-key-diagram.png)


在影像中，App-A 具有租用戶 A-1 和 A-2，而 App-B 具有租用戶 B-1 和 B-2。在此情況下，AppKey 只允許 App-A 連線到 WebRTC 媒體工作階段，而且租戶 ID 只允許租戶 A-1 連線到工作階段。

**Topics**
+ [限制對特定應用程式的存取](#limit-app-access)
+ [限制對特定租用戶的存取](#limit-tenant-access)
+ [HTTPS 標頭範例](#header-examples)

## 限制對特定應用程式的存取
<a name="limit-app-access"></a>

*AppKey* 是 Amazon Chime 為每個 AWS 帳戶建立的一致、唯一的 256 位元值。如果您沒有 AppKey，您可以從 Amazon Support 請求。如果您有多個 AWS 帳戶，您可以為所有帳戶請求通用 AppKey。

**注意**  
您可以安全地公開共用您的 AppKeys並讓其他組織限制從其網路存取。

Amazon Chime SDK 會根據用來建立工作階段 AWS 的帳戶 ID，自動將每個 WebRTC 媒體工作階段與 AppKey 建立關聯。若要限制*從網路*存取特定應用程式，請執行下列動作：

1. 透過 HTTPS 代理伺服器將所有傳出請求路由到`CHIME_MEETINGS`子網路。

1. 設定代理伺服器，將下列標頭新增至`CHIME_MEETINGS`子網路的所有傳出請求：

   `X-Amzn-Chime-App-Keys:` {{允許 AppKeys 的逗號分隔清單}}。

   例如， `X-Amzn-Chime-App-Keys:{{AppKey-A}},{{AppKey-B}},{{AppKey-C}}` 允許與這些 AppKeys 相關聯的應用程式存取子網路。

Amazon Chime SDK 會檢查 `X-Amzn-Chime-App-Keys`標頭的傳入 WebRTC 媒體工作階段連線，並套用下列邏輯：

1. 如果`X-Amzn-Chime-App-Keys`標頭存在且包含工作階段的 AppKey，請接受連線。

1. 如果 `X-Amzn-Chime-App-Keys`標頭存在，但不包含工作階段的 AppKey，請拒絕出現 403 錯誤的連線。

1. 如果`X-Amzn-Chime-App-Keys`標頭不存在，請接受連線。如果使用者可以從組織的網路外部存取應用程式，他們也可以存取工作階段。

## 限制對特定租用戶的存取
<a name="limit-tenant-access"></a>

*TenantID* 是由開發人員建立的不透明識別符。請記住下列有關 TenantIDs的資訊：
+ TenantIDs 不保證應用程式之間是唯一的，因此您必須為每個 TenantID 清單指定 AppKey。
+ TenantIDs 具有大小寫意義。完全依照開發人員的指示輸入。
+ 組織可以限制對多個應用程式的存取，但只能為其中一些應用程式指定 TenantIDs。沒有 TenantIDs的應用程式可以連線到所有 WebRTC 媒體工作階段。

若要將媒體工作階段與 TenantIDs建立關聯，開發人員必須先將 `TenantIds` 屬性和 TenantIDs清單新增至 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html)或 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html)請求。

例如：

`CreateMeeting(..., TenantIds : [ tenantId1, tenantId2 ] )`

若要限制在特定應用程式中從組織的網路存取其 WebRTC 媒體工作階段，請執行下列動作：

1. 請遵循 [限制對特定應用程式的存取](#limit-app-access) 中的步驟。

1. 設定 HTTPS 代理伺服器，在傳出連線上新增 `X-Amzn-Chime-Tenants`標頭。包含 AppKeys 和 TenantIDs的清單，如本範例所示進行分隔： `X-Amzn-Chime-Tenants: {{AppKey-A}}:{{tenantId-A-1}},{{tenantId-A-2}};{{AppKey-B}}:{{tenantId-B-1}},{{tenantId-B-2}}`

Amazon Chime SDK 會檢查 `X-Amzn-Chime-Tenants`標頭的傳入 WebRTC 媒體工作階段連線，並套用下列邏輯：
+ 如果 標頭包含工作階段的 `AppKey:tenantId`，請接受連線。
+ 如果 標頭包含工作階段的 ，`AppKey`但沒有相符的 `tenantId`，請使用 403 錯誤拒絕連線。
+ 如果 標頭*不包含*工作階段的 `AppKey`，請接受連線。
+ 如果 標頭包含工作階段的 `AppKey`，但工作階段沒有至少一個允許的 `tenantId`，請拒絕出現 403 錯誤的連線。這可能是開發人員錯誤。
+ 如果標頭不存在，請接受連線。如果使用者可以從組織的網路外部存取應用程式，他們也可以存取所有工作階段。

## HTTPS 標頭範例
<a name="header-examples"></a>

下列範例示範在 HTTPS 標頭中使用 AppKeys 和 TenantIDs 的一些方法。

**一個應用程式與一個租用戶**  
`X-Amzn-Chime-App-Keys: {{AppKey}}`  
`X-Amzn-Chime-Tenants: {{AppKey}}:{{orgId}}`  
使用者只能在指定的應用程式中存取組織的 WebRTC 媒體工作階段。所有其他應用程式都會遭到封鎖。

**一個具有兩個租用戶的應用程式**  
`X-Amzn-Chime-App-Keys: {{AppKey}}`  
`X-Amzn-Chime-Tenants: {{AppKey}}:{{engineeringId}},{{salesId}}`  
使用者只能在指定的應用程式中存取用於工程和銷售的媒體工作階段。所有其他應用程式都會遭到封鎖。

**兩個應用程式，一個僅限租用戶**  
`X-Amzn-Chime-App-Keys: {{AppKey1}},{{AppKey2}}`  
`X-Amzn-Chime-Tenants: {{AppKey1}}:{{orgId}}`  
使用者只能存取應用程式 1 中組織的媒體工作階段，以及應用程式 2 中的任何工作階段。所有其他應用程式都會遭到封鎖。