Funkce zabezpečení Live Share

Relace spolupráce v sadě Visual Studio Live Share jsou výkonné v tom, že umožňují, aby se k relaci připojili libovolný počet lidí a mohli spolupracovat na úpravách, ladění a dalších možnostech. Vzhledem k této úrovni přístupu ale nepochybně budete mít zájem o funkce zabezpečení Live Share, které poskytuje. V tomto článku poskytneme několik doporučení a možností zabezpečení vašeho prostředí podle potřeby.

Stejně jako u jakéhokoli nástroje pro spolupráci nezapomeňte, že byste měli sdílet jenom svůj kód, obsah a aplikace s lidmi, kterým důvěřujete.

Připojení

Při zahájení relace mezi partnerskými vztahy se Live Share pokusí navázat připojení peer-to-peer a pouze v případě, že to není možné (např. kvůli bránám firewall/naT), se vrátí k používání cloudového přenosu. V obou typech připojení (P2P nebo relay) se ale všechna data přenášená mezi partnerskými vztahy šifrují pomocí protokolu SSH. V případě přenosového připojení je šifrování SSH vrstvené nad protokolem WEBSocket šifrované protokolem TLS. To znamená, že Live Share nezávisí na cloudové předávací službě kvůli zabezpečení. I když došlo k ohrožení přenosu, nepodařilo se dešifrovat žádnou komunikaci Live Share.

Role služby Live Share je omezená na ověřování uživatelů a zjišťování relací. Samotná služba neukládá ani nikdy nemá přístup k žádnému obsahu relace. Veškerý uživatelský obsah ve službě Live Share se přenáší přes relaci SSH. To zahrnuje kód, terminály, sdílené servery a všechny další funkce pro spolupráci poskytované Live Share nebo rozšířeními, které na něm vycházejí.

Další informace o změně těchto chování a požadavcích na připojení služby Live Share najdete v tématu Požadavky na připojení pro Live Share.

Wire Encryption

Protokol SSH používá výměnu klíčů Diffie-Hellman k vytvoření sdíleného tajného klíče pro relaci a odvozuje z tohoto klíče pro symetrické šifrování AES. Šifrovací klíč se v průběhu relace pravidelně obměňuje. Tajný klíč sdílené relace a všechny šifrovací klíče jsou udržovány pouze v paměti na obou stranách a jsou platné pouze po dobu trvání relace. Nikdy se nezapisují na disk ani se neodesílají do žádné služby (včetně Live Share).

Partnerské ověřování

Relace SSH je také obousměrně ověřená. Hostitel (role serveru SSH) používá ověřování veřejného nebo privátního klíče, stejně jako je standardní pro protokol SSH. Když hostitel sdílí relaci Live Share, vygeneruje pro relaci jedinečný pár veřejného/privátního klíče RSA. Privátní klíč hostitele se uchovává pouze v paměti v hostitelském procesu; nikdy se nezapisuje na disk ani se neodesílají do žádné služby, včetně služby Live Share. Veřejný klíč hostitele se publikuje do služby Live Share spolu s informacemi o připojení relace (IP adresa nebo koncový bod přenosu), kde k němu hosté mají přístup prostřednictvím odkazu na pozvánku. Když se host připojí k relaci SSH hostitele, použije host ověřovací protokol SSH k ověření, že hostitel obsahuje privátní klíč odpovídající publikovanému veřejnému klíči (bez skutečného zobrazení privátního klíče hosta).

Host používá token Live Share k ověření u hostitele. Token je podepsaný JWT vystavený službou Live Share, která zahrnuje deklarace identity uživatele (získané prostřednictvím MSA, AAD nebo přihlášení GitHubu). Token má také deklarace identity, které označují, že host má povolený přístup k dané konkrétní relaci Live Share (protože měl odkaz na pozvánku nebo byl výslovně pozván hostitelem). Hostitel ověří token a zkontroluje deklarace identity (a v závislosti na možnostech může vyzvat uživatele hostitele) před povolením hosta připojit se k relaci.

Pozvánky a přístup k připojení

Pokaždé, když spustíte novou relaci spolupráce, Live Share vygeneruje nový jedinečný identifikátor , který se umístí do odkazu na pozvánku. Tyto odkazy poskytují solidní a bezpečný základ pro pozvání těch, kterým důvěřujete, protože identifikátor v odkazu je "nehoditelný" a je platný pouze po dobu trvání jedné relace spolupráce.

