Я использую действие github google-github-actions/auth@v3 и следую документации по федерации удостоверений рабочей нагрузки через учетную запись службы в GitHub CI. Я создал пул идентификаторов рабочей нагрузки, создал поставщика с предложенными сопоставлениями attr из документации и создал необходимую привязку политики. Кроме того, я предоставил учетной записи службы разрешение на создание токена учетной записи службы.
Я могу успешно использовать API gcloud gcloud iam service-accounts Sign-jwt, чтобы подписать jwt. Я использовал полученный jwt с API-шлюзом, чтобы подтвердить его достоверность при олицетворении учетной записи службы.
В Python я могу создать внешний объект учетных данных и, при необходимости, создать олицетворенный объект учетных данных учетной записи службы, но любой из них не работает при выполнении обновления перед подписанием.
Когда я пытаюсь использовать то, что я считаю эквивалентными вызовами gcloud в клиентских библиотеках Google Python (google.auth.jwt.encode(...)) Я получаю сообщение об ошибке:
google.auth.exceptions.RefreshError: ('Unable to acquire impersonated credentials', '{
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
}')
test.py:
import time
import google.auth
import google.auth.jwt
from google.auth import iam
from google.auth.transport.requests import Request
def test_signing():
credentials, _ = google.auth.default()
now = int(time.time())
payload = {
"iat": now,
"exp": now + 3600,
"iss": "myaccount@project.iam.gserviceaccount.com",
"sub": "myaccount@project.iam.gserviceaccount.com",
"aud": 'myproject',
}
signer = iam.Signer(
Request(),
credentials,
"myaccount@project.iam.gserviceaccount.com"
)
signature = google.auth.jwt.encode(signer, payload)
assert signature
ci.yml:
permissions:
id-token: write
contents: read
jobs:
tests:
env:
GITHUB_ORG: ${{ github.repository_owner }}
timeout-minutes: 5
runs-on: ${{ matrix.os }}
continue-on-error: false
strategy:
matrix:
python-version: ["3.12"]
os: [ubuntu-latest]
steps:
- name: Run action checkout v4
uses: actions/checkout@v4
- name: auth
id: auth
uses: google-github-actions/auth@v3
with:
workload_identity_provider: '../locations/global/workloadIdentityPools/github/providers/myoidc'
service_account: 'myaccount@project.iam.gserviceaccount.com'
project_id: 'myproject'
create_credentials_file: true
export_environment_variables: true
- name: Setup gcloud
uses: google-github-actions/setup-gcloud@v3
- name: sign token
run: |
cat > payload.json
Подробнее здесь: https://stackoverflow.com/questions/798 ... -through-w
Подписание jwt с помощью библиотек Google Python с олицетворенными учетными данными через WIF ⇐ Python
Программы на Python
1768686473
Anonymous
Я использую действие github google-github-actions/auth@v3 и следую документации по федерации удостоверений рабочей нагрузки через учетную запись службы в GitHub CI. Я создал пул идентификаторов рабочей нагрузки, создал поставщика с предложенными сопоставлениями attr из документации и создал необходимую привязку политики. Кроме того, я предоставил учетной записи службы разрешение на создание токена учетной записи службы.
Я могу успешно использовать API gcloud gcloud iam service-accounts Sign-jwt, чтобы подписать jwt. Я использовал полученный jwt с API-шлюзом, чтобы подтвердить его достоверность при олицетворении учетной записи службы.
В Python я могу создать внешний объект учетных данных и, при необходимости, создать олицетворенный объект учетных данных учетной записи службы, но любой из них не работает при выполнении обновления перед подписанием.
Когда я пытаюсь использовать то, что я считаю эквивалентными вызовами gcloud в клиентских библиотеках Google Python (google.auth.jwt.encode(...)) Я получаю сообщение об ошибке:
google.auth.exceptions.RefreshError: ('Unable to acquire impersonated credentials', '{
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
}')
test.py:
import time
import google.auth
import google.auth.jwt
from google.auth import iam
from google.auth.transport.requests import Request
def test_signing():
credentials, _ = google.auth.default()
now = int(time.time())
payload = {
"iat": now,
"exp": now + 3600,
"iss": "myaccount@project.iam.gserviceaccount.com",
"sub": "myaccount@project.iam.gserviceaccount.com",
"aud": 'myproject',
}
signer = iam.Signer(
Request(),
credentials,
"myaccount@project.iam.gserviceaccount.com"
)
signature = google.auth.jwt.encode(signer, payload)
assert signature
ci.yml:
permissions:
id-token: write
contents: read
jobs:
tests:
env:
GITHUB_ORG: ${{ github.repository_owner }}
timeout-minutes: 5
runs-on: ${{ matrix.os }}
continue-on-error: false
strategy:
matrix:
python-version: ["3.12"]
os: [ubuntu-latest]
steps:
- name: Run action checkout v4
uses: actions/checkout@v4
- name: auth
id: auth
uses: google-github-actions/auth@v3
with:
workload_identity_provider: '../locations/global/workloadIdentityPools/github/providers/myoidc'
service_account: 'myaccount@project.iam.gserviceaccount.com'
project_id: 'myproject'
create_credentials_file: true
export_environment_variables: true
- name: Setup gcloud
uses: google-github-actions/setup-gcloud@v3
- name: sign token
run: |
cat > payload.json
Подробнее здесь: [url]https://stackoverflow.com/questions/79863514/signing-jwt-with-google-python-libraries-with-impersonated-credentials-through-w[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия