{"meta":{"title":"Разрешение пространству кода получить доступ к частному реестру","intro":"Вы можете разрешить GitHub Codespaces доступ к образам контейнеров или другим пакетам в частном реестре.","product":"Codespaces","breadcrumbs":[{"href":"/ru/codespaces","title":"Codespaces"},{"href":"/ru/codespaces/reference","title":"Справочные материалы"},{"href":"/ru/codespaces/reference/allowing-your-codespace-to-access-a-private-registry","title":"Доступ к частному реестру"}],"documentType":"article"},"body":"# Разрешение пространству кода получить доступ к частному реестру\n\nВы можете разрешить GitHub Codespaces доступ к образам контейнеров или другим пакетам в частном реестре.\n\n## О частных реестрах и GitHub Codespaces\n\nРеестр — это безопасное пространство для хранения, управления и получения образов контейнеров или других пакетов. Существует множество примеров реестров, таких как:\n\n* GitHub—sContainer registry, Реестр контейнеров Azure и DockerHub для образов контейнеров\n* Для npm registry пакетов Node.js.\n\nНекоторые GitHub Packages реестры, в том числе Container registryреестры, можно настроить, чтобы пакеты могли быть легко извлечены GitHub Codespaces во время создания пространства кода, не предоставляя учетные данные проверки подлинности.\n\nЧтобы получить доступ к другим реестрам образов контейнеров, можно создать секреты для GitHub хранения сведений о доступе, что позволит GitHub Codespaces получить доступ к образам, хранящимся в этом реестре.\n\n## Доступ к пакетам, хранящимся в реестрах с подробными разрешениями\n\nGitHub Packages реестры, поддерживающие детализированные разрешения, включая Container registryте, которые предоставляют самый простой способ GitHub Codespaces использования пакетов. Список GitHub Packages реестров, поддерживающих детализированные права и бесшовный GitHub Codespaces доступ, см. [Сведения о разрешениях для пакетов GitHub](/ru/packages/learn-github-packages/about-permissions-for-github-packages#granular-permissions-for-userorganization-scoped-packages).\n\n### Доступ к пакету, опубликованному в том же репозитории, что и пространство кода\n\nПри публикации пакета в том же репозитории, в который запускается пространство кода, вы автоматически сможете получить этот пакет при создании пространства кода. Вам не придется предоставлять дополнительные учетные данные, если **только параметр \"Наследовать от репозитория** \" не был выбран при публикации пакета.\n\n#### Наследование доступа от репозитория, из которого был опубликован пакет\n\nПо умолчанию пакет наследует параметр доступа репозитория, из которого он был опубликован. Например, если репозиторий является общедоступным, пакет также является общедоступным. Если репозиторий является частным, пакет также является частным, но доступен из репозитория.\n\nЭто поведение определяется параметром **Наследовать доступ от репозитория**.\n**Наследование доступа от репозитория** по умолчанию выбирается при публикации, GitHub Actionsно не при публикации непосредственно в реестре с помощью .personal access token\n\n**Если параметр \"Наследовать доступ от репозитория**\" не был выбран при публикации пакета, можно вручную добавить репозиторий в элементы управления доступом опубликованного пакета. Дополнительные сведения см. в разделе [Настройка управления доступом и видимости пакета](/ru/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility).\n\n### Доступ к пакету, опубликованному в организации, будет запущено в\n\nЕсли вы хотите, чтобы пакет был доступен для всех пространств кода в организации, рекомендуется опубликовать пакет с внутренней видимостью. Это автоматически сделает пакет видимым для всех пространств кода в организации, если репозиторий, из который не запускается пространство кода, является общедоступным.\n\nЕсли пространство кода запускается из общедоступный репозиторий ссылки на внутренний или частный пакет, необходимо вручную разрешить общедоступный репозиторий доступ к внутреннему пакету. Это предотвращает случайно утечку внутреннего пакета. Дополнительные сведения см. в разделе [Настройка управления доступом и видимости пакета](/ru/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-github-codespaces-access-to-your-package).\n\n### Доступ к частному пакету из подмножества репозиториев в организации\n\nЕсли вы хотите разрешить подмножество репозиториев организации для доступа к пакету или разрешить доступ к внутреннему или частному пакету из пространства кода, запущенного в общедоступный репозиторий, можно вручную добавить репозитории в параметры доступа пакета. Дополнительные сведения см. в разделе [Настройка управления доступом и видимости пакета](/ru/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-github-codespaces-access-to-your-package).\n\n### Публикация пакета из пространства кода\n\nПростой доступ из пространства кода в реестр ограничен извлечением пакетов. Если вы хотите опубликовать пакет из пространства кода, необходимо использовать personal access token (classic) ее с областью `write:packages` .\n\nМы рекомендуем публиковать пакеты с помощью GitHub Actions. Дополнительные сведения см. в разделе \\[AUTOTITLE и [Публикация образов Docker](/ru/actions/tutorials/publish-packages/publish-docker-images)]\\(/actions/tutorials/publish-packages/publish-nodejs-packages).\n\n## Доступ к изображениям, хранящимся в других реестрах\n\nВы можете определить секреты, чтобы разрешить GitHub Codespaces доступ к реестрам образов контейнеров, отличных от GitHub\"s Container registry\". Если вы обращаетесь к образу контейнера из реестра, который не поддерживает простой доступ, GitHub Codespaces проверяет наличие трех секретов, определяющих имя сервера, имя пользователя и personal access token реестр. Если эти секреты найдены, GitHub Codespaces вы получите доступ к реестру в вашем пространстве кода.\n\n* `<*>_CONTAINER_REGISTRY_SERVER`\n* `<*>_CONTAINER_REGISTRY_USER`\n* `<*>_CONTAINER_REGISTRY_PASSWORD`\n\nСекреты можно хранить на уровне пользователя, репозитория или организации, что позволяет безопасно передавать их между различными пространствами кода. При создании набора секретов для частного реестра образов необходимо заменить \"<\\*>\" в имени на постоянный идентификатор. Дополнительные сведения см. в разделе \\[AUTOTITLE и [Управление секретами, специфичными для ваших аккаунтов, для GitHub Codespaces](/ru/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces)]\\(/codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization).\n\nЕсли вы задаете секреты на уровне пользователя или организации, обязательно назначьте эти секреты репозиторию, в котором будет создаваться пространство кода, выбрав политику доступа из раскрывающегося списка.\n\n<img src=\"/assets/images/help/codespaces/secret-repository-access.png\" alt='Screenshot of the \"Repository access\" dropdown menu with the options \"All repositories,\" \"Private repositories,\" and \"Selected repositories.\"' style=\"width:400px;\"/>\n\n### Извлечение образа Docker в пространство кода\n\nGitHub Codespaces использует Docker, поэтому для извлечения частного образа Docker внутри пространства кода во время выполнения необходимо иметь возможность использовать Docker-in-Docker. Чтобы сделать это возможным, секреты, необходимые для входа в Docker, автоматически добавляются в `~/.docker/config.json` файл в пространстве кода. Это происходит после перехватчика жизненного `onCreateCommand` цикла, но до `postCreateCommand`, `postStartCommand`и `postAttachCommand`. В результате `postCreateCommand` можно будет использовать Docker-in-Docker для извлечения образа Docker в пространство кода, но `onCreateCommand` не будет. По этой причине Docker-in-Docker недоступен во время создания предварительной сборки.\n\nПосле запуска пространства кода вы сможете открыть терминал в пространстве кода и выполнить команду `docker pull PRIVATE-IMAGE-URL`.\n\n### Примеры секретов\n\nДля приватного реестра изображений в Azure вы можете создать следующие секреты:\n\n```shell\nACR_CONTAINER_REGISTRY_SERVER = mycompany.azurecr.io\nACR_CONTAINER_REGISTRY_USER = acr-user-here\nACR_CONTAINER_REGISTRY_PASSWORD = <PERSONAL_ACCESS_TOKEN>\n```\n\nСведения об общих реестрах образов см. в разделе [\"Общие серверы реестра образов](#common-image-registry-servers)\". Обратите внимание, что доступ к реестру эластичных контейнеров AWS (ECR) осуществляется другим способом.\n\n![Снимок экрана: параметры \"Секреты Codespaces\" для репозитория. Заданы три секрета для реестра контейнеров ACR.](/assets/images/help/codespaces/codespaces-image-registry-secret-example.png)\n\nПосле добавления секретов может потребоваться остановить и запустить пространство кода, в котором вы находитесь, чтобы новые переменные среды были переданы в контейнер. Дополнительные сведения см. в разделе [Использование палитры команд Visual Studio Code в GitHub Codespaces](/ru/codespaces/reference/using-the-vs-code-command-palette-in-codespaces#suspending-or-stopping-a-codespace).\n\n#### Доступ к реестру эластичных контейнеров AWS\n\nЧтобы получить доступ к реестру эластичных контейнеров AWS (ECR), вы можете предоставить идентификатор ключа доступа AWS и секретный ключ, а GitHub также получить маркер доступа для вас и войти от вашего имени.\n\n```shell\n*_CONTAINER_REGISTRY_SERVER = <ECR_URL>\n*_CONTAINER_REGISTRY_USER = <AWS_ACCESS_KEY_ID>\n*_CONTAINER_REGISTRY_PASSWORD = <AWS_SECRET_KEY>\n```\n\nКроме того, необходимо убедиться в том, что у вас есть соответствующие разрешения IAM AWS для переключения учетных данных (например, `sts:GetServiceBearerToken`) и операции чтения ECR (`AmazonEC2ContainerRegistryFullAccess` или `ReadOnlyAccess`).\n\nКроме того, если вы не хотите GitHub выполнять переключение учетных данных от вашего имени, вы можете предоставить маркер авторизации, извлекаемый через API ИЛИ CLI AWS.\n\n```shell\n*_CONTAINER_REGISTRY_SERVER = <ECR_URL>\n*_CONTAINER_REGISTRY_USER = AWS\n*_CONTAINER_REGISTRY_PASSWORD = <TOKEN>\n```\n\nТак как эти токены являются короткими и должны периодически обновляться, рекомендуется указать идентификатор ключа доступа и секрет.\n\nХотя эти секреты могут иметь любое имя, при условии, что `*_CONTAINER_REGISTRY_SERVER` входит в URL-адрес ECR, мы рекомендуем использовать `ECR_CONTAINER_REGISTRY_*`, если вы не работаете с несколькими реестрами ECR.\n\nДополнительные сведения см. в документации[ по проверке подлинности частного ](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html)реестра AWS ECR.\n\n### Серверы общих реестров образов\n\nНекоторые из серверов общих реестров образов перечислены ниже:\n\n* [DockerHub](https://docs.docker.com/engine/reference/commandline/info/) - `https://index.docker.io/v1/`;\n* [GitHub Реестр контейнеров](/ru/packages/working-with-a-github-packages-registry/working-with-the-container-registry) - `ghcr.io`\n* [Реестр контейнеров Azure](https://docs.microsoft.com/azure/container-registry/) - `<registry name>.azurecr.io`\n* [Реестр эластичных контейнеров AWS](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html) - `<aws_account_id>.dkr.ecr.<region>.amazonaws.com`;\n* [Реестр контейнеров Google Cloud](https://cloud.google.com/container-registry/docs/overview#registries) - `gcr.io` (США), `eu.gcr.io` (Европа), `asia.gcr.io` (Азия).\n\n## Отладка доступа к частному реестру образов\n\nЕсли у вас возникли проблемы с извлечением образа из частного реестра образов, убедитесь, что вы можете успешно выполнить команду `docker login -u <user> -p <password> <server>` со значениями секретов, которые были определены выше. Если вход завершается ошибкой, убедитесь, что учетные данные входа действительны и у вас есть соответствующие разрешения на сервере для получения образа контейнера. Если вход выполнен успешно, убедитесь, что эти значения копируются соответствующим образом в правильные GitHub Codespaces секреты, на уровне пользователя, репозитория или организации и повторите попытку."}