Zertifikate ausstellen, die die Identität eines Drittanbieters bestätigen
In dieser Anleitung wird gezeigt, wie Sie mit Identitätsspiegelung und Workload Identity-PoolsZertifikate ausstellen können, die die Identität eines Drittanbieters bestätigen.
Mit der Identitätsspiegelung können Sie Zertifikate erstellen, die der bestätigten Identität eines Zertifikatsanfragestellers entsprechen. Mit der Identitätsspiegelung können Sie einen Zertifikatsanfragesteller ohne Berechtigungen so einschränken, dass er nur Zertifikate mit einem alternativen Antragstellernamen (Subject Alternative Name, SAN) anfordern kann, der der Identität in seinen Anmeldedaten entspricht.
Ziele
In dieser Anleitung erfahren Sie, wie Sie CA Service mit Workload Identity-Pools verwenden können, um eine Identität eines Drittanbieters zu föderieren und ein Zertifikat zu erhalten, das diese Identität bestätigt.
Hinweis
Bevor Sie beginnen, sollten Sie die folgenden Konzepte kennen:
- 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.
- Workload Identity-Föderation: Bei der Workload Identity-Föderation werden Workload Identity-Pools verwendet, um Identitäten von Drittanbietern Zugriff auf Google Cloud Dienste 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 gegen Erstanbieter-Tokens (Google Cloud) austauschen. Weitere Informationen finden Sie unter Security Token Service.
- Identitätsspiegelung: Mit der Funktion zur Identitätsspiegelung wird die bestätigte Identität eines Zertifikatsanfragestellers in das angeforderte Zertifikat übernommen. Weitere Informationen finden Sie unter Identitätsspiegelung.
Prüfen Sie, ob Sie die folgenden IAM Rollen haben:
- Zum Verwalten von Zertifizierungsstellen (CAs) und CA-Pools sowie zum Anfordern
von Zertifikaten 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 die Rolle „Workload Identity-Pooladministrator“ (
iam.workloadIdentityPoolAdmin). - Zum Erstellen eines Dienstkontos benötigen Sie die Rolle „Dienstkontoadministrator“ (
iam.serviceAccountAdmin).
Informationen zum Zuweisen von 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 erklärt, wie Sie einen Google OpenID Connect-Anbieter (OIDC) in Kombination mit einem Dienstkonto verwenden können, um als Identität eines Drittanbieters zu fungieren. Der OIDC-Anbieter für Google-Konten fungiert als Identitätsanbieter (IDP) eines Drittanbieters und das Google Cloud Dienstkonto ist eine Beispielidentität eines Drittanbieters, die von diesem IDP bestätigt wird.
Workload Identity-Pools unterstützen eine Vielzahl von Identitätsanbietern, darunter Microsoft Azure/lokale Active Directory, AWS und SAML-basierte Identitätsanbieter.
So richten Sie einen Workload Identity-Pool und -Anbieter ein:
Erstellen Sie einen Workload Identity-Pool, um eine vertrauenswürdige Gruppe föderierter Identitäten darzustellen:
gcloud iam workload-identity-pools create IDENTITY_POOL_ID --location global --display-name "tutorial-wip"Ersetzen Sie Folgendes:
- IDENTITY_POOL_ID: Die eindeutige ID des neuen Workload Identity-Pools
Erstellen Sie einen Workload Identity-Pool-Anbieter für Ihren Identitätsanbieter eines Drittanbieters:
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 ID 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 zwischen den Ansprüchen des Drittanbieters und dem Anspruch des Google-Hauptkontosgoogle.subjectfestgelegt.google.subjectist eine erforderliche Zuordnung, die Sie mit einem CEL Ausdruck auf beliebige Ansprüche oder eine Kombination von Ansprüchen festlegen können. Weitere Informationen finden Sie unter Attributzuordnung und Bedingung definieren.issuer-uri: Bei OIDC-Anbietern ist dieses Flag ein öffentlich zugänglicher Endpunkt, an den sich Google wendet, um Tokens von Drittanbietern zu überprüfen. Weitere Informationen finden Sie unter Externen Identitäts anbieter vorbereiten.
Weitere Informationen zum Einrichten eines Workload Identity Anbieters finden Sie unter Workload Identity Föderation konfigurieren.
CA-Pool und ausstellende CA erstellen
In diesem Abschnitt wird erklärt, wie Sie einen CA-Pool erstellen und eine Root-CA hinzufügen. Mit diesem CA-Pool können Sie Zertifikate mit Identitätsspiegelung ausstellen. Wenn Sie einen vorhandenen CA-Pool und eine vorhandene CA verwenden möchten, können Sie diesen Abschnitt überspringen.
Anstelle einer Root-CA können Sie auch eine untergeordnete CA erstellen. Das Erstellen einer Root-CA verkürzt den Vorgang.
Erstellen Sie einen CA-Pool in der DevOps-Ebene:
gcloud privateca pools create CA_POOL_ID --location LOCATION --tier devopsErsetzen Sie Folgendes:
- CA_POOL_ID – Die ID des CA-Pools von 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 Root-CA:
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 von CA Service, der Zertifikate ausstellt
- LOCATION - Der Standort des CA-Pools
Weitere Informationen zum Erstellen einer Root-CA finden Sie unter Root-CA erstellen.
Aktivieren Sie die Ausstellung von Zertifikaten aus dem CA-Pool für Identitäten, die aus dem Workload Identity-Pool föderiert wurden. Für die Identitätsspiegelung ist die IAM-Rolle „Anfragesteller des CA Service-Arbeitslastzertifikats“ (
roles/privateca.workloadCertificateRequester) für die Anfragesteller vonCreateCertificateerforderlich.Sie können Hauptkonten von Workload Identity-Pools in verschiedenen Granularitäten darstellen, von einem einzelnen Antragsteller bis hin zu allen Identitäten im Pool über alle Anbieter hinweg. Weitere Informationen finden Sie unter den verfügbaren Hauptkonten oder Hauptkontogruppen (verwenden Sie den 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:
- CA_POOL_ID: Die ID des CA-Pools von CA Service, der Zertifikate ausstellt
- LOCATION: Der Standort des CA-Pools
- PROJECT_NUMBER: Die Projektnummer des Projekts, in dem Sie den Workload Identity-Pool erstellt haben
- IDENTITY_POOL_ID: Die eindeutige ID des neuen Workload Identity-Pools
Dienstkonto erstellen, das eine Identität eines Drittanbieters darstellt
Bei der folgenden Vorgehensweise wird davon ausgegangen, dass ein Dienstkonto einen Drittanbieter darstellt. In diesem Abschnitt wird gezeigt, wie Sie den
GenerateIdToken
IAM-Endpunkt verwenden können, um eine Identität eines Drittanbieters in Form eines
OIDC-Tokens abzurufen. Je nach Anwendungsfall sind möglicherweise andere Schritte erforderlich, um das gewünschte Token für die Identität 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 ausstellen, das die Identität eines Drittanbieters bestätigt
Prüfen Sie, ob Sie die IAM-Rolle „Ersteller des OpenID Connect-Identitätstokens für das Dienstkonto“ (roles/iam.serviceAccountOpenIdTokenCreator) 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 Token für die Identität eines Drittanbieters von Ihrem Identitätsanbieter eines Drittanbieters 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
Um programmatisch auf das Token des Drittanbieters zuzugreifen, können Sie ein Token aus dateibasierten oder URL-basierten Anmeldedaten abrufen. Weitere Informationen finden Sie unter Authentifizierung mit Clientbibliotheken, der gcloud CLI, oder Terraform durchführen. In dieser Anleitung folgen wir einem Workflow mit dateibasierten Anmeldedaten.
Laden Sie Ihre Anmeldedaten in einen Pfad, der vom 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.txtErsetzen Sie Folgendes:
- PROJECT_ID: Die Projekt-ID des Projekts, in dem Sie Ressourcen erstellen möchten
Tauschen Sie Ihr Token des Drittanbieters mit dem STS-Endpunkt
tokengegen 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 von Zertifikaten gelesen werden 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- Lesen Sie 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
Senden Sie eine Anfrage an CA Service mit dem
REFLECTED_SPIFFEAnfragemodus für das Subject:curl
Optional: Wenn Sie keine CSR-Anfrage haben, erstellen Sie eine, indem Sie den folgenden Befehl ausführen.
export TUTORIAL_CSR=$(openssl req -newkey rsa:2048 -nodes -subj / -keyout tutorial_do_not_use.key)Fordern Sie ein Zertifikat mit der CSR-Anfrage, einer Gültigkeitsdauer und einem Anfragemodus für das gespiegelte Subject 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
Um das Erstanbieter-Token an CA Service weiterzuleiten, müssen Sie einen Client mit Anmeldedaten erstellen. Mit diesem Client mit Anmeldedaten können Sie dann Zertifikatsanfragen stellen:
Initiieren Sie einen CA Service-Client mit Anmeldedaten:
Python
caServiceClient = privateca_v1.CertificateAuthorityServiceClient(credentials=scoped_credentials)Fordern Sie ein Zertifikat an.
Python
Richten Sie zur Authentifizierung bei CA Service die Standardanmeldedaten für Anwendungen (ADC) ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Prüfen Sie das Zertifikat. Ihr Zertifikat sollte ein Subject mit einem einzelnen URI-SAN haben. Das SAN, das 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 ID des Workload Identity-Pools
- PROJECT_NUMBER – Die Projektnummer des Projekts , in dem Sie den Workload Identity-Pool erstellt haben
Bereinigen
Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud Konto die in dieser Anleitung erstellten CA Service-Ressourcen in Rechnung gestellt werden. Führen Sie dazu die folgenden Vorgänge mit der Google Cloud CLI aus:
Löschen Sie die erstellte CA.
Deaktivieren Sie die CA:
gcloud privateca roots disable CA_ID --pool CA_POOL_ID --location LOCATIONErsetzen Sie:
- CA_ID: Die eindeutige ID der CA
- CA_POOL_ID: Die eindeutige ID des CA-Pools
- LOCATION: Der Standort des CA-Pools
Löschen Sie die CA:
gcloud privateca roots delete CA_ID --pool CA_POOL_ID --location LOCATION --ignore-active-certificatesErsetzen Sie:
- CA_ID: Die eindeutige ID der CA
- CA_POOL_ID: Die eindeutige ID des CA-Pools
- LOCATION: Der Standort des CA-Pools
Löschen Sie den erstellten CA-Pool.
gcloud privateca pools delete CA_POOL_ID --location LOCATIONErsetzen Sie:
- CA_POOL_ID: Die eindeutige ID des CA-Pools
- LOCATION: Der Standort des CA-Pools
Weitere Informationen zum Befehl
gcloud privateca pools deletefinden Sie unter gcloud privateca pools delete.Löschen Sie den erstellten Workload Identity-Pool:
gcloud iam workload-identity-pools delete IDENTITY_POOL_ID --location globalErsetzen Sie:
- IDENTITY_POOL_ID: Die eindeutige ID des Workload Identity-Pools
Löschen Sie das erstellte Dienstkonto:
gcloud iam service-accounts delete SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.comErsetzen Sie:
- SERVICE_ACCOUNT: Die eindeutige ID des Workload Identity-Pools
- PROJECT_ID: Das Projekt, zu dem das Dienstkonto gehört
Die IAM-Rolle „Anfragesteller des CA Service-Arbeitslastzertifikats“ (privateca.workloadCertificateRequester) beschränkt das Subject des ausgestellten Zertifikats auf die Identität des Anfragestellers. Achten Sie darauf, dass Nutzern oder Arbeitslasten, die die Funktion zur Identitätsspiegelung verwenden, nur die IAM-Rolle „Anfragesteller des CA Service-Arbeitslastzertifikats“ (privateca.workloadCertificateRequester) zugewiesen wird. Um dem Prinzip der geringsten Berechtigung zu entsprechen, können Sie die IAM-Rolle „CA Service-Zertifikatsanfragesteller“ (privateca.certificateRequester) nicht zuweisen.
Nächste Schritte
- Lesen Sie mehr über die verschiedenen Richtliniensteuerelemente mit denen Sie die Eigenschaften des angeforderten Zertifikats über eine gespiegelte Identität hinaus steuern können.
- Lesen Sie, wie Sie verschiedene Richtliniensteuerelemente konfigurieren und verwalten können.