Odebrání neočekávaného hosta

Jako hostitel se automaticky zobrazí oznámení pokaždé, když se host připojí k relaci spolupráce.

V editoru Visual Studio Code:

Visual Studio Code join notification

V sadě Visual Studio:

Visual Studio join notification

Ještě lepší je, že oznámení vám dává možnost odebrat hosta, který se připojil, pokud z nějakého důvodu je neznáte. (Pokud jste například omylem publikovali svůj odkaz v chatovacím systému pro celou společnost a náhodný zaměstnanec se připojil.) Jednoduše klikněte na tlačítko Odebrat v oznámení, které se zobrazí a vysunou se z relace spolupráce.

V nástroji VS Code, i když jste zavřeli oznámení o připojení, máte také možnost po tom odebrat účastníka. Otevřením zobrazení Live Share v Průzkumníkovi nebo na vlastní kartě na panelu aktivit VS Code můžete najet myší na jméno nebo kliknout pravým tlačítkem myši na jméno účastníka a vybrat ikonu nebo možnost Odebrat účastníka.

Remove participant in VS Code

Vyžadování schválení hostem

Účastníci, kteří se připojí k relaci spolupráce, se obvykle přihlásí ke službě Live Share pomocí pracovního nebo školního účtu Microsoft (AAD), osobního účtu Microsoft nebo účtu GitHub. I když výchozí nastavení "oznámení + odebrání" pro přihlášené uživatele poskytuje dobrou kombinaci rychlosti a kontroly pro tyto hosty, možná budete chtít něco víc uzamknout, pokud něco citlivého děláte.

Kromě toho může být za určitých okolností vynucení, aby se všichni hosté přihlásili, aby se připojili k relaci spolupráce. Mezi příklady patří dotaz někoho, kdo je v Live Shareu, aby se připojil jako host, scénář výuky nebo výuka nebo když spolupracujete s někým, kdo nemá některý z podporovaných typů účtů. Z těchto důvodů může Live Share povolit uživatelům, kteří nejsou přihlášení , aby se připojili k relacím spolupráce jako hosté jen pro čtení. I když hostitel musí tyto hosty schválit , než se budou moct ve výchozím nastavení připojit, můžete tyto "anonymní" hosty zakázat nebo je vždy schválit.

Vyžadování schválení hosta pro přihlášené uživatele

Pokud chcete zabránit přihlášení hostů, aby se připojili k relacím spolupráce, dokud je "neschválíte", změňte následující nastavení:

  • V editoru VS Code přidejte následující položky do souboru settings.json (předvolby > souborů > Nastavení):

    "liveshare.guestApprovalRequired": true
    
  • V sadě Visual Studio nastavte Možnosti nástroje >> Live Share > Na hodnotu True ( Vyžadovat schválení hosta).

    Visual Studio settings window with guest approval setting highlighted

Od tohoto okamžiku se zobrazí výzva ke schválení každého hosta, který se připojí.

V editoru Visual Studio Code:

Visual Studio Code join approval request

V sadě Visual Studio:

Visual Studio join approval request

Pokud se jako host připojíte k relaci, ve které je povolené toto nastavení hostitele, budete upozorněni na stavovém řádku nebo v dialogovém okně pro připojení, že Live Share čeká na schválení hostitele.

Automatické odmítnutí nebo přijetí uživatelů, kteří nejsou přihlášení (anonymní)

Jak je popsáno výše, Live Share je možné nakonfigurovat tak, aby se uživatelé, kteří nejsou přihlášení , připojili k relaci spolupráce jako hosté jen pro čtení. I když tito "anonymní" hosté musí při připojování zadat jméno , jednoduchý název neposkytuje stejnou úroveň záruky jako skutečné přihlášení. Ve výchozím nastavení je proto hostitel vyzván ke schválení libovolného anonymního hosta bez ohledu na výše popsané nastavení vyžadovat schválení hosta.

Anonymní uživatele můžete kdykoli odmítnout (zakázat) nebo vždy přijmout anonymní uživatele následujícím způsobem:

  • V editoru VS Code nastavte liveshare.anonymousGuestApproval v souboru settings.json (předvolby > souborů > Nastavení) na accepthodnotu , rejectnebo prompt (výchozí) podle potřeby.

  • V sadě Visual Studio nastavte možnosti nástroje >> Live Share > na Možnost Anonymní schválení hosta tak, aby podle potřeby přijímaly, odmítaly nebo zobrazovaly výzvu (výchozí).

