Skip to content

Commit 8b3c38e

Browse files
authored
Merge pull request #235313 from MicrosoftDocs/main
4/20 Publish again
2 parents c066615 + cc3bdde commit 8b3c38e

File tree

8 files changed

+322
-299
lines changed

8 files changed

+322
-299
lines changed

articles/communication-services/concepts/interop/guest/capabilities.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,9 @@ When Teams external users leave the meeting, or the meeting ends, they can no lo
174174

175175
*Azure Communication Services provides developers tools to integrate Microsoft Teams Data Loss Prevention that is compatible with Microsoft Teams. For more information, go to [how to implement Data Loss Prevention (DLP)](../../../how-tos/chat-sdk/data-loss-prevention.md)
176176

177-
**Inline image support is currently in public preview and is available in the Chat SDK for JavaScript only. Preview APIs and SDKs are provided without a service-level agreement. We recommend that you don't use them for production workloads. Some features might not be supported, or they might have constrained capabilities. For more information, review [Supplemental Terms of Use for Microsoft Azure Previews.](https://azure.microsoft.com/support/legal/preview-supplemental-terms/)
177+
**Inline images are images that are copied and pasted directly into the send box of Teams client. For images that were uploaded via "Upload from this device" menu or via drag-and-drop (such as dragging images directly to the send box) in the Teams, they are not supported at this moment. To copy an image, the Teams user can either use their operating system's context menu to copy the image file then paste it into the send box of their Teams client, or use keyboard shortcuts instead.
178178

179-
**If the Teams external user sends a message with images uploaded via "Upload from this device" menu or via drag-and-drop (such as dragging images directly to the send box) in the Teams, then these scenarios would be covered under the file sharing capability, which is currently not supported.
179+
**Inline image support is currently in public preview and is available in the Chat SDK for JavaScript only. Preview APIs and SDKs are provided without a service-level agreement. We recommend that you don't use them for production workloads. Some features might not be supported, or they might have constrained capabilities. For more information, review [Supplemental Terms of Use for Microsoft Azure Previews.](https://azure.microsoft.com/support/legal/preview-supplemental-terms/)
180180

