Zertifikate ausstellen, die die Identität eines Drittanbieters bestätigen
In dieser Anleitung wird gezeigt, wie Sie mithilfe von Identitätsreflexion und Workload Identity-Pools Zertifikate ausstellen, die die Identität eines Drittanbieters bestätigen.
Mit der Identitätsreflexion können Sie Zertifikate erstellen, die mit der bestätigten Identität eines Zertifikatsanfragers übereinstimmen. Mit der Identitätsreflexion können Sie einen Nutzer mit keinen Berechtigungen dazu einschränken, nur Zertifikate mit einem alternativen Antragstellernamen (Subject Alternative Name, SAN) anzufordern, der der Identität in seinen Anmeldedaten entspricht.
Lernziele
In dieser Anleitung erfahren Sie, wie Sie den CA-Dienst mit Workload Identity-Pools verwenden, um eine Identität eines Drittanbieters zu föderieren und ein Zertifikat für diese Identität zu erhalten.
Hinweise
Machen Sie sich vor dem Beginn mit den folgenden Konzepten vertraut:
- Workload Identity-Pools: Mit Workload Identity-Pools können Sie Identitätsanbieter von Drittanbietern verwalten. Weitere Informationen finden Sie unter Workload Identity-Pools und Anbieter verwalten.
- Identitätsföderation von Arbeitslasten: Bei der Identitätsföderation von Arbeitslasten werden Arbeitslastidentitätspools verwendet, um Identitäten von Drittanbietern Zugriff auf Google Cloud-Dienste zu gewähren. Weitere Informationen finden Sie unter Identitätsföderation von Arbeitslasten.
- Security Token Service (STS): Mit dem Security Token Service können Sie Anmeldedaten von Drittanbietern gegen eigene Tokens (Google Cloud) austauschen. Weitere Informationen finden Sie unter Security Token Service.
- Identitätsreflexion: Mit der Identitätsreflexionsfunktion kann die bestätigte Identität eines Zertifikatsanfragers an das angeforderte Zertifikat weitergegeben werden. Weitere Informationen finden Sie unter Identitätsreflexion.
Prüfen Sie, ob Sie die folgenden IAM-Rollen haben:
- 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 den CA-Dienst finden Sie unter Zugriffssteuerung mit IAM. - Wenn Sie Workload Identity-Pools und ‑Anbieter verwalten möchten, benötigen Sie die Rolle „Workload Identity-Pooladministrator“ (
iam.workloadIdentityPoolAdmin
). - Zum Erstellen eines Dienstkontos benötigen Sie die Rolle „Dienstkontoadministrator“ (
iam.serviceAccountAdmin
).
Informationen zum Zuweisen von IAM-Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten. Sie können die erforderlichen IAM-Rollen einem Google-Konto, einem Dienstkonto, einer Google-Gruppe, einem Google Workspace-Konto oder einer Cloud Identity-Domain zuweisen.
Workload Identity-Pool und -Anbieter einrichten
In dieser Anleitung wird erläutert, wie Sie einen Google OpenID Connect (OIDC)-Anbieter in Kombination mit einem Dienstkonto als Identität eines Drittanbieters verwenden können. Der OIDC-Anbieter für Google-Konten fungiert als Drittanbieter-Identitätsanbieter (IDP) und das Google Cloud-Dienstkonto ist eine Beispiel-Drittanbieteridentität, die von diesem IDP bestätigt wird.
Workload Identity-Pools unterstützen eine Vielzahl von Identitätsanbietern, darunter Microsoft Azure/On-Premises Active Directory, AWS und SAML-basierte Identitätsanbieter.
So richten Sie einen Workload Identity-Pool und -Anbieter ein: 1. Wenn Sie eine vertrauenswürdige Gruppe von föderierten Identitäten darstellen möchten, erstellen Sie einen Workload Identity-Pool:
```
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.
So erstellen Sie einen Workload Identity Pool-Anbieter für Ihren Identitätsanbieter:
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
: Mit diesem Flag wird die Zuordnung der Ansprüche von Drittanbietern zum Hauptanspruch von Google,google.subject
, festgelegt.google.subject
ist eine erforderliche Zuordnung, die Sie mit einem CEL auf beliebige Ansprüche oder eine Kombination von Ansprüchen festlegen können. Weitere Informationen finden Sie unter Attributzuordnung und -bedingung definieren.issuer-uri
: Für OIDC-Anbieter ist dieses Flag ein öffentlich zugänglicher Endpunkt, an den Google zur Überprüfung von Drittanbieter-Tokens sendet. Weitere Informationen finden Sie unter Externen Identitätsanbieter vorbereiten.
Weitere Informationen zum Einrichten eines Workload Identity-Anbieters finden Sie unter Workload Identity-Föderation konfigurieren.
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 Identitäts-Zertifikate auszustellen. Wenn Sie einen vorhandenen CA-Pool und eine vorhandene Zertifizierungsstelle verwenden möchten, können Sie diesen Abschnitt überspringen.
Anstatt einer Stamm-CA können Sie auch eine untergeordnete Zertifizierungsstelle erstellen. Das Erstellen einer Stammzertifizierungsstelle verkürzt den Vorgang.
So erstellen Sie einen CA-Pool in der DevOps-Ebene:
gcloud privateca pools create CA_POOL_ID --location LOCATION --tier devops
Ersetzen Sie Folgendes:
- CA_POOL_ID: Die ID des CA-Pools des CA Service, der Zertifikate ausstellt.
- LOCATION: Der Standort des CA-Pools.
Weitere Informationen zum Erstellen von CA-Pools finden Sie unter CA-Pool erstellen.
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-Pools des CA Service, der Zertifikate ausstellt.
- LOCATION: Der Standort des CA-Pools.
Weitere Informationen zum Erstellen einer Stamm-CA finden Sie unter Stamm-CA erstellen.
Aktivieren Sie die Ausgabe von Zertifikaten aus dem CA-Pool durch Identitäten, die über den Workload Identity-Pool föderiert wurden. Für die Identitätsreflexion ist die IAM-Rolle „Anfragesteller des CA Service-Arbeitslastzertifikats“ (
roles/privateca.workloadCertificateRequester
) für die Antragsteller vonCreateCertificate
erforderlich.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 unter Verfügbare Hauptrollen oder Hauptrollengruppen (Tab „Google Cloud CLI“), die für Ihren Anwendungsfall am besten geeignet sind.
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 haben.
Dienstkonto erstellen, das eine Drittanbieteridentität darstellt
Bei der folgenden Anleitung wird davon ausgegangen, dass ein Dienstkonto für einen Drittanbieter steht. In diesem Abschnitt wird beschrieben, wie Sie mit dem IAM-Endpunkt GenerateIdToken
eine Drittanbieteridentität in Form eines OIDC-Tokens abrufen. Je nach Anwendungsfall sind möglicherweise unterschiedliche Schritte erforderlich, um das gewünschte Identitätstoken eines Drittanbieters zu erhalten.
gcloud iam service-accounts create SERVICE_ACCOUNT
Ersetzen Sie Folgendes:
- SERVICE_ACCOUNT: Die ID des Dienstkontos, das die Identität des Drittanbieters darstellt.
Zertifikat zur Bestätigung der Identität eines Drittanbieters ausstellen
Bevor Sie beginnen, müssen Sie die IAM-Rolle „Dienstkonto-Token-Ersteller“ (roles/iam.serviceAccountTokenCreator
) haben. Sie benötigen diese IAM-Rolle, um die GenerateIdToken
API aufzurufen.
So erhalten Sie ein Zertifikat, das die Identität eines Drittanbieters bestätigt:
Rufen Sie ein Identitätstoken von Ihrem externen Identitätsanbieter ab.
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 des Projekts, in dem Sie Ressourcen erstellen möchten.
Clientbibliotheken
.Wenn Sie programmatisch auf das Drittanbietertoken zugreifen möchten, können Sie ein Token aus Anmeldedaten mit Dateiquelle oder URL-Quelle abrufen. Weitere Informationen finden Sie unter Authentifizierung mit Clientbibliotheken, dem gcloud CLI oder Terraform durchführen. In dieser Anleitung wird ein Workflow für Anmeldedaten für Dateiquellen verwendet.
Laden Sie Ihre Anmeldedaten in einen Pfad, der von Ihrem Zertifikatsanfragesteller gelesen werden kann:
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, in dem Sie Ressourcen erstellen möchten.
Tauschen Sie Ihr Drittanbieter-Token über den STS-
token
-Endpunkt gegen ein föderiertes OAuth-Token aus: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
- Erstellen Sie eine Konfigurationsdatei für Anmeldedaten mit dem Namen
oidc_token.txt
, die vom Code zum Anfordern des Zertifikats gelesen werden kann, um einen Token-Austausch 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
- Lies die Datei
oidc_token.txt
, um den Autorisierungsmechanismus in der Clientbibliothek festzulegen:
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'])
- Erstellen Sie eine Konfigurationsdatei für Anmeldedaten mit dem Namen
Stellen Sie eine Anfrage an den CA-Dienst mit dem Anfragemodus für das
REFLECTED_SPIFFE
-Subjekt:curl
Optional: Wenn Sie kein CSR haben, erstellen Sie eines mit dem folgenden Befehl.
export TUTORIAL_CSR=$(openssl req -newkey rsa:2048 -nodes -subj / -keyout tutorial_do_not_use.key)
Fordern Sie ein Zertifikat mit dem CSR, einer Gültigkeitsdauer und einem Modus für Anfragen mit zurückgespiegeltem Subjekt an:
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
Wenn Sie das selbst erhobene Token an den CA-Dienst weiterleiten möchten, müssen Sie einen Client mit Anmeldedaten erstellen. Sie können dann mit diesem berechtigten Client Zertifikatsanfragen stellen:
Einen berechtigten CA Service-Client starten:
Python
caServiceClient = privateca_v1.CertificateAuthorityServiceClient(credentials=scoped_credentials)
Zertifikat anfordern
Python
Richten Sie zur Authentifizierung beim CA-Dienst die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Prüfen Sie das Zertifikat. Das Zertifikat muss einen Antragsteller mit einem einzelnen URI-SAN enthalten. Die SAN, die eine Identität bestätigt, hat das folgende 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-Pools.
- PROJECT_NUMBER: die Projektnummer des Projekts, in dem Sie den Workload Identity-Pool erstellt haben.
Bereinigen
Damit Ihrem Google Cloud-Konto keine Kosten für die CA-Dienstressourcen in Rechnung gestellt werden, die Sie anhand dieses Dokuments erstellt haben, führen Sie die folgenden Schritte mit der Google Cloud CLI aus:
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 CA-Pools.
- LOCATION: Der Standort des CA-Pools.
So 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 CA-Pools.
- LOCATION: Der Standort des CA-Pools.
Löschen Sie den von Ihnen erstellten CA-Pool.
gcloud privateca pools delete CA_POOL_ID --location LOCATION
Ersetzen Sie:
- CA_POOL_ID: Die eindeutige Kennung des CA-Pools.
- LOCATION: Der Standort des CA-Pools.
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 Kennung des Workload Identity-Pools.
Löschen Sie das von Ihnen erstellte Dienstkonto:
gcloud iam service-accounts delete SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
Ersetzen Sie:
- SERVICE_ACCOUNT: Die eindeutige Kennung des Workload Identity-Pools.
- PROJECT_ID: Das Projekt, zu dem das Dienstkonto gehört.
Mit der IAM-Rolle „Anfragesteller des CA Service-Arbeitslastzertifikats“ (privateca.workloadCertificateRequester
) wird das Subject des ausgestellten Zertifikats auf die Identität des Antragstellers beschränkt. Achten Sie darauf, dass Nutzern oder Arbeitslasten, die die Identitätsreflexion verwenden, nur die IAM-Rolle „Anfragesteller des CA Service-Arbeitslastzertifikats“ (privateca.workloadCertificateRequester
) zugewiesen ist. Um dem Prinzip der geringsten Berechtigung zu folgen, sollten Sie dem Dienstkonto nicht die IAM-Rolle „CA Service-Zertifikatsanfragesteller“ (privateca.certificateRequester
) zuweisen.
Nächste Schritte
- Lesen Sie mehr über die verschiedenen Richtlinieneinstellungen, mit denen Sie die Eigenschaften des angeforderten Zertifikats über eine reflektierte Identität hinaus steuern können.
- Informationen zum Konfigurieren und Verwalten verschiedener Richtliniensteuerungen