Bez ohledu na to, že byste měli poslat odkazy na pozvánku Live Share jenom lidem, kterým důvěřujete.

Povolení řízení příkazů hosta

VS Code: The host doesn't allowing running this command.

Pokud chcete hostům umožnit spouštění libovolných příkazů prostřednictvím akcí kódu (Rychlé opravy) a CodeLens, nastavte následující nastavení:

  • V editoru VS Code nastavte liveshare.languages.allowGuestCommandControl v souboru settings.json (předvolby > souborů > Nastavení) na true hodnotu nebo false (výchozí).

Řízení přístupu k souborům a viditelnosti

Vzdálený model Live Share jako host vám poskytuje rychlý přístup pro čtení a zápis k souborům a složkám, které s vámi hostitel sdílí, aniž by musel synchronizovat celý obsah projektu. Proto můžete nezávisle procházet a upravovat soubory v celém sdíleném stromu souborů. Tato svoboda však představuje pro hostitele určitá rizika. Vývojář by se mohl rozhodnout přejít do zdrojového kódu a upravit ho bez vašich znalostí nebo zobrazit citlivý zdrojový kód nebo "tajné kódy" umístěné někde ve sdíleném stromu souborů. V důsledku toho nemusíte jako hostitel vždy chtít, aby host měl přístup k celému projektu, který sdílíte. Naštěstí je přidanou výhodou tohoto vzdáleného modelu, že se můžete rozhodnout pro vyloučení souborů, které nechcete sdílet s kýmkoli bez obětování funkčnosti. Hosté se stále mohou účastnit věcí, jako jsou ladicí relace, které by normálně vyžadovaly přístup k těmto souborům, pokud by to chtěli udělat sami.

Toho můžete dosáhnout přidáním souboru .vsls.json do složky nebo projektu, který sdílíte. Všechna nastavení, která přidáte do tohoto souboru ve formátu JSON, změní způsob zpracování souborů Live Share. Kromě toho, že poskytujete přímou kontrolu, je možné tyto soubory také potvrdit do správy zdrojového kódu, aby každý, kdo projekt klonuje, mohl využívat tyto pravidla bez dalšího úsilí na jejich straně.

Tady je příklad souboru .vsls.json:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"none",
    "excludeFiles":[
        "*.p12",
        "*.cer",
        "token",
        ".gitignore"
    ],
    "hideFiles": [
        "bin",
        "obj"
    ]
}

Poznámka:

Můžete také nastavit všechny soubory nebo složky, které sdílíte jen pro čtení, když spustíte relaci spolupráce. Podrobnosti najdete níže .

Pojďme si projít, jak tyto vlastnosti mění, co můžou hosté dělat.

Vlastnosti

Vlastnost excludeFiles umožňuje určit seznam vzorů souborů globu (velmi podobně jako nalezené soubory .gitignore), které brání živé sdílené složce otevřít určité soubory nebo složky pro hosty. Mějte na paměti, že se jedná o scénáře, jako je host , který sleduje nebo přeskočí na místo úprav, přejde do souboru během ladění spolupráce, všechny funkce navigace v kódu, jako je přechod na definici, a další. Je určen pro soubory, které nikdy nechcete sdílet za žádných okolností, jako jsou tajné kódy, certifikáty nebo hesla. Například vzhledem k tomu, že řídí zabezpečení, jsou soubory .vsls.json vždy vyloučeny.

HideFiles vlastnost je podobná, ale ne tak striktní. Tyto soubory jsou jednoduše skryté ve stromu souborů. Pokud jste například během ladění udělali krok do jednoho z těchto souborů, stále se otevře v editoru. Tato vlastnost je primárně užitečná, pokud nemáte nastavení souboru .gitignore (stejně jako v případě, že používáte jiný systém správy zdrojového kódu) nebo pokud chcete jednoduše rozšířit, co už existuje, aby nedocházelo k nepotřebným nebo nejasnostem.

Nastavení gitignore určuje, jak má Live Share zpracovávat obsah souborů .gitignore ve sdílených složkách. Ve výchozím nastavení se všechny globy nalezené v souborech .gitignore považují za zadanou ve vlastnosti hideFiles. Pomocí jedné z následujících hodnot ale můžete zvolit jiné chování:

Parametr Výsledek
none Obsah .gitignore je viditelný pro hosty ve stromu souborů (za předpokladu, že nejsou filtrovány nastavením editoru hostů).
hide Výchozí nastavení Globy uvnitř souboru .gitignore se zpracovávají, jako by byly ve vlastnosti hideFiles.
exclude Globy uvnitř souboru .gitignore se zpracovávají, jako by byly ve vlastnosti excludeFiles.

Nevýhodou exclude nastavení je, že obsah složek, jako je node_modules, jsou často v souboru .gitignore, ale může být užitečné přejít během ladění. Live Share v důsledku toho podporuje schopnost obrátit pravidlo pomocí "! v excludeFiles vlastnost. Například tento soubor .vsls.json by vyloučil všechno v souboru .gitignore s výjimkou node_modules:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"exclude",
    "excludeFiles":[
        "!node_modules"
    ]
}

Pravidla pro skrytí a vyloučení se zpracovávají samostatně, takže pokud chcete skrýt node_modules snížit nepotřebné informace, aniž byste je ve skutečnosti vyloučili, můžete soubor jednoduše upravit následujícím způsobem:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"exclude",
    "excludeFiles":[
        "!node_modules"
    ],
    "hideFiles":[
        "node_modules"
    ]
}

Soubory .vsls.json v podsložkách

A konečně, stejně jako .gitignore, lze soubory .vsls.json umístit do podsložek. Pravidla pro skrytí/vyloučení se určují tak, že začnete se souborem .vsls.json v kořenové složce, kterou jste nasdíleli (pokud je k dispozici), a pak projdete jednotlivé podsložky odsud, aby se soubory .vsls.json mohly zpracovat. Obsah souborů .vsls.jsonch

Poznámka: Soubor (!) není možné znovu zahrnout, pokud je vyloučen nadřazený adresář tohoto souboru. Podobně jako .gitignore budete muset při opětovném zahrnutí souboru také znovu zahrnout všechny nadřazené adresáře souboru.

Zakázání externího sdílení souborů

Live Share ve výchozím nastavení také bude sdílet všechny soubory, které hostitel otevře, které jsou externí do sdílené složky nebo řešení. Díky tomu můžete rychle otevřít další související soubory, aniž byste museli znovu sdílet.

Pokud chcete tuto funkci zakázat:

  • V editoru VS Code přidejte následující položky do souboru settings.json:

    "liveshare.shareExternalFiles": false
    
  • V sadě Visual Studio nastavte Možnosti > nástrojů > Live Share > na Sdílet externí soubory na Hodnotu False.

Režim jen pro čtení

Při sdílení kódu jako hostitele někdy nechcete, aby vaši hosté mohli provádět úpravy. Možná budete potřebovat, aby se host podíval na některý z vašich kódů, nebo zobrazujete projekt velkému počtu hostů a nechcete, aby byly provedeny žádné zbytečné nebo náhodné úpravy. Live Share nabízí možnost sdílet projekty v režimu jen pro čtení.

Jako hostitel máte při sdílení možnost povolit pro relaci spolupráce režim jen pro čtení. Když se host připojí, nebude moct provádět úpravy kódu, i když se budou moct navzájem zobrazovat kurzory a zvýraznění a procházet projekt.

V režimu jen pro čtení můžete hosty společně ladit. Hosté nebudou mít možnost procházet procesem ladění, ale stále můžou přidávat nebo odebírat zarážky a kontrolovat proměnné. Kromě toho můžete servery a terminály (jen pro čtení) sdílet s hosty.

Další informace o spuštění relace spolupráce jen pro čtení: VS CodeVS

Společné ladění

Při řešení náročných problémů s kódováním nebo chyb může být opravdu užitečné mít další pár očí při ladění. Visual Studio Live Share umožňuje "ladění pro spolupráci" nebo "společné ladění" sdílením ladicí relace se všemi hosty při každém spuštění ladění hostitele.

Jako hostitel máte úplnou kontrolu nad tím, kdy se spustí nebo zastaví ladicí relace, ale společné ladění představuje určitá rizika, pokud sdílíte s někým, komu nedůvěřujete. Live Share umožňuje hostům, aby mohli spouštět příkazy konzoly nebo REPL, a proto existuje riziko, že objekt actor se zlými úmysly spustí příkaz, který nechcete, aby běželi.

V důsledku toho byste měli spolupracovat pouze s těmi, kterým důvěřujete.

Víc se uč: VS CodeVS

Sdílení místního serveru

Při společném ladění může být opravdu užitečné mít přístup k různým částem aplikace obsluhované hostitelem pro ladicí relaci. Můžete chtít k aplikaci přistupovat v prohlížeči, mít přístup k místní databázi nebo ke koncovému bodu REST z vašich nástrojů. Live Share umožňuje sdílet server, který mapuje místní port na počítači hostitele na stejný port na počítači hosta. Jako host pak můžete s aplikací pracovat přesně tak, jako kdyby byla spuštěná místně na vašem počítači (např. hostitel a host mají přístup k webové aplikaci spuštěné na počítači. http://localhost:3000).

Jako hostitel byste ale měli být velmi selektivní s porty, které sdílíte s hosty, a sdílet pouze porty aplikací, spíše systémové porty. U hostů se sdílené porty budou chovat přesně stejně, jako kdyby server/služba běžely na vlastním počítači. To je velmi užitečné, ale pokud je sdílený nesprávný port, může být také rizikový. Z tohoto důvodu Live Share neposkytuje žádné předpoklady o tom, co by mělo nebo nemělo být sdíleno bez nastavení konfigurace a hostitel provádějící akci.

V sadě Visual Studio se port webové aplikace zadaný v projektech ASP.NET automaticky sdílí během ladění pouze kvůli usnadnění přístupu hostů k webové aplikaci při spuštění. Pokud ale chcete, můžete tuto automatizaci vypnout nastavením možnosti nástroje >> Live Share > "Sdílet webovou aplikaci při ladění" na False.

V editoru Visual Studio Code se Live Share pokusí rozpoznat správné porty aplikace a sdílet je. Můžete to ale zakázat přidáním následujícího kódu do souboru settings.json:

"liveshare.autoShareServers": false

V obou případech dbejte na to, když sdílíte další porty.

Další informace o konfiguraci této funkce najdete tady: VS CodeVS

Sdílení terminálu

Moderní vývojáři často používají celou řadu nástrojů příkazového řádku. Live Share vám jako hostiteli naštěstí umožňuje volitelné „sdílení terminálu“ s hosty. Sdílený terminál může být jen pro čtení nebo plně spolupracovat, takže vy i hosté můžou spouštět příkazy a zobrazovat výsledky. Jako hostitel můžete ostatním spolupracovníkům povolit, aby viděli výstup nebo použili libovolný počet nástrojů příkazového řádku ke spouštění testů, sestavení nebo dokonce třídění problémů specifických pro prostředí.

Sdílené terminály můžou spustit pouze hostitelé, aby hosté nemohli spustit jeden z nich a dělat něco, co neočekáváte nebo sledujete. Když spustíte sdílený terminál jako hostitel, můžete určit, jestli má být jen pro čtení nebo pro čtení a zápis. Když je terminál pro čtení a zápis, může každý zadat do terminálu včetně hostitele, což usnadňuje zásah hosta, pokud něco, co se vám nelíbí. Abyste však byli v bezpečí, měli byste hostům udělit přístup jen pro čtení a zápis, pokud víte, že ho skutečně potřebují, a zůstat u terminálů jen pro čtení pro scénáře, kdy chcete, aby host viděl výstup všech příkazů, které spustíte.

V sadě Visual Studio se terminály ve výchozím nastavení nesdílí. V nástroji VS Code se terminály ve výchozím nastavení automaticky sdílejí jen pro čtení. Můžete to ale zakázat přidáním následujícího kódu do souboru settings.json:

"liveshare.autoShareTerminals": false

Víc se uč: VS CodeVS

Při přihlašování pomocí pracovní nebo školní e-mailové adresy microsoftu se může při přihlašování zobrazit zpráva "Potřebujete schválení správcem". Je to proto, že Live Share vyžaduje přístup pro čtení k uživatelským informacím pro funkce zabezpečení a váš tenant Azure AD je nastavený tak, aby vyžadoval souhlas správce pro nové aplikace, které přistupují k obsahu adresáře.

Správce ad by to za vás potřeboval vyřešit pomocí následujících informací:

Stačí to udělat jenom jednou pro každého, kdo používá Live Share. Podrobnosti najdete tady a tady .

Viz také

Máte potíže? Podívejte se na článek o odstraňování potíží nebo nám pošlete svůj názor.