Skip to main content

Google Cloud KMS Certificate Service for Swarmauri

Project description

Swarmauri Logo

PyPI - Downloads Hits PyPI - Python Version PyPI - License PyPI - swarmauri_certservice_gcpkms


swarmauri_certservice_gcpkms

Google Cloud KMS backed certificate service for Swarmauri.

This package exposes a GcpKmsCertService component implementing CertServiceBase. It can create CSRs, generate self-signed certificates, issue certificates from CSRs, verify certificates and parse their metadata while using keys stored in Google Cloud KMS.

Features

  • Create certificate signing requests using keys stored in KMS
  • Issue self-signed or CA-signed certificates
  • Verify signatures and validity windows
  • Parse certificate metadata including extensions

Prerequisites

  • A Google Cloud project with the Cloud KMS API enabled
  • Credentials available to the application (for example via the GOOGLE_APPLICATION_CREDENTIALS environment variable)
  • Keys provisioned in Cloud KMS with the AsymmetricSign capability (RSA 2048, EC P-256, or Ed25519).
  • Python 3.10 or newer and the google-cloud-kms dependency (installed via the extras shown below).
  • Network access to the Google Cloud KMS endpoint for the target location.

Installation

# pip
pip install swarmauri_certservice_gcpkms[gcp]

# poetry
poetry add swarmauri_certservice_gcpkms -E gcp

# uv (pyproject-based projects)
uv add "swarmauri_certservice_gcpkms[gcp]"

The optional gcp extra installs the google-cloud-kms dependency.

Usage

Issue a Certificate from a CSR

import asyncio
from datetime import datetime, timedelta, timezone
from pathlib import Path

from swarmauri_certservice_gcpkms import GcpKmsCertService
from swarmauri_core.crypto.types import KeyRef


async def issue_certificate() -> None:
    service = GcpKmsCertService()

    csr_bytes = Path("leaf.csr").read_bytes()
    kms_ca_key = KeyRef(
        kid="projects/my-project/locations/us-central1/keyRings/pki/cryptoKeys/issuing-ca/cryptoKeyVersions/1"
    )

    certificate_pem = await service.sign_cert(
        csr=csr_bytes,
        ca_key=kms_ca_key,
        issuer={"CN": "Example GCP Issuing CA", "O": "Example Corp"},
        not_after=int((datetime.now(timezone.utc) + timedelta(days=365)).timestamp()),
    )

    Path("leaf.pem").write_bytes(certificate_pem)
    print("Issued certificate saved to leaf.pem")


if __name__ == "__main__":
    asyncio.run(issue_certificate())

Create CSRs and Self-Signed Roots

import asyncio
from datetime import datetime, timedelta, timezone
from pathlib import Path

from swarmauri_certservice_gcpkms import GcpKmsCertService
from swarmauri_core.crypto.types import KeyRef


async def bootstrap_pki() -> None:
    service = GcpKmsCertService()

    # Generate a CSR using an exportable private key
    local_key = KeyRef(material=Path("intermediate-key.pem").read_bytes())
    csr_pem = await service.create_csr(
        key=local_key,
        subject={"CN": "Intermediate CA", "O": "Example Corp"},
        san={"dns": ["intermediate.example.com"]},
    )
    Path("intermediate.csr").write_bytes(csr_pem)

    # Create a self-signed root using Cloud KMS
    root_key = KeyRef(
        kid="projects/my-project/locations/us-central1/keyRings/pki/cryptoKeys/root-ca/cryptoKeyVersions/1"
    )
    root_pem = await service.create_self_signed(
        key=root_key,
        subject={"CN": "Example Root CA", "O": "Example Corp"},
        not_after=int((datetime.now(timezone.utc) + timedelta(days=3650)).timestamp()),
    )
    Path("root-ca.pem").write_bytes(root_pem)


if __name__ == "__main__":
    asyncio.run(bootstrap_pki())

Verification and Parsing

import asyncio
from pathlib import Path

from swarmauri_certservice_gcpkms import GcpKmsCertService


async def inspect() -> None:
    service = GcpKmsCertService()
    cert_bytes = Path("leaf.pem").read_bytes()
    root_bytes = Path("root-ca.pem").read_bytes()

    verification = await service.verify_cert(
        cert=cert_bytes,
        trust_roots=[root_bytes],
    )
    print("Valid:", verification["valid"], "Issuer:", verification.get("issuer"))

    metadata = await service.parse_cert(cert_bytes)
    print("Subject:", metadata["subject"])
    print("Not after:", metadata["not_after"])


if __name__ == "__main__":
    asyncio.run(inspect())

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swarmauri_certservice_gcpkms-0.2.3.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

swarmauri_certservice_gcpkms-0.2.3-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file swarmauri_certservice_gcpkms-0.2.3.tar.gz.

File metadata

  • Download URL: swarmauri_certservice_gcpkms-0.2.3.tar.gz
  • Upload date:
  • Size: 11.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for swarmauri_certservice_gcpkms-0.2.3.tar.gz
Algorithm Hash digest
SHA256 65eefad87499ede3f6acf6fcafdcaa9e534318e93806282b196df8fe8af836ea
MD5 fe68aae975b8e5bad8432ce9bd01cc7c
BLAKE2b-256 42da32934fcdc68d5cf633a790bc936c5495b3a12c5dd86634884bba0dbf7037

See more details on using hashes here.

File details

Details for the file swarmauri_certservice_gcpkms-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: swarmauri_certservice_gcpkms-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for swarmauri_certservice_gcpkms-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ce462ced5a8f4cbf99a495173f40601688c37c78e7b14e6e25779345025ea2fc
MD5 843b4ab3cee64aa666d6e04bdf834caa
BLAKE2b-256 3ce8a1ae309ab8aa1e41c7dd12fc4712c36a240f296db1cae9cae551a5d192e4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page