181181
## Server capabilities
182182

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
author: cnwankwo
3+
ms.service: azure-communication-services
4+
ms.topic: include
5+
ms.date: 03/01/2023
6+
ms.author: cnwankwo
7+
---
8+
[!INCLUDE [Install SDK](../install-sdk/install-sdk-web.md)]
9+
10+
Spotlight is an extended feature of the core `Call` API. You first need to import calling Features from the Calling SDK:
11+
12+
```js
13+
import { Features} from "@azure/communication-calling";
14+
```
15+
16+
Then you can get the feature API object from the call instance:
17+
18+
```js
19+
const spotLightFeature = call.feature(Features.Spotlight);
20+
```
21+
22+
### Start spotlight for current participant:
23+
To pin the video of the current/local participant, use the following code. This action is idempotent, trying to start spotlight on a pinned participant does nothing
24+
```js
25+
spotLightFeature.startSpotlight();
26+
```
27+
28+
### Spotlight specific participants
29+
Any participant in the call or meeting can be pinned. Only Microsoft 365 users who have an organizer, coorganizer or presenter role can start spotlight for other participants. This action is idempotent, trying to start spotlight on a pinned participant does nothing
30+
```js
31+
// Specify list of participants to be spotlighted
32+
CommunicationUserIdentifier acsUser = new CommunicationUserIdentifier(<USER_ID>);
33+
MicrosoftTeamsUserIdentifier teamsUser = new MicrosoftTeamsUserIdentifier(<USER_ID>)
34+
spotLightFeature.startSpotlight([acsUser, teamsUser]);
35+
```
36+
37+
### Stop spotlight for current participant:
38+
To unpin the video of the current/local participant, use the following code. This action is idempotent, trying to stop spotlight on an unpinned participant does nothing
39+
```js
40+
spotLightFeature.stopSpotlight();
41+
```
42+
43+
44+
45+
### Remove spotlight from participants
46+
Any pinned participant in the call or meeting can be unpinned. Only Microsoft 365 users who have an organizer, coorganizer or presenter role can unpin other participants. This action is idempotent, trying to stop spotlight on an unpinned participant does nothing
47+
```js
48+
// Specify list of participants to be spotlighted
49+
CommunicationUserIdentifier acsUser = new CommunicationUserIdentifier(<USER_ID>);
50+
MicrosoftTeamsUserIdentifier teamsUser = new MicrosoftTeamsUserIdentifier(<USER_ID>)
51+
spotLightFeature.stopSpotlight([acsUser, teamsUser]);
52+
```
53+
54+
### Remove all spotlights
55+
All pinned participants can be unpinned using this API. Only MicrosoftTeamsUserIdentifier users who have an organizer, coorganizer or presenter role can unpin all participants.
56+
```js
57+
spotLightFeature.stopAllSpotLight();
58+
```
59+
60+
61+
62+
### Handle changed states
63+
The `Spotlight` API allows you to subscribe to `spotlightUpdated` events. A `spotlightUpdated` event comes from a `call` instance and contains information about newly spotlighted participants and participants whose spotlight were stopped
64+
```js
65+
// event : { added: SpotlightedParticipant[]; removed: SpotlightedParticipant[] }
66+
// SpotlightedParticipant = { identifier: CommunicationIdentifier, order?: number }
67+
// where:
68+
// identifier: ID of participant whos spotlight state is changed
69+
// order: sequence of the event
70+
71+
const spotlightChangedHandler = (event) => {
72+
console.log(`Newly added spotlight state ${JSON.stringify(event.added)}`);
73+
console.log(`Newly removed spotlight state ${JSON.stringify(event.removed)}`);
74+
};
75+
spotLightFeature.on('spotlightChanged', spotlightChangedHandler);
76+
```
77+
78+
Use the following to stop receiving spotlightUpdated events
79+
```js
80+
spotLightFeature.off('spotlightChanged', spotlightChangedHandler);
81+
```
82+
### Get List of all participants currently spotlighted
83+
To get information about all participants that are spotlighted on the current call, use the following API call. It returns an array of SpotlightedParticipant
84+
```js
85+
let spotlightedParticipants = spotLightFeature.getSpotlightedParticipants();
86+
```

articles/communication-services/tutorials/chat-interop/meeting-interop-features-inline-image.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ ms.custom: mode-other
1616
## Add inline image support
1717
The Chat SDK is designed to work with Microsoft Teams seamlessly. Specifically, Chat SDK provides a solution to receive inline images sent by users from Microsoft Teams. Currently this feature is only available in the Chat SDK for JavaScript.
1818

19+
The Chat SDK for JavaScript provides `previewUrl` and `url` for each inline images. Please note that some GIF images fetched from `previewUrl` might not be animated and a static preview image would be returned instead. Developers are expected to use the `url` if the intention is to fetch animated images only.
20+
1921
[!INCLUDE [Public Preview Notice](../../includes/public-preview-include.md)]
2022

2123
[!INCLUDE [Teams Inline Image Interop with JavaScript SDK](./includes/meeting-interop-features-inline-image-javascript.md)]

