Zertifikate ausstellen, die die Identität Dritter bestätigen
In dieser Anleitung wird gezeigt, wie Sie Zertifikate ausstellen können, die eine Drittanbieter-Identität Identitätsreflexion und Workload Identity-Pools.
Mit der Identitätsreflexion können Sie Zertifikate erstellen, die mit der bestätigten Identität eines Zertifikatsanfragers übereinstimmen. Mithilfe der Identitätsreflexion können Sie nicht privilegierte Zertifikate anfordern, nur Zertifikate mit einer Alternativer Antragstellername (Subject Alternative Name, SAN), der der Identität in ihrem Anmeldedaten
Lernziele
In dieser Anleitung erfahren Sie, wie Sie CA Service verwenden können mit Workload Identity-Pools, um eine Drittanbieteridentität zu verbinden und eine Zertifikat, das diese Identität bestätigt.
Hinweise
Bevor Sie beginnen, sollten Sie sich mit den folgenden Konzepten vertraut machen:
- Workload Identity-Pools: Mit Workload Identity-Pools können Sie Identitätsanbieter. Weitere Informationen finden Sie unter Workload Identity-Pools und -Anbieter verwalten
- Identitätsföderation von Arbeitslasten: Die Identitätsföderation von Arbeitslasten nutzt Workload Identity-Pools, um Drittanbieteridentitäten Zugriff auf Google Cloud zu gewähren . Weitere Informationen finden Sie unter Workload Identity“ Föderation.
- Security Token Service (STS): Mit dem Security Token Service können Sie Anmeldedaten von Drittanbietern für eigene (Google Cloud)-Tokens. Weitere Informationen Weitere Informationen finden Sie unter Security Token Service.
- Identitätsreflexion: Mit der Funktion zur Reflexion der Identität können bestätigte der Identität des Anforderers wird zum angeforderten Zertifikat weitergeleitet. Weitere Informationen finden Sie unter Identitätsreflexion.
Sie benötigen die folgenden IAM-Funktionen: Rollen:
- Wenn Sie Zertifizierungsstellen (Certificate Authorities, CAs) und CA-Pools verwalten und Zertifikate anfordern möchten, benötigen Sie die Rolle „CA Service Operation Manager“ (
privateca.caManager
). Weitere Informationen zu IAM Rollen für CA Service finden Sie unter Zugriffssteuerung mit IAM - Zum Verwalten von Workload Identity-Pools und -Anbietern benötigen Sie Folgendes:
Rolle „Workload Identity Pool Admin“ (
iam.workloadIdentityPoolAdmin
). - Zum Erstellen eines Dienstkontos benötigen Sie den Dienstkontoadministrator
Rolle (
iam.serviceAccountAdmin
).
Informationen zum Gewähren von IAM-Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen. Sie können dem erforderliche IAM-Rollen für ein Google-Konto, ein Dienstkonto, Google-Gruppe, ein Google Workspace-Konto oder eine Cloud Identity-Domain.
Workload Identity-Pool und -Anbieter einrichten
In dieser Anleitung wird erläutert, wie Sie Google OpenID Connect (OIDC) verwenden. mit einem Dienstkonto kombiniert, um als Identität eines Drittanbieters zu fungieren. Die Der OIDC-Anbieter für Google-Konten agiert als externer Identitätsanbieter (Identity Provider, IdP) und Das Google Cloud-Dienstkonto ist eine Beispielidentität eines Drittanbieters, die von diesem IdP beansprucht wird.
Workload Identity-Pools unterstützen eine Vielzahl von Identitätsanbietern, einschließlich Microsoft Azure/On-Premises Active Directory, AWS und SAML-basierter Identitätsanbieter.
So richten Sie einen Workload Identity-Pool und einen Workload Identity-Anbieter ein: 1. Erstellen Sie eine Arbeitslast, um einen vertrauenswürdigen Satz föderierter Identitäten darzustellen Identitätspool:
```
gcloud iam workload-identity-pools create IDENTITY_POOL_ID --location global --display-name "tutorial-wip"
```
Replace the following:
- <var>IDENTITY_POOL_ID</var>: The unique identifier of the new workload
identity pool.
Anbieter von Workload Identity-Pools für Ihre Drittanbieteridentität erstellen Anbieter:
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID --location global --workload-identity-pool IDENTITY_POOL_ID --display-name "tutorial-oidc" --attribute-mapping "google.subject=assertion.sub" --issuer-uri="https://accounts.google.com"
Ersetzen Sie Folgendes:
- PROVIDER_ID: Die eindeutige Kennung des Identitätsanbieters. den Sie im Workload Identity-Pool erstellen möchten.
Sie können die folgenden Flags an Ihren Anwendungsfall anpassen:
attribute-mapping
: Dieses Flag legt die Zuordnung zwischen der Ansprüche auf die Hauptanforderung von Google,google.subject
.google.subject
ist eine erforderliche Zuordnung, die du für beliebige Ansprüche oder Kombinationen aus Ansprüche mit einer CEL Ausdruck. Weitere Informationen finden Sie unter Attributzuordnung definieren und Bedingung ab.issuer-uri
: Bei OIDC-Anbietern ist dieses Flag ein öffentlich zugänglicher Endpunkt, an den sich Google zur Überprüfung durch Drittanbieter wendet Tokens. Weitere Informationen finden Sie unter Externe Identität vorbereiten Dienstanbieter.
Weitere Informationen zum Einrichten einer Workload Identity finden Sie unter Workload Identity konfigurieren Föderation.
CA-Pool und ausstellende Zertifizierungsstelle erstellen
In diesem Abschnitt wird beschrieben, wie Sie einen CA-Pool erstellen und ihm eine Stamm-CA hinzufügen. Sie können diesen Zertifizierungsstellenpool verwenden, um eine identitätsreflektierte Ausgabe auszugeben Zertifikate. Wenn Sie einen vorhandenen CA-Pool und eine vorhandene Zertifizierungsstelle verwenden möchten, können Sie diesen Abschnitt überspringen.
Anstelle einer Stamm-CA können Sie auch eine untergeordnete Zertifizierungsstelle erstellen. Wird erstellt... eine Stammzertifizierungsstelle verkürzt den Vorgang.
Erstellen Sie einen Zertifizierungsstellenpool in der DevOps-Stufe:
gcloud privateca pools create CA_POOL_ID --location LOCATION --tier devops
Ersetzen Sie Folgendes:
- CA_POOL_ID – die ID des CA-Dienst-Zertifizierungspools, der Zertifikate ausgibt.
- LOCATION – Der Standort des Zertifizierungsstellenpools.
Weitere Informationen zum Erstellen von CA-Pools finden Sie unter Erstellen Sie einen Zertifizierungsstellenpool.
Erstellen Sie eine Stammzertifizierungsstelle:
gcloud privateca roots create CA_ID --pool CA_POOL_ID --location LOCATION --subject "CN=test,O=test-org"
Ersetzen Sie Folgendes:
- CA_ID – Die ID der Zertifizierungsstelle, die Zertifikate ausstellt.
- CA_POOL_ID – die ID des CA-Dienst-Zertifizierungspools, der Zertifikate ausgibt.
- LOCATION – Der Standort des Zertifizierungsstellenpools.
Weitere Informationen zum Erstellen einer Stammzertifizierungsstelle finden Sie unter Erstellen Sie eine Root-Zertifizierungsstelle.
Aktivieren Sie Identitäten, die aus dem Workload Identity-Pool föderiert werden, um sie auszugeben Zertifikate aus dem CA-Pool. Die Identitätsreflexion erfordert die Anforderer von CA Service-Arbeitslastzertifikaten (
roles/privateca.workloadCertificateRequester
) IAM-Rolle für Anforderer vonCreateCertificate
Sie können Workload Identity-Pool-Hauptkonten in verschiedenen Detailebenen darstellen, von einem einzelnen Subjekt bis hin zu allen Identitäten im Pool über alle Anbieter hinweg. Weitere Informationen finden Sie in den verfügbaren Hauptkonten oder Hauptkontogruppen (Tab „Google Cloud CLI“), die am besten zu Ihrem Anwendungsfall passen.
gcloud privateca pools add-iam-policy-binding CA_POOL_ID --location LOCATION --role roles/privateca.workloadCertificateRequester --member "principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/*"
Ersetzen Sie Folgendes:
- PROJECT_NUMBER: die Projektnummer des Projekts, in dem Sie den Workload Identity-Pool erstellt.
Dienstkonto erstellen, das die Identität eines Drittanbieters repräsentiert
Bei der folgenden Anleitung wird davon ausgegangen, dass ein Dienstkonto für einen Drittanbieter steht. In diesem Abschnitt wird gezeigt, wie Sie den
GenerateIdToken
IAM-Endpunkt zum Abrufen einer Drittanbieteridentität in der Form
Ein OIDC-Token. Je nach Anwendungsfall müssen Sie
möglicherweise unterschiedliche Schritte ausführen,
Drittanbieter-Identitätstoken Ihrer Wahl abrufen.
gcloud iam service-accounts create SERVICE_ACCOUNT
Ersetzen Sie Folgendes:
- SERVICE_ACCOUNT – Die ID des Dienstkontos, das den Identität von Drittanbietern.
Zertifikat zur Bestätigung der Identität eines Drittanbieters ausstellen
Sie benötigen den Ersteller von Dienstkonto-Tokens, bevor Sie beginnen
(roles/iam.serviceAccountTokenCreator
) IAM-Rolle. Das brauchst du
IAM-Rolle zum Aufrufen der GenerateIdToken
API.
So erhalten Sie ein Zertifikat, das die Identität eines Drittanbieters bestätigt:
Fordern Sie ein Drittanbieter-Identitätstoken von Ihrem externen Identitätsanbieter an.
curl
export ID_TOKEN=`curl -d '{"audience":"//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/providers/PROVIDER_ID"}' -H 'Content-Type: application/json' -H "Authorization: Bearer $(gcloud auth print-access-token)" https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com:generateIdToken | python3 -c "import sys;import json;print(json.load(sys.stdin)['token'])"`
Ersetzen Sie Folgendes:
- PROJECT_ID – Die Google Cloud-Projekt-ID für das Projekt, das Sie erstellen Ressourcen erstellen möchten.
Clientbibliotheken
.Für den programmatischen Zugriff auf das Drittanbieter-Token können Sie ein Token von einem dateibasierte Anmeldedaten oder URL-basierte Anmeldedaten. Weitere Informationen Siehe Mit Clientbibliotheken, der gcloud CLI authentifizieren, oder Terraform. In dieser Anleitung folgen wir dem Workflow für Anmeldedaten aus Dateiquellen.
Laden Sie Ihre Anmeldedaten in einen Pfad, der für Ihr Zertifikat lesbar ist Antragsteller:
curl -d '{"audience":"//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/providers/PROVIDER_ID"}' -H 'Content-Type: application/json' -H "Authorization: Bearer $(gcloud auth print-access-token)" https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com:generateIdToken | python3 -c "import sys;import json; print(json.load(sys.stdin)['token']) > /tmp/oidc_token.txt
Ersetzen Sie Folgendes:
- PROJECT_ID: die Projekt-ID des Projekts, Ressourcen erstellen möchten.
Drittanbietertoken mithilfe von STS gegen ein föderiertes OAuth-Token austauschen Endpunkt
token
:curl
export STS_TOKEN=`curl -L -X POST 'https://sts.googleapis.com/v1/token' -H 'Content-Type: application/json' \ -d '{ "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange", "audience": "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/providers/PROVIDER_ID", "requested_token_type": "urn:ietf:params:oauth:token-type:access_token", "scope": "https://www.googleapis.com/auth/cloud-platform", "subject_token": "'$ID_TOKEN'", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt" }' | python3 -c "import sys;import json; print(json.load(sys.stdin)['access_token'])"`
Clientbibliotheken
- Anmeldedaten erstellen
Konfigurationsdatei namens
oidc_token.txt
, die das Zertifikat anfragenden Code auslesen kann, um einen Tokenaustausch durchzuführen.
gcloud iam workload-identity-pools create-cred-config projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID --output-file=/tmp/cred_config.json --credential-source-file=/tmp/oidc_token.txt
- Die Datei
oidc_token.txt
lesen, um den Autorisierungsmechanismus im Client festzulegen Bibliothek:
Python
import json from google.auth import identity_pool with open('/tmp/cred_config.json', 'r') as f: json_config_info = json.loads(f.read()) credentials = identity_pool.Credentials.from_info(json_config_info) scoped_credentials = credentials.with_scopes( ['https://www.googleapis.com/auth/cloud-platform'])
- Anmeldedaten erstellen
Konfigurationsdatei namens
Senden Sie mit dem Modus für Betreffanfrage in
REFLECTED_SPIFFE
:curl
Optional: Wenn Sie keine CSR haben, erstellen Sie eine CSR, indem Sie den folgenden Befehl.
export TUTORIAL_CSR=$(openssl req -newkey rsa:2048 -nodes -subj / -keyout tutorial_do_not_use.key)
Fordern Sie ein Zertifikat mit der CSR, einer Lebensdauer und einem Modus für Betreffanfrage:
curl -H "Authorization: Bearer $(echo $STS_TOKEN)" https://privateca.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/caPools/CA_POOL_ID/certificates\?alt\=json -X POST -H "Content-Type: application/json" -H 'Accept: application/json' --data '{"lifetime": "100s", "pemCsr": "'$TUTORIAL_CSR'", "subjectMode": "REFLECTED_SPIFFE"}'
Clientbibliotheken
Zum Weiterleiten des eigenen Tokens an CA Service müssen Sie einen Client mit Anmeldedaten erstellen. Anschließend können Sie diesen Client mit Anmeldedaten , um Zertifikatsanfragen zu stellen:
Initiieren Sie einen berechtigten CA Service-Client:
Python
caServiceClient = privateca_v1.CertificateAuthorityServiceClient(credentials=scoped_credentials)
Fordern Sie ein Zertifikat an.
Python
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei CA Service zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Bestätigen Sie das Zertifikat. Ihr Zertifikat sollte einen Betreff haben mit einem einzelnen URI-SAN. Der SAN, der eine Identität bestätigt, im folgenden Format:
spiffe://IDENTITY_POOL_ID.PROJECT_NUMBER.global.workload.id.goog/subject/<oidc_subject_number>
Ersetzen Sie:
- IDENTITY_POOL_ID: Die eindeutige Kennung des Workload Identity-Pool.
- PROJECT_NUMBER: die Projektnummer des Projekts, in dem Sie den Workload Identity-Pool erstellt haben.
Bereinigen
Um zu vermeiden, dass Ihrem Google Cloud-Konto Gebühren für CA Service-Ressourcen, die Sie im Anschluss an dieses Dokument erstellt haben, führen Sie folgende Vorgänge mit der Google Cloud CLI ausführen:
Löschen Sie die von Ihnen erstellte Zertifizierungsstelle.
Deaktivieren Sie die Zertifizierungsstelle:
gcloud privateca roots disable CA_ID --pool CA_POOL_ID --location LOCATION
Ersetzen Sie:
- CA_ID: Die eindeutige Kennung der Zertifizierungsstelle.
- CA_POOL_ID: Die eindeutige Kennung des Zertifizierungsstellenpools.
- LOCATION: Der Standort des Zertifizierungsstellenpools.
Löschen Sie die Zertifizierungsstelle:
gcloud privateca roots delete CA_ID --pool CA_POOL_ID --location LOCATION --ignore-active-certificates
Ersetzen Sie:
- CA_ID: Die eindeutige Kennung der Zertifizierungsstelle.
- CA_POOL_ID: Die eindeutige Kennung des Zertifizierungsstellenpools.
- LOCATION: Der Standort des Zertifizierungsstellenpools.
Löschen Sie den von Ihnen erstellten Zertifizierungsstellenpool.
gcloud privateca pools delete CA_POOL_ID --location LOCATION
Ersetzen Sie:
- CA_POOL_ID: Die eindeutige Kennung des Zertifizierungsstellenpools.
- LOCATION: Der Standort des Zertifizierungsstellenpools.
Weitere Informationen zum Befehl
gcloud privateca pools delete
finden Sie unter gcloud privateca pools delete.Löschen Sie den von Ihnen erstellten Workload Identity-Pool:
gcloud iam workload-identity-pools delete IDENTITY_POOL_ID --location global
Ersetzen Sie:
- IDENTITY_POOL_ID: Die eindeutige Kennzeichnung der Arbeitslast Identitätspool.
Löschen Sie das erstellte Dienstkonto:
gcloud iam service-accounts delete SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
Ersetzen Sie:
- SERVICE_ACCOUNT: Die eindeutige Kennzeichnung der Arbeitslast Identitätspool.
- PROJECT_ID: Das Projekt, zu dem das Dienstkonto gehört.
Die CA Service-Arbeitslast
Zertifikatsanforderer (privateca.workloadCertificateRequester
)
Die IAM-Rolle beschränkt das Subjekt des ausgestellten Zertifikats auf
die Identität des Antragstellers. Achten Sie darauf, dass Nutzer oder Arbeitslasten, die die Identität verwenden,
Reflexionsfunktion wird nur dem CA Service gewährt
Anforderer von Arbeitslastzertifikaten (privateca.workloadCertificateRequester
)
IAM-Rolle Um sich an das Prinzip der geringsten Berechtigung zu halten, können Sie
es dem Anforderer für CA Service-Zertifikate nicht
(privateca.certificateRequester
) IAM-Rolle.
Nächste Schritte
- Weitere Informationen zu den verschiedenen Richtlinieneinstellungen mit denen Sie die Eigenschaften des angeforderten Zertifikats über ein reflektierte Identität.
- Lesen Sie nach, wie Sie verschiedene Richtlinien konfigurieren und verwalten können. .