Cloud Run
The frontend calls a Cloud Run API to create the meeting record and initiate the upload workflow.
A separate Cloud Run service or worker can handle transcription. Separating the public-facing API from the processing component reduces coupling and allows each service to have its own permissions and scaling configuration.
The API service may require permission to write meeting metadata and create uploads. The transcription service may require permission to read audio, call Speech-to-Text, write transcript output, and update processing status.
It should not automatically receive permission to administer buckets, change IAM policies, or access unrelated HR data.
Cloud Storage
Cloud Storage holds the recording because batch transcription works well with audio files already stored in a bucket.
The bucket must not be public. Google Cloud’s public access prevention control protects buckets and objects from accidental exposure through public IAM principals or ACLs. Uniform bucket-level access is also generally preferable to managing independent object ACLs. (Google Cloud Documentation)
A practical object structure might be:
hr-meetings/
organization-id/
employee-id/
meeting-id/
source/
meeting-audio.wav
transcript/
original.json
reviewed.json
The object path improves organization, but it must not be treated as the authorization mechanism. Access should still be controlled through IAM and application-level checks.
IAM and Service Identities
Each Cloud Run component should use a dedicated service identity.
For example:
hr-api-service can create meeting records and generate controlled upload access.
transcription-worker can read only the relevant audio bucket, call Speech-to-Text, and update transcription fields.
review-service can read transcripts and save authorized corrections.
- End users receive role-based access through the organization’s identity layer.
Attaching identities to workloads is preferable to embedding downloadable service-account keys in application configuration. (Google Cloud Documentation)
Speech-to-Text V2
Speech-to-Text V2 performs the transcription.
Google documents multiple transcription models and recommends selecting the method and model according to audio length, language, and use case. Batch recognition is intended for longer files and returns a long-running operation that can be monitored until processing completes. (Google Cloud Documentation)
Model choice should be tested rather than assumed. A configuration that performs well for a clear English-language recording may not be suitable for multilingual meetings, strong accents, overlapping speech, or specialized technical vocabulary.
Firestore
Firestore stores the meeting’s operational state and metadata.
Firestore is a document-oriented database in which documents are organized into collections. This structure suits meeting records because each meeting can be represented as a document with nested status, review, and artifact metadata. (Google Cloud Documentation)
Large audio files should remain in Cloud Storage rather than being written into Firestore. Depending on size and search requirements, full transcripts may also be stored in Cloud Storage while Firestore retains the latest reviewed text or a reference to the transcript artifact.
Secret Manager
Google Cloud client libraries can generally use service identities, so API keys should not be created unnecessarily.
Where the application requires external credentials, signing secrets, or integration tokens, Secret Manager provides managed storage for sensitive values. Google recommends least-privilege access to individual secrets and prefers workload identities over exported service-account credentials. (Google Cloud Documentation)
Cloud Logging
Cloud Logging captures API errors, worker failures, operation identifiers, processing duration, and retry information. It supports storage, search, analysis, monitoring, and alerting for Google Cloud and application logs. (Google Cloud Documentation)
Logs must not become an uncontrolled copy of sensitive HR data. Do not log full transcripts, authentication tokens, signed URLs, or confidential employee details. Google’s client-library guidance specifically warns that logs may contain sensitive information and that access should be restricted. (Google Cloud Documentation)