articles/container-instances/TOC.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@
7777
href: container-instances-virtual-network-concepts.md
7878
- name: Confidential container groups
7979
href: container-instances-confidential-overview.md
80+
- name: Attestation in Confidential container
81+
href: confidential-containers-attestation-concepts.md
8082
- name: How-to guides
8183
items:
8284
- name: Deploy
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
---
2+
title: Attestation in Confidential containers on Azure Containers Instances
3+
description: full attestation of container groups in confidential containers on Azure Container Instances
4+
ms.topic: conceptual
5+
ms.author: tomcassidy
6+
author: pkhandavilli
7+
ms.service: container-instances
8+
services: container-instances
9+
ms.date: 04/20/2023
10+
---
11+
12+
# What is attestation?
13+
14+
Attestation is an essential part of confidential computing and appears in the definition by the Confidential Computing Consortium “Confidential Computing is the protection of data in use by performing computation in a hardware-based, attested Trusted Execution Environment."
15+
16+
According to the [Remote ATtestation procedureS (RATS) Architecture](https://www.ietf.org/rfc/rfc9334.html) In remote attestation, “one peer (the "Attester") produces believable information about itself ("Evidence") to enable a remote peer (the "Relying Party") to decide whether to consider that Attester a trustworthy peer. Remote attestation procedures are facilitated by an additional vital party (the "Verifier").” In simpler terms, attestation is a way of proving that a computer system is trustworthy.
17+
18+
In Confidential Containers on ACI you can use an attestation token to verify that the container group
19+
20+
- Is running on confidential computing hardware. In this case AMD SEV-SNP.
21+
- Is running on an Azure compliant utility VM.
22+
- Is enforcing the expected confidential computing enforcement policy (cce) that was generated using [tooling](https://github.com/Azure/azure-cli-extensions/blob/main/src/confcom/azext_confcom/README.md).
23+
24+
## Full attestation in confidential containers on Azure Container Instances
25+
26+
Expanding upon this concept of attestation. Full attestation captures all the components that are part of the Trusted Execution Environment that is remotely verifiable. To achieve full attestation, in Confidential Containers, we have introduced the notion of a cce policy, which defines a set of rules, which is enforced in the utility VM. The security policy is encoded in the attestation report as an SHA-256 digest stored in the HostData attribute, as provided to the PSP by the host operating system during the VM boot-up. This means that the security policy enforced by the utility VM is immutable throughout the lifetime of the utility VM.
27+
28+
The exhaustive list of attributes that are part of the SEV-SNP attestation can be found [here](https://www.amd.com/system/files/TechDocs/SEV-SNP%20PSP%20API%20Specification.pdf).
29+
30+
Some important fields to consider in an attestation token returned by [Microsoft Azure Attestation ( MAA )](../attestation/overview.md)
31+
32+
| Claim | Sample value | Description |
33+
|---------------------------|-------------------------------------------------------------|-------------|
34+
| x-ms-attestation-type | sevsnpvm | String value that describes the attestation type. For example, in this scenario sevsnp hardware |
35+
| x-ms-compliance-status | azure-compliant-uvm | Compliance status of the utility VM that runs the container group. |
36+
| x-ms-sevsnpvm-hostdata | 670fff86714a650a49b58fadc1e90fedae0eb32dd51e34931c1e7a1839c08f6f | Hash of the cce policy that was generated during deployment. |
37+
| x-ms-sevsnpvm-is-debuggable | false | Flag to indicate whether the underlying hardware is running in debug mode |
38+
39+
## Sample attestation token generated by MAA
40+
41+
```json
42+
{
43+
"header": {
44+
"alg": "RS256",
45+
"jku": "https://sharedeus2.eus2.test.attest.azure.net/certs",
46+
"kid": "3bdCYJabzfhISFtb3J8yuEESZwufV7hhh08N3ZflAuE=",
47+
"typ": "JWT"
48+
},
49+
"payload": {
50+
"exp": 1680259997,
51+
"iat": 1680231197,
52+
"iss": "https://sharedeus2.eus2.test.attest.azure.net",
53+
"jti": "d288fef5880b1501ea70be1b9366840fd56f74e666a23224d6de113133cbd8d5",
54+
"nbf": 1680231197,
55+
"nonce": "3413764049005270139",
56+
"x-ms-attestation-type": "sevsnpvm",
57+
"x-ms-compliance-status": "azure-compliant-uvm",
58+
"x-ms-policy-hash": "9NY0VnTQ-IiBriBplVUpFbczcDaEBUwsiFYAzHu_gco",
59+
"x-ms-runtime": {
60+
"keys": [
61+
{
62+
"e": "AQAB",
63+
"key_ops": [
64+
"encrypt"
65+
],
66+
"kid": "Nvhfuq2cCIOAB8XR4Xi9Pr0NP_9CeMzWQGtW_HALz_w",
67+
"kty": "RSA",
68+
"n": "v965SRmyp8zbG5eNFuDCmmiSeaHpujG2bC_keLSuzvDMLO1WyrUJveaa5bzMoO0pA46pXkmbqHisozVzpiNDLCo6d3z4TrGMeFPf2APIMu-RSrzN56qvHVyIr5caWfHWk-FMRDwAefyNYRHkdYYkgmFK44hhUdtlCAKEv5UQpFZjvh4iI9jVBdGYMyBaKQLhjI5WIh-QG6Za5sSuOCFMnmuyuvN5DflpLFz595Ss-EoBIY-Nil6lCtvcGgR-IbjUYHAOs5ajamTzgeO8kx3VCE9HcyKmyUZsiyiF6IDRp2Bpy3NHTjIz7tmkpTHx7tHnRtlfE2FUv0B6i_QYl_ZA5Q"
69+
}
70+
]
71+
},
72+
"x-ms-sevsnpvm-authorkeydigest": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
73+
"x-ms-sevsnpvm-bootloader-svn": 3,
74+
"x-ms-sevsnpvm-familyId": "01000000000000000000000000000000",
75+
"x-ms-sevsnpvm-guestsvn": 2,
76+
"x-ms-sevsnpvm-hostdata": "670fff86714a650a49b58fadc1e90fedae0eb32dd51e34931c1e7a1839c08f6f",
77+
"x-ms-sevsnpvm-idkeydigest": "cf7e12541981e6cafd150b5236785f4364850e2c4963825f9ab1d8091040aea0964bb9a8835f966bdc174d9ad53b4582",
78+
"x-ms-sevsnpvm-imageId": "02000000000000000000000000000000",
79+
"x-ms-sevsnpvm-is-debuggable": false,
80+
"x-ms-sevsnpvm-launchmeasurement": "a1e1a4b64e8de5c664ceee069010441f74cf039065b5b847e82b9d1a7629aaf33d5591c6b18cee48a4dde481aa88d0fb",
81+
"x-ms-sevsnpvm-microcode-svn": 115,
82+
"x-ms-sevsnpvm-migration-allowed": false,
83+
"x-ms-sevsnpvm-reportdata": "7ab000a323b3c873f5b81bbe584e7c1a26bcf40dc27e00f8e0d144b1ed2d14f10000000000000000000000000000000000000000000000000000000000000000",
84+
"x-ms-sevsnpvm-reportid": "a489c8578fb2f54d895fc8d000a85b2ff4855c015e4fb7216495c4dba4598345",
85+
"x-ms-sevsnpvm-smt-allowed": true,
86+
"x-ms-sevsnpvm-snpfw-svn": 8,
87+
"x-ms-sevsnpvm-tee-svn": 0,
88+
"x-ms-sevsnpvm-uvm-endorsement": {
89+
"x-ms-sevsnpvm-guestsvn": "100",
90+
"x-ms-sevsnpvm-launchmeasurement": "a1e1a4b64e8de5c664ceee069010441f74cf039065b5b847e82b9d1a7629aaf33d5591c6b18cee48a4dde481aa88d0fb"
91+
},
92+
"x-ms-sevsnpvm-vmpl": 0,
93+
"x-ms-ver": "1.0"
94+
}
95+
}
96+
```
97+
## Generating an attestation token
98+
99+
We have open-sourced sidecar container implementations that provide an easy rest interface to get a raw SNP (Secure Nested Paging) report produced by the hardware or a MAA token. The sidecar is available at this [repository](https://github.com/microsoft/confidential-sidecar-containers) and can be deployed with your container group.
100+
101+
## Next steps
102+
103+
- [Learn how to use attestation to release a secret to your container group](../confidential-computing/skr-flow-confidential-containers-azure-container-instance.md)
104+
- [Deploy a confidential container group with Azure Resource Manager](./container-instances-tutorial-deploy-confidential-containers-cce-arm.md)

0 commit comments

Comments
 (0)