Hugging Face Spaces: избришан клуч може да остане во Git-историјата

|Автор: Уредувачки тим на QUASA|5 мин. читање| 2
Hugging Face Spaces: избришан клуч може да остане во Git-историјата

API-клучот за Hugging Face Space внесете го како Secret во поставките на Space и читајте го во серверскиот дел од апликацијата, наместо да го запишувате во код. Ако клучот веќе бил објавен во Git, прво поништете го кај издавачот, потоа внесете замена во Secrets и исчистете ја историјата на репозиториумот. На заменскиот клуч доделете му само дозволи што ѝ се потребни на апликацијата.

Бришењето на клучот од тековната датотека не го брише од постарите комити. Во истражувањето на јавни Spaces-репозиториуми, меѓу 313.647 анализирани репозиториуми биле најдени 9.149 со протекувања и 11.557 единствени клучеви, а во историјата на комитите биле забележани 3.883 изложувања на клучеви. Затоа одговорот по објавување мора да ја опфати и важноста на клучот и неговите стари копии.

Поставете нов Space без клуч во кодот

Во Settings на својот Space додајте Secret со име што апликацијата ќе го бара, на пример PROVIDER_API_KEY. Во серверскиот Python-код вредноста може да се прочита со os.getenv("PROVIDER_API_KEY"); во Git останува името на променливата, а не клучот. Не ја испишувајте прочитаната вредност во логови, пораки за грешка или одговори што ги добиваат посетителите.

Variables служат за нечувствителни поставки: нивните вредности се јавно видливи и автоматски се пренесуваат при дуплирање на Space. Вредноста на Secret е приватна, не може повторно да се прочита од страницата со поставки и не се пренесува во дупликатот; сопственикот на копијата треба да внесе сопствен клуч. Кај Static Spaces и Secrets се достапни преку клиентски JavaScript. Ако вредноста мора да остане скриена од посетителот, повикот до надворешната услуга треба да се извршува во серверски дел што не ја испраќа во прелистувачот.

Пред првиот commit, додајте ги локалните датотеки со тајни, како .env, во .gitignore. Со git status и git diff --cached проверете кои датотеки и промени навистина ќе се испратат. .gitignore помага за датотеки што Git сè уште не ги следи; не отстранува датотека што веќе била додадена. Проверете ги и README, конфигурациите, примерите и бележниците во кои клучот можел да биде копиран.

Внесете Secret преку CLI без вредност во командата

За внесување од терминал, референцата за Hugging Face CLI ја претпочита формата hf spaces secrets add korisnik/space -s PROVIDER_API_KEY: CLI ја чита вредноста од истоимената локална променлива во околината. Заменете го korisnik/space со идентификаторот на својот Space. Во Bash, вредноста може тивко да се внесе со read -rs PROVIDER_API_KEY, потоа да се извезе со export PROVIDER_API_KEY и да се изврши командата за додавање.

Не ставајте PROVIDER_API_KEY=вистинска-вредност како аргумент на командата: така клучот може да остане во историјата на школката. CLI нуди и --secrets-file за читање од локална датотека; ако ја користите, ограничете го пристапот до неа и не внесувајте ја во Git. Со hf spaces secrets ls korisnik/space може да се проверат имињата на внесените Secrets, но листата не ги открива нивните вредности. Не заменувајте Secret со Variable само затоа што командите изгледаат слично.

По објавување, прво поништете го клучот

Почнете кај услугата што го издала изложениот клуч. Поништете го или ротирајте го така што старата вредност повеќе нема да дава пристап; чистењето на Git може да потрае, а старите копии можеби веќе биле преземени. Создајте заменски клуч, внесете го како Secret и ажурирајте ги само овластените места што го користеле стариот: Space, локален развој или автоматизација.

Проверете дали апликацијата работи со новиот Secret без да ја прикажува неговата вредност. Ако издавачот на клучот нуди евиденција за употреба или трошоци, прегледајте го периодот во кој клучот бил изложен. Ротацијата спречува понатамошна употреба на старата вредност, но сама по себе не кажува дали таа веќе била искористена. За клуч од надворешен провајдер, постапката за поништување и достапните записи зависат од тој провајдер.

Отстранете ги старите копии од Git-историјата

Во целосна локална копија најдете ги погодените патеки и комити. Командата git log --all --name-only -- .env покажува промени на таа патека низ достапните гранки, без да го ставите клучот во командата. Прегледајте и код, конфигурации, документација и ознаки: клучот можел да се појави на повеќе места. Проверка само на последната верзија или на тековната гранка може да ги пропушти старите записи.

Ако цела датотека со тајни треба да исчезне од историјата, git filter-repo може да ја отстрани од погодените комити. На пример, git filter-repo --path .env --invert-paths ја отстранува патеката .env; употребете го само ако тоа е токму датотеката што сакате да ја исфрлите. Кога во датотеката има и корисен код, потребно е насочено отстранување на вредноста наместо бришење на целата патека. Работете во свежа копија и проверете го резултатот пред присилно да ги ажурирате оддалечените гранки и ознаки.

Препишувањето на историјата ги менува идентификаторите на комитите. Усогласете ги соработниците пред објавувањето, за некоја стара локална копија повторно да не ги испрати погодените комити. Потоа земете нова копија од оддалечениот репозиториум и проверете ги релевантните гранки, ознаки и датотеки. Претходно направени копии или вилушки можат да ја задржат старата содржина; затоа поништувањето на клучот е неопходно и по успешно чистење.

Ограничете ги дозволите на заменскиот клуч

Проверете што навистина прави Space со заменскиот клуч. Ако само чита конкретен ресурс, не доделувајте му право на запишување или пристап до неповрзани приватни ресурси. За Hugging Face-токен проверете дали може да се ограничи на потребниот ресурс и дејство; за клуч од друг провајдер користете ги неговите достапни ограничувања. Одделни клучеви за одделни апликации ја олеснуваат следната ротација без прекин на неповрзани услуги.

На крај проверете дека Space ја користи заменската вредност од Secrets и дека прегледаната оддалечена историја не содржи друг активен клуч. Ако откриете уште една изложена вредност, постапете со неа како со посебен компромитиран клуч: поништете ја, утврдете каде се користела и проверете ги дозволите на нејзината замена. При проверките не внесувајте ја самата тајна во пребарувачка команда, јавна пријава за проблем или порака до соработниците.

Прочитајте и:

Сподели:

Претплатете се на нашиот билтен

Добивајте ги најновите вести за Web3, AI и крипто директно во вашето сандаче.

0