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 Copier lienLien copié sur presse-papiers!
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
Format secret AWS avec STS
19.5.2. Installation d'un cluster OpenShift Container Platform configuré en mode manuel avec STS Copier lienLien copié sur presse-papiers!
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.
19.5.2.1. Configuration de l'utilitaire Cloud Credential Operator Copier lienLien copié sur presse-papiers!
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
ccoctlavec les autorisations suivantes :Expand Tableau 19.3. Autorisations AWS requises iamautorisationss3autorisations-
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}')$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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)
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteVeillez à ce que l'architecture de
$RELEASE_IMAGEcorresponde à l'architecture de l'environnement dans lequel vous utiliserez l'outilccoctl.Extrayez le binaire
ccoctlde 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
$ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow Modifiez les autorisations pour rendre
ccoctlexécutable en exécutant la commande suivante :chmod 775 ccoctl
$ chmod 775 ccoctlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
Pour vérifier que
ccoctlest prêt à être utilisé, affichez le fichier d'aide en exécutant la commande suivante :ccoctl --help
$ ccoctl --helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow Sortie de
ccoctl --help:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
19.5.2.2. Création de ressources AWS avec l'utilitaire Cloud Credential Operator Copier lienLien copié sur presse-papiers!
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 Copier lienLien copié sur presse-papiers!
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
$ ccoctl aws create-key-pairCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 installerCopy to Clipboard Copied! Toggle word wrap Toggle overflow où
serviceaccount-signer.privateetserviceaccount-signer.publicsont 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
$ ccoctl aws create-identity-provider \ --name=<name> \ --region=<aws_region> \ --public-key-file=<path_to_ccoctl_output_dir>/serviceaccount-signer.publicCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow où
openid-configurationest un document de découverte etkeys.jsonun 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
CredentialsRequestde 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
$ oc adm release extract --credentials-requests \ --cloud=aws \ --to=<path_to_directory_with_list_of_credentials_requests>/credrequests1 --from=quay.io/<path_to>/ocp-release:<version>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
credrequestsest le répertoire dans lequel la liste des objetsCredentialsRequestest 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
CredentialsRequestpour tous les composants désactivés.Exemple
credrequestscontenu du répertoire pour OpenShift Container Platform 4.12 sur AWSCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
ccoctlpour traiter tous les objetsCredentialsRequestdans 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
$ 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.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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,ccoctlcré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 objetCredentialsRequestde 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
$ ll <path_to_ccoctl_output_dir>/manifestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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 Copier lienLien copié sur presse-papiers!
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
CredentialsRequestde 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 \ --from=quay.io/<path_to>/ocp-release:<version>
$ 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>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
credrequestsest le répertoire dans lequel la liste des objetsCredentialsRequestest 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
CredentialsRequestpour tous les composants désactivés.Exemple
credrequestscontenu du répertoire pour OpenShift Container Platform 4.12 sur AWSCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
ccoctlpour traiter tous les objetsCredentialsRequestdans le répertoirecredrequests:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
ccoctlcré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
ccoctlstocke 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
$ ls <path_to_ccoctl_output_dir>/manifestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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 Copier lienLien copié sur presse-papiers!
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>
openshift-install create install-config --dir <installation_directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow où
<installation_directory>est le répertoire dans lequel le programme d'installation crée les fichiers.Modifiez le fichier de configuration
install-config.yamlde manière à ce qu'il contienne le paramètrecredentialsModefixé àManual.Exemple
install-config.yamlfichier de configurationCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ openshift-install create manifestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copiez les manifestes générés par
ccoctldans le répertoire manifests créé par le programme d'installation :cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
$ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copiez la clé privée générée par
ccoctldans le répertoiretlsdans le répertoire d'installation :cp -a /<path_to_ccoctl_output_dir>/tls .
$ cp -a /<path_to_ccoctl_output_dir>/tls .Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez le programme d'installation d'OpenShift Container Platform :
./openshift-install create cluster
$ ./openshift-install create clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19.5.2.4. Vérification de l'installation Copier lienLien copié sur presse-papiers!
- 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
$ oc get secrets -n kube-system aws-credsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Le résultat devrait ressembler à ce qui suit :
Error from server (NotFound): secrets "aws-creds" not found
Error from server (NotFound): secrets "aws-creds" not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ oc get secrets -n openshift-image-registry installer-cloud-credentials -o json | jq -r .data.credentials | base64 --decodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
[default] role_arn = arn:aws:iam::123456789:role/openshift-image-registry-installer-cloud-credentials web_identity_token_file = /var/run/secrets/openshift/serviceaccount/tokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow