Zertifikate ausstellen, die die Identität von Drittanbietern bestätigen
In dieser Anleitung wird gezeigt, wie Sie Zertifikate ausstellen, die die Identität eines Drittanbieters mithilfe von Identitätsspiegelung und Workload Identity-Pools bestätigen.
Mit der Identitätsspiegelung können Sie Zertifikate erstellen, die der bestätigten Identität eines Zertifikatsanforderers entsprechen. Mit der Identitätsspiegelung können Sie einen Zertifikatsanforderer ohne Berechtigungen darauf beschränken, nur Zertifikate mit einem alternativen Antragstellernamen (Subject Alternative Name, SAN) anzufordern, der der Identität in seinem Anmeldedaten entspricht.
Lernziele
In dieser Anleitung erfahren Sie, wie Sie den CA Service mit Workload Identity-Pools verwenden können, um eine Drittanbieteridentität zu föderieren und ein Zertifikat zu erhalten, das diese Identität bestätigt.
Hinweise
Machen Sie sich vor dem Lesen dieser Seite mit den folgenden Konzepten vertraut:
- Workload Identity-Pools: Mit Workload Identity-Pools können Sie Drittanbieter-Identitätsanbieter 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 Pools von Arbeitslastidentitäten verwendet, um Drittanbieteridentitäten 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 Drittanbieteranmeldedaten gegen Erstanbieter-Tokens (Google Cloud) eintauschen. Weitere Informationen finden Sie unter Security Token Service.
- Identitätsspiegelung: Mit der Funktion zur Identitätsspiegelung wird die bestätigte Identität eines Zertifikatsanforderers auf das angeforderte Zertifikat übertragen. Weitere Informationen finden Sie unter Identitätsspiegelung.
Prüfen Sie, ob Sie die folgenden IAM-Rollen haben:
- Wenn Sie Zertifizierungsstellen (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 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 beschrieben, wie Sie einen Google OpenID Connect (OIDC)-Anbieter in Kombination mit einem Dienstkonto als Drittanbieteridentität verwenden können. Der Google-Konten-OIDC-Anbieter fungiert als Drittanbieter-Identitätsanbieter (IDP) 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: 1. Erstellen Sie einen Workload Identity-Pool, um eine vertrauenswürdige Gruppe von föderierten Identitäten darzustellen:
```
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.
Erstellen Sie einen Workload Identity-Pool-Anbieter für Ihren Drittanbieter-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 zwischen den Drittanbieteransprüchen und dem Google-Hauptanspruchgoogle.subject
festgelegt.google.subject
ist eine erforderliche Zuordnung, die Sie mithilfe eines CEL-Ausdrucks 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, über den Google Drittanbieter-Tokens überprüft. 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 CA erstellen
In diesem Abschnitt wird beschrieben, wie Sie einen CA-Pool erstellen und ihm eine Stamm-CA hinzufügen. Mit diesem Zertifizierungsstellenpool können Sie identitätsbezogene Zertifikate ausstellen. Wenn Sie einen vorhandenen CA-Pool und eine vorhandene CA verwenden möchten, können Sie diesen Abschnitt überspringen.
Anstelle einer Stamm-CA können Sie auch eine untergeordnete CA erstellen. Wenn Sie eine Stammzertifizierungsstelle erstellen, können Sie das Verfahren verkürzen.
Erstellen Sie einen CA-Pool 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-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 Ausstellung von Zertifikaten aus dem CA-Pool für Identitäten, die aus dem Workload Identity-Pool zusammengeführt wurden. Für die Identitätsspiegelung ist die IAM-Rolle „Anfragesteller des CA Service-Arbeitslastzertifikats“ (
roles/privateca.workloadCertificateRequester
) für die Anfragesteller vonCreateCertificate
erforderlich.Sie können Hauptkonten von Workload Identity-Pools in verschiedenen Granularitäten darstellen, von einem einzelnen Subjekt bis hin zu allen Identitäten im Pool über alle Anbieter hinweg. Weitere Informationen finden Sie unter Verfügbare Identitäten oder Identitätssätze (Tab „Google Cloud CLI“).
gcloud privateca pools add-iam-policy-binding CA_POOL_ID \ --location LOCATION \ --role "roles/privateca.workloadCertificateRequester" \ --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/"
Ersetzen Sie Folgendes:
- LOCATION: der Standort des CA-Pools
- PROJECT_ID: die ID des Google Cloud Projekts, in dem Sie den Workload Identity-Pool erstellt haben
Dienstkonto erstellen, das eine Drittanbieteridentität darstellt
Beim folgenden Verfahren wird davon ausgegangen, dass ein Dienstkonto einen Drittanbieter repräsentiert. In diesem Abschnitt wird gezeigt, wie Sie mit dem IAM-Endpunkt GenerateIdToken
eine Drittanbieteridentität in Form eines OIDC-Tokens abrufen können. Je nach Anwendungsfall sind möglicherweise unterschiedliche Schritte erforderlich, um das Drittanbieter-Identitätstoken Ihrer Wahl zu erhalten.
gcloud iam service-accounts create SERVICE_ACCOUNT
Ersetzen Sie Folgendes:
- SERVICE_ACCOUNT: Die ID des Dienstkontos, das die Drittanbieteridentität repräsentiert.
Ein Zertifikat ausstellen, das die Identität eines Drittanbieters bestätigt
Bevor Sie beginnen, müssen Sie die IAM-Rolle „Ersteller von Dienstkonto-Tokens“ (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 Drittanbieter-Identitätstoken von Ihrem Drittanbieter-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 Drittanbieter-Token zugreifen möchten, können Sie ein Token aus Anmeldedaten abrufen, die aus einer Datei oder einer URL stammen. Weitere Informationen finden Sie unter Authentifizierung mit Clientbibliotheken, der gcloud CLI oder Terraform durchführen. In dieser Anleitung wird ein Workflow mit Anmeldedaten aus einer Datei verwendet.
Laden Sie Ihre Anmeldedaten in einen Pfad, der von Ihrem Zertifikatanforderer 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 mit dem STS-Endpunkt
token
gegen ein föderiertes OAuth-Token ein: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
Stellen Sie eine Anfrage an CA Service mit dem Anfragemodus
REFLECTED_SPIFFE
: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 die reflektierte Betreffanfrage 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 CA Service weiterleiten möchten, müssen Sie einen Client mit Anmeldedaten erstellen. Sie können diesen Client mit Anmeldedaten dann verwenden, um Zertifikatsanfragen zu stellen:
Initialisieren Sie einen CA Service-Client mit Anmeldedaten:
Python
caServiceClient = privateca_v1.CertificateAuthorityServiceClient(credentials=scoped_credentials)
Zertifikat anfordern
Python
Richten Sie zur Authentifizierung beim CA Service die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Überprüfen Sie das Zertifikat. Ihr Zertifikat sollte einen Antragsteller mit einem einzelnen URI-SAN enthalten. Der SAN, der 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
Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud -Konto die CA Service-Ressourcen in Rechnung gestellt werden, die Sie gemäß dieser Anleitung erstellt haben:
Löschen Sie die von Ihnen erstellte CA.
Deaktivieren Sie die CA:
gcloud privateca roots disable CA_ID --pool CA_POOL_ID --location LOCATION
Ersetzen Sie:
- CA_ID: Die eindeutige Kennung der CA.
- CA_POOL_ID: Die eindeutige Kennung 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-certificates
Ersetzen Sie:
- CA_ID: Die eindeutige Kennung der CA.
- CA_POOL_ID: Die eindeutige Kennung des CA-Pools.
- LOCATION: Der Standort des CA-Pools.
Löschen Sie den CA-Pool, den Sie erstellt haben.
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 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.
Die IAM-Rolle „Anfragesteller des CA Service-Arbeitslastzertifikats“ (privateca.workloadCertificateRequester
) beschränkt das Subjekt des ausgestellten Zertifikats auf die Identität des Antragstellers. 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 das Prinzip der geringsten Berechtigung einzuhalten, können Sie die IAM-Rolle „CA Service-Zertifikatsanfragesteller“ (privateca.certificateRequester
) vermeiden.
Nächste Schritte
- Weitere Informationen zu den verschiedenen Richtlinienkontrollen, mit denen Sie die Eigenschaften des angeforderten Zertifikats über eine gespiegelte Identität hinaus steuern können.
- Informationen zum Konfigurieren und Verwalten verschiedener Richtlinienkontrollen