19.5. Utilisation du mode manuel avec le service de jetons de sécurité d'Amazon Web Services
Le mode manuel avec STS est pris en charge pour Amazon Web Services (AWS).
Cette stratégie d'informations d'identification n'est prise en charge que pour les nouveaux clusters OpenShift Container Platform et doit être configurée lors de l'installation. Vous ne pouvez pas reconfigurer un cluster existant qui utilise une stratégie d'informations d'identification différente pour utiliser cette fonctionnalité.
19.5.1. À propos du mode manuel avec AWS Security Token Service
En mode manuel avec STS, les composants individuels du cluster OpenShift Container Platform utilisent AWS Security Token Service (STS) pour attribuer aux composants des rôles IAM qui fournissent des informations d'identification de sécurité à court terme et à privilèges limités. Ces informations d'identification sont associées à des rôles IAM spécifiques à chaque composant qui effectue des appels d'API AWS.
Les demandes d'informations d'identification nouvelles et actualisées sont automatisées en utilisant un fournisseur d'identité AWS IAM OpenID Connect (OIDC) configuré de manière appropriée, associé à des rôles AWS IAM. OpenShift Container Platform signe des jetons de compte de service qui sont approuvés par AWS IAM, et peuvent être projetés dans un pod et utilisés pour l'authentification. Les jetons sont actualisés au bout d'une heure.
Figure 19.1. Flux d'authentification STS
L'utilisation du mode manuel avec STS modifie le contenu des informations d'identification AWS fournies aux composants individuels d'OpenShift Container Platform.
Format secret AWS utilisant des informations d'identification à long terme
apiVersion: v1 kind: Secret metadata: namespace: <target-namespace> 1 name: <target-secret-name> 2 data: aws_access_key_id: <base64-encoded-access-key-id> aws_secret_access_key: <base64-encoded-secret-access-key>
Format secret AWS avec STS
apiVersion: v1 kind: Secret metadata: namespace: <target-namespace> 1 name: <target-secret-name> 2 stringData: credentials: |- [default] sts_regional_endpoints = regional role_name: <operator-role-name> 3 web_identity_token_file: <path-to-token> 4
19.5.2. Installation d'un cluster OpenShift Container Platform configuré en mode manuel avec STS
Pour installer un cluster configuré pour utiliser le Cloud Credential Operator (CCO) en mode manuel avec STS :
Comme le cluster fonctionne en mode manuel lorsqu'il utilise STS, il n'est pas en mesure de créer de nouvelles informations d'identification pour les composants avec les autorisations dont ils ont besoin. Lors de la mise à niveau vers une version mineure différente d'OpenShift Container Platform, il y a souvent de nouvelles exigences en matière d'autorisations AWS. Avant de mettre à niveau un cluster qui utilise STS, l'administrateur du cluster doit s'assurer manuellement que les autorisations AWS sont suffisantes pour les composants existants et disponibles pour tout nouveau composant.
Ressources complémentaires
19.5.2.1. Configuration de l'utilitaire Cloud Credential Operator
Pour créer et gérer des informations d'identification du nuage depuis l'extérieur du cluster lorsque le Cloud Credential Operator (CCO) fonctionne en mode manuel, extrayez et préparez le binaire de l'utilitaire CCO (ccoctl
).
L'utilitaire ccoctl
est un binaire Linux qui doit être exécuté dans un environnement Linux.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
-
Vous avez installé l'OpenShift CLI (
oc
).
Vous avez créé un compte AWS pour l'utilitaire
ccoctl
avec les autorisations suivantes :Tableau 19.3. Autorisations AWS requises iam
autorisationss3
autorisations-
iam:CreateOpenIDConnectProvider
-
iam:CreateRole
-
iam:DeleteOpenIDConnectProvider
-
iam:DeleteRole
-
iam:DeleteRolePolicy
-
iam:GetOpenIDConnectProvider
-
iam:GetRole
-
iam:GetUser
-
iam:ListOpenIDConnectProviders
-
iam:ListRolePolicies
-
iam:ListRoles
-
iam:PutRolePolicy
-
iam:TagOpenIDConnectProvider
-
iam:TagRole
-
s3:CreateBucket
-
s3:DeleteBucket
-
s3:DeleteObject
-
s3:GetBucketAcl
-
s3:GetBucketTagging
-
s3:GetObject
-
s3:GetObjectAcl
-
s3:GetObjectTagging
-
s3:ListBucket
-
s3:PutBucketAcl
-
s3:PutBucketTagging
-
s3:PutObject
-
s3:PutObjectAcl
-
s3:PutObjectTagging
-
Procédure
Obtenez l'image de la version d'OpenShift Container Platform en exécutant la commande suivante :
$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
Obtenez l'image du conteneur CCO à partir de l'image de la version d'OpenShift Container Platform en exécutant la commande suivante :
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
NoteVeillez à ce que l'architecture de
$RELEASE_IMAGE
corresponde à l'architecture de l'environnement dans lequel vous utiliserez l'outilccoctl
.Extrayez le binaire
ccoctl
de l'image du conteneur CCO dans l'image de la version d'OpenShift Container Platform en exécutant la commande suivante :$ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secret
Modifiez les autorisations pour rendre
ccoctl
exécutable en exécutant la commande suivante :$ chmod 775 ccoctl
Vérification
Pour vérifier que
ccoctl
est prêt à être utilisé, affichez le fichier d'aide en exécutant la commande suivante :$ ccoctl --help
Sortie de
ccoctl --help
:OpenShift credentials provisioning tool Usage: ccoctl [command] Available Commands: alibabacloud Manage credentials objects for alibaba cloud aws Manage credentials objects for AWS cloud gcp Manage credentials objects for Google cloud help Help about any command ibmcloud Manage credentials objects for IBM Cloud nutanix Manage credentials objects for Nutanix Flags: -h, --help help for ccoctl Use "ccoctl [command] --help" for more information about a command.
19.5.2.2. Création de ressources AWS avec l'utilitaire Cloud Credential Operator
Vous pouvez utiliser l'utilitaire CCO (ccoctl
) pour créer les ressources AWS requises individuellement ou à l'aide d'une seule commande.
19.5.2.2.1. Créer des ressources AWS individuellement
Si vous devez examiner les fichiers JSON créés par l'outil ccoctl
avant de modifier les ressources AWS, ou si le processus utilisé par l'outil ccoctl
pour créer automatiquement des ressources AWS ne répond pas aux exigences de votre organisation, vous pouvez créer les ressources AWS individuellement. Par exemple, cette option peut être utile pour une organisation qui partage la responsabilité de la création de ces ressources entre différents utilisateurs ou départements.
Sinon, vous pouvez utiliser la commande ccoctl aws create-all
pour créer automatiquement les ressources AWS.
Par défaut, ccoctl
crée les objets dans le répertoire dans lequel les commandes sont exécutées. Pour créer les objets dans un autre répertoire, utilisez l'option --output-dir
. Cette procédure utilise <path_to_ccoctl_output_dir>
pour faire référence à ce répertoire.
Certaines commandes ccoctl
font appel à l'API AWS pour créer ou modifier des ressources AWS. Vous pouvez utiliser l'option --dry-run
pour éviter les appels d'API. Cette option permet de créer des fichiers JSON sur le système de fichiers local. Vous pouvez examiner et modifier les fichiers JSON, puis les appliquer à l'aide de l'outil CLI AWS en utilisant les paramètres --cli-input-json
.
Conditions préalables
-
Extraire et préparer le binaire
ccoctl
.
Procédure
Générer les fichiers de clés RSA publiques et privées qui sont utilisées pour configurer le fournisseur OpenID Connect pour le cluster :
$ ccoctl aws create-key-pair
Exemple de sortie :
2021/04/13 11:01:02 Generating RSA keypair 2021/04/13 11:01:03 Writing private key to /<path_to_ccoctl_output_dir>/serviceaccount-signer.private 2021/04/13 11:01:03 Writing public key to /<path_to_ccoctl_output_dir>/serviceaccount-signer.public 2021/04/13 11:01:03 Copying signing key for use by installer
où
serviceaccount-signer.private
etserviceaccount-signer.public
sont les fichiers clés générés.Cette commande crée également une clé privée dont le cluster a besoin lors de l'installation sur
/<path_to_ccoctl_output_dir>/tls/bound-service-account-signing-key.key
.Créez un fournisseur d'identité OpenID Connect et un seau S3 sur AWS :
$ ccoctl aws create-identity-provider \ --name=<name> \ --region=<aws_region> \ --public-key-file=<path_to_ccoctl_output_dir>/serviceaccount-signer.public
où :
-
<name>
est le nom utilisé pour étiqueter toutes les ressources du nuage créées pour le suivi. -
<aws-region>
est la région AWS dans laquelle les ressources en nuage seront créées. -
<path_to_ccoctl_output_dir>
est le chemin d'accès au fichier de clé publique généré par la commandeccoctl aws create-key-pair
.
Exemple de sortie :
2021/04/13 11:16:09 Bucket <name>-oidc created 2021/04/13 11:16:10 OpenID Connect discovery document in the S3 bucket <name>-oidc at .well-known/openid-configuration updated 2021/04/13 11:16:10 Reading public key 2021/04/13 11:16:10 JSON web key set (JWKS) in the S3 bucket <name>-oidc at keys.json updated 2021/04/13 11:16:18 Identity Provider created with ARN: arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
où
openid-configuration
est un document de découverte etkeys.json
un fichier d'ensemble de clés web JSON.Cette commande crée également un fichier de configuration YAML à l'adresse
/<path_to_ccoctl_output_dir>/manifests/cluster-authentication-02-config.yaml
. Ce fichier définit le champ URL de l'émetteur pour les jetons de compte de service générés par le cluster, afin que le fournisseur d'identité AWS IAM fasse confiance aux jetons.-
Créer des rôles IAM pour chaque composant du cluster.
Extraire la liste des objets
CredentialsRequest
de l'image de la version d'OpenShift Container Platform :$ oc adm release extract --credentials-requests \ --cloud=aws \ --to=<path_to_directory_with_list_of_credentials_requests>/credrequests 1 --from=quay.io/<path_to>/ocp-release:<version>
- 1
credrequests
est le répertoire dans lequel la liste des objetsCredentialsRequest
est stockée. Cette commande crée le répertoire s'il n'existe pas.
Si votre cluster utilise les capacités du cluster pour désactiver un ou plusieurs composants optionnels, supprimez les ressources personnalisées
CredentialsRequest
pour tous les composants désactivés.Exemple
credrequests
contenu du répertoire pour OpenShift Container Platform 4.12 sur AWS0000_30_machine-api-operator_00_credentials-request.yaml 1 0000_50_cloud-credential-operator_05-iam-ro-credentialsrequest.yaml 2 0000_50_cluster-image-registry-operator_01-registry-credentials-request.yaml 3 0000_50_cluster-ingress-operator_00-ingress-credentials-request.yaml 4 0000_50_cluster-network-operator_02-cncc-credentials.yaml 5 0000_50_cluster-storage-operator_03_credentials_request_aws.yaml 6
- 1
- Le certificat de conducteur de machine API est exigé.
- 2
- Le certificat d'opérateur de titres de créance en nuage est requis.
- 3
- Le certificat d'opérateur de registre d'images est requis.
- 4
- Le CR de l'opérateur d'entrée est requis.
- 5
- Le certificat d'opérateur de réseau est requis.
- 6
- Le Storage Operator CR est un composant optionnel et peut être désactivé dans votre cluster.
Utilisez l'outil
ccoctl
pour traiter tous les objetsCredentialsRequest
dans le répertoirecredrequests
:$ ccoctl aws create-iam-roles \ --name=<name> \ --region=<aws_region> \ --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests \ --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
NotePour les environnements AWS qui utilisent d'autres points d'accès à l'API IAM, tels que GovCloud, vous devez également spécifier votre région à l'aide du paramètre
--region
.Si votre cluster utilise des fonctionnalités d'aperçu technologique activées par l'ensemble de fonctionnalités
TechPreviewNoUpgrade
, vous devez inclure le paramètre--enable-tech-preview
.Pour chaque objet
CredentialsRequest
,ccoctl
crée un rôle IAM avec une politique de confiance liée au fournisseur d'identité OIDC spécifié et une politique de permissions telle que définie dans chaque objetCredentialsRequest
de l'image de version d'OpenShift Container Platform.
Vérification
Pour vérifier que les secrets d'OpenShift Container Platform sont créés, listez les fichiers dans le répertoire
<path_to_ccoctl_output_dir>/manifests
:$ ll <path_to_ccoctl_output_dir>/manifests
Exemple de sortie :
total 24 -rw-------. 1 <user> <user> 161 Apr 13 11:42 cluster-authentication-02-config.yaml -rw-------. 1 <user> <user> 379 Apr 13 11:59 openshift-cloud-credential-operator-cloud-credential-operator-iam-ro-creds-credentials.yaml -rw-------. 1 <user> <user> 353 Apr 13 11:59 openshift-cluster-csi-drivers-ebs-cloud-credentials-credentials.yaml -rw-------. 1 <user> <user> 355 Apr 13 11:59 openshift-image-registry-installer-cloud-credentials-credentials.yaml -rw-------. 1 <user> <user> 339 Apr 13 11:59 openshift-ingress-operator-cloud-credentials-credentials.yaml -rw-------. 1 <user> <user> 337 Apr 13 11:59 openshift-machine-api-aws-cloud-credentials-credentials.yaml
Vous pouvez vérifier que les rôles IAM sont créés en interrogeant AWS. Pour plus d'informations, reportez-vous à la documentation AWS sur l'énumération des rôles IAM.
19.5.2.2.2. Créer des ressources AWS à l'aide d'une seule commande
Si vous n'avez pas besoin d'examiner les fichiers JSON créés par l'outil ccoctl
avant de modifier les ressources AWS et si le processus utilisé par l'outil ccoctl
pour créer des ressources AWS répond automatiquement aux exigences de votre organisation, vous pouvez utiliser la commande ccoctl aws create-all
pour automatiser la création de ressources AWS.
Sinon, vous pouvez créer les ressources AWS individuellement.
Par défaut, ccoctl
crée les objets dans le répertoire dans lequel les commandes sont exécutées. Pour créer les objets dans un autre répertoire, utilisez l'option --output-dir
. Cette procédure utilise <path_to_ccoctl_output_dir>
pour faire référence à ce répertoire.
Conditions préalables
Vous devez avoir :
-
Extraction et préparation du binaire
ccoctl
.
Procédure
Extrayez la liste des objets
CredentialsRequest
de l'image de la version d'OpenShift Container Platform en exécutant la commande suivante :$ oc adm release extract \ --credentials-requests \ --cloud=aws \ --to=<path_to_directory_with_list_of_credentials_requests>/credrequests \ 1 --from=quay.io/<path_to>/ocp-release:<version>
- 1
credrequests
est le répertoire dans lequel la liste des objetsCredentialsRequest
est stockée. Cette commande crée le répertoire s'il n'existe pas.
NoteL'exécution de cette commande peut prendre quelques instants.
Si votre cluster utilise les capacités du cluster pour désactiver un ou plusieurs composants optionnels, supprimez les ressources personnalisées
CredentialsRequest
pour tous les composants désactivés.Exemple
credrequests
contenu du répertoire pour OpenShift Container Platform 4.12 sur AWS0000_30_machine-api-operator_00_credentials-request.yaml 1 0000_50_cloud-credential-operator_05-iam-ro-credentialsrequest.yaml 2 0000_50_cluster-image-registry-operator_01-registry-credentials-request.yaml 3 0000_50_cluster-ingress-operator_00-ingress-credentials-request.yaml 4 0000_50_cluster-network-operator_02-cncc-credentials.yaml 5 0000_50_cluster-storage-operator_03_credentials_request_aws.yaml 6
- 1
- Le certificat de conducteur de machine API est exigé.
- 2
- Le certificat d'opérateur de titres de créance en nuage est requis.
- 3
- Le certificat d'opérateur de registre d'images est requis.
- 4
- Le CR de l'opérateur d'entrée est requis.
- 5
- Le certificat d'opérateur de réseau est requis.
- 6
- Le Storage Operator CR est un composant optionnel et peut être désactivé dans votre cluster.
Utilisez l'outil
ccoctl
pour traiter tous les objetsCredentialsRequest
dans le répertoirecredrequests
:$ ccoctl aws create-all \ --name=<name> \1 --region=<aws_region> \2 --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests \3 --output-dir=<path_to_ccoctl_output_dir> \4 --create-private-s3-bucket 5
- 1
- Spécifiez le nom utilisé pour étiqueter toutes les ressources du nuage créées pour le suivi.
- 2
- Spécifiez la région AWS dans laquelle les ressources en nuage seront créées.
- 3
- Spécifiez le répertoire contenant les fichiers des objets du composant
CredentialsRequest
. - 4
- Facultatif : Indiquez le répertoire dans lequel vous souhaitez que l'utilitaire
ccoctl
crée des objets. Par défaut, l'utilitaire crée les objets dans le répertoire dans lequel les commandes sont exécutées. - 5
- Facultatif : Par défaut, l'utilitaire
ccoctl
stocke les fichiers de configuration OpenID Connect (OIDC) dans un seau S3 public et utilise l'URL S3 comme point de terminaison OIDC public. Pour stocker la configuration OIDC dans un seau S3 privé auquel le fournisseur d'identité IAM accède via une URL de distribution CloudFront publique, utilisez le paramètre--create-private-s3-bucket
.
NoteSi votre cluster utilise des fonctionnalités d'aperçu technologique activées par l'ensemble de fonctionnalités
TechPreviewNoUpgrade
, vous devez inclure le paramètre--enable-tech-preview
.
Vérification
Pour vérifier que les secrets d'OpenShift Container Platform sont créés, listez les fichiers dans le répertoire
<path_to_ccoctl_output_dir>/manifests
:$ ls <path_to_ccoctl_output_dir>/manifests
Exemple de sortie :
cluster-authentication-02-config.yaml openshift-cloud-credential-operator-cloud-credential-operator-iam-ro-creds-credentials.yaml openshift-cluster-csi-drivers-ebs-cloud-credentials-credentials.yaml openshift-image-registry-installer-cloud-credentials-credentials.yaml openshift-ingress-operator-cloud-credentials-credentials.yaml openshift-machine-api-aws-cloud-credentials-credentials.yaml
Vous pouvez vérifier que les rôles IAM sont créés en interrogeant AWS. Pour plus d'informations, reportez-vous à la documentation AWS sur l'énumération des rôles IAM.
19.5.2.3. Exécution du programme d'installation
Conditions préalables
- Configurez un compte auprès de la plateforme cloud qui héberge votre cluster.
- Obtenir l'image de la version d'OpenShift Container Platform.
Procédure
Allez dans le répertoire qui contient le programme d'installation et créez le fichier
install-config.yaml
:openshift-install create install-config --dir <installation_directory>
où
<installation_directory>
est le répertoire dans lequel le programme d'installation crée les fichiers.Modifiez le fichier de configuration
install-config.yaml
de manière à ce qu'il contienne le paramètrecredentialsMode
fixé àManual
.Exemple
install-config.yaml
fichier de configurationapiVersion: v1 baseDomain: cluster1.example.com credentialsMode: Manual 1 compute: - architecture: amd64 hyperthreading: Enabled
- 1
- Cette ligne est ajoutée pour fixer le paramètre
credentialsMode
àManual
.
Créez les manifestes d'installation requis pour OpenShift Container Platform :
$ openshift-install create manifests
Copiez les manifestes générés par
ccoctl
dans le répertoire manifests créé par le programme d'installation :$ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
Copiez la clé privée générée par
ccoctl
dans le répertoiretls
dans le répertoire d'installation :$ cp -a /<path_to_ccoctl_output_dir>/tls .
Exécutez le programme d'installation d'OpenShift Container Platform :
$ ./openshift-install create cluster
19.5.2.4. Vérification de l'installation
- Connectez-vous au cluster OpenShift Container Platform.
Vérifiez que le cluster n'a pas d'identifiants
root
:$ oc get secrets -n kube-system aws-creds
Le résultat devrait ressembler à ce qui suit :
Error from server (NotFound): secrets "aws-creds" not found
Vérifier que les composants assument les rôles IAM spécifiés dans les manifestes secrets, au lieu d'utiliser les informations d'identification créées par l'OCC :
Exemple de commande avec l'opérateur de registre d'images
$ oc get secrets -n openshift-image-registry installer-cloud-credentials -o json | jq -r .data.credentials | base64 --decode
Le résultat doit indiquer le rôle et le jeton d'identité Web utilisés par le composant et ressembler à ce qui suit :
Exemple de sortie avec l'opérateur de registre d'images
[default] role_arn = arn:aws:iam::123456789:role/openshift-image-registry-installer-cloud-credentials web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token