Подписание jwt с помощью библиотек Google Python с олицетворенными учетными данными через WIFPython

Программы на Python
Ответить
Anonymous
 Подписание jwt с помощью библиотек Google Python с олицетворенными учетными данными через WIF

Сообщение 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

Подробнее здесь: https://stackoverflow.com/questions/798 ... -through-w
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»