Documentation
¶
Overview ¶
Package moduleidentity — ЛИЧНОСТЬ МОДУЛЯ установки и ЕДИНСТВЕННОЕ её признание по клиентскому сертификату (kaname#984).
Предмет: модулем признаётся только объявленная пара ¶
Личность модуля — пара (пространство имён, служебная учётка), которую объявила установка kaname. Прежде модулем признавался любой проверенный лист нашего домена доверия, чья учётка несла приставку модулей, — в ЛЮБОМ пространстве. Пространство, которого установка не заводила, давало ту же личность, что и настоящее: владелец любого пространства кластера, получивший лист внутреннего центра на учётку нужного имени, становился модулем.
Теперь признание — поиск пары в перечне (Roster). Пара вне перечня не модуль ни на одном пути: ни на ярусах вызывающего обоих слушателей, ни у посредника записи отношений, ни у пола системного читателя, ни у допуска пира без переданной личности.
У каждой личности — профиль ¶
Профиль (Profile) называет закрытый перечень методов внутреннего слушателя, которые личности позволено звать. Перечни методов живут у стража (`authzguard`), здесь — только словарь имён профилей: его спрашивает страж старта, чтобы отвергнуть запись с неизвестным профилем до подъёма.
Почему разбор один и живёт здесь ¶
Признание спрашивают шесть читателей. Разбор, написанный у каждого свой, расходится молча: правка одного не доезжает до другого, и второй продолжает признавать то, что первый уже отвергает. Здесь он один (ParseSAN), и перечень спрашивает ТОТ ЖЕ разбор, которым его записи проверены на старте.
Index ¶
- Constants
- func ParseSAN(d grpcsrv.TrustDomain, san string) (namespace, account string, ok bool)
- func ServiceFromAccount(account string) (string, bool)
- type Gate
- type Identity
- type IssuerSet
- type Profile
- type Roster
- func (r Roster) FromContext(ctx context.Context) (Identity, bool)
- func (r Roster) FromTLSState(d grpcsrv.TrustDomain, st *tls.ConnectionState) (Identity, bool)
- func (r Roster) Identities() []Identity
- func (r Roster) IsDeclared() bool
- func (r Roster) Lookup(d grpcsrv.TrustDomain, san string) (Identity, bool)
- func (r Roster) Require(g Gate) error
- func (r Roster) RequireIssuerBinding(g Gate) error
Constants ¶
const AccountPrefix = "kacho-"
AccountPrefix — приставка учётки модуля: `<приставка><служба>`. Из учётки, а не из отдельной величины, выводится короткое имя службы — по нему решают домен записи отношений и идентификатор служебной учётки модуля.
const EntryShape = "<namespace>/<service-account>=<profile>[@<issuer>]"
EntryShape — форма записи перечня для текстов отказа и справки.
Variables ¶
This section is empty.
Functions ¶
func ParseSAN ¶
func ParseSAN(d grpcsrv.TrustDomain, san string) (namespace, account string, ok bool)
ParseSAN — ЕДИНСТВЕННЫЙ разбор SPIFFE-идентификатора рабочей нагрузки: `spiffe://<домен>/ns/<пространство>/sa/<учётка>`.
Домен — АРГУМЕНТ: разбор спрашивает тот домен, который впустил эту личность. Необъявленный домен не узнаёт никого. Пространство и учётка — по одному сегменту пути: идентификатор с лишними сегментами формы не имеет, и принять его значило бы признать хвост чужого пути.
func ServiceFromAccount ¶
ServiceFromAccount — короткое имя службы, которое несёт учётка модуля. Ложь — учётка приставки модулей не несёт либо имя службы в ней пусто.
Types ¶
type Gate ¶
type Gate struct {
Knob string
}
Gate — вход стража перечня: имя ручки для текста отказа.
type Identity ¶
type Identity struct {
// Namespace — пространство имён, как его назвал сертификат.
Namespace string
// Account — служебная учётка целиком.
Account string
// Service — короткое имя службы, выведенное из учётки (`vpc`, `api-gateway`).
Service string
// Profile — профиль, объявленный установкой для этой пары.
Profile Profile
// Issuer — имя доверенного удостоверяющего центра, который ВПРАВЕ выпускать
// лист этой личности (kaname#988). Пусто — привязки нет: такая запись
// законна только вне боевого режима ([Roster.RequireIssuerBinding]).
Issuer string
}
Identity — признанная личность модуля.
type IssuerSet ¶
type IssuerSet map[string][]*x509.Certificate
IssuerSet — доверенные удостоверяющие центры установки: имя → якоря. Лист признаётся личностью с привязкой, только если его проверенная цепочка оканчивается якорем именно её центра.
type Profile ¶
type Profile string
Profile — имя закрытого перечня методов внутреннего слушателя.
const ( // ProfileEdge — край платформы: фронтируемые им глаголы администрирования и // горячие пути, которые он спрашивает на каждом запросе. ProfileEdge Profile = "edge" // ProfileModuleWriter — модуль-владелец ресурсов: регистрирует свои объекты // и спрашивает решения о доступе. ProfileModuleWriter Profile = "module-writer" // ProfileDataPlane — плоскость данных: только вопрос о доступе. ProfileDataPlane Profile = "data-plane" )
Профили. Словарь ЗАКРЫТ: запись с иным именем страж старта отвергает.
type Roster ¶
type Roster struct {
// contains filtered or unexported fields
}
Roster — перечень личностей модулей, объявленный установкой.
Значение неизменяемо после сборки. Нулевое значение — «не объявлен»: по нему не признаётся никто.
func Parse ¶
Parse собирает перечень из записей установки без доверенных центров: запись, называющая центр, отвергается как называющая необъявленный.
func ParseDeclared ¶
ParseDeclared — суд записей БЕЗ чтения центров: форма каждой записи, единство пары и то, что названный записью центр объявлен по имени (issuerNames).
Это суд стража настройки: он не читает файлов и потому судит профиль посадки на любой машине. Перечень, собранный им, якорей не несёт, и личность с привязкой по нему не признаётся — признаёт перечень ParseWithIssuers, собранный из прочитанных центров.
func ParseWithIssuers ¶
ParseWithIssuers собирает перечень из записей установки и её прочитанных доверенных центров.
Запись — EntryShape. Пробелы по краям срезаются, пустые записи отбрасываются: случайно пустая величина (`""` в переменной окружения) не должна становиться записью. Всякая иная неисправность — ошибка с названной записью: страж старта отвергает установку, а не признаёт меньше, чем она объявила. Центр, названный записью, обязан быть объявлен и нести хотя бы один якорь.
func (Roster) FromContext ¶
FromContext — признание вызывающего gRPC-слушателя: идентификатор ПРОВЕРЕННОГО клиентского листа, разобранный доменом, который его впустил, и — у личности с привязкой — проверенная цепочка, оканчивающаяся якорем её центра (kaname#988).
Непроверенный пир, пустой идентификатор, пара вне перечня и лист чужого доверенного центра — не модуль.
func (Roster) FromTLSState ¶
func (r Roster) FromTLSState(d grpcsrv.TrustDomain, st *tls.ConnectionState) (Identity, bool)
FromTLSState — признание пира HTTP-слушателя: URI SAN нашего домена с проверенного листа и — у личности с привязкой — цепочка до якоря её центра. Тот же суд, что Roster.FromContext, на состоянии рукопожатия.
func (Roster) Identities ¶
Identities — объявленные личности в порядке пары: для самоотчёта и проб.
func (Roster) IsDeclared ¶
IsDeclared — объявила ли установка хотя бы одну личность.
func (Roster) Lookup ¶
Lookup — признание идентификатора san, впущенного доменом d, когда цепочки листа под рукой нет.
Личность с привязкой к центру (kaname#988) здесь НЕ признаётся: без проверенной цепочки нечем доказать, что лист выпустил её центр, а признать её по одному имени значило бы снять привязку на этом пути. Ложь — идентификатор формы не имеет, его пары нет в перечне либо личность привязана к центру.
func (Roster) Require ¶
Require — страж перечня боевой посадки: отказ старта, когда установка не объявила ни одной личности.
По пустому перечню не признаётся никто: каждый вызов модуля, край в том числе, отвергается отказом, неотличимым от вызова без личности. Поднявшийся в таком состоянии процесс выглядел бы исправным и не обслуживал бы никого.
func (Roster) RequireIssuerBinding ¶
RequireIssuerBinding — страж привязки боевой посадки (kaname#988): каждая объявленная личность называет центр, который вправе выпускать её лист.
Без привязки доверие ко всем объявленным центрам общее: лист с допустимым SAN признаётся, какой бы из доверенных центров его ни выпустил, и разделение «лист края — только от центра края» держится на порядке выпуска, а не на проверке. Отказ называет каждую непривязанную личность.