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
ccoctl
avec les autorisations suivantes :Expand 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}')
$ 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_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
$ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Modifiez les autorisations pour rendre
ccoctl
exécutable en exécutant la commande suivante :chmod 775 ccoctl
$ chmod 775 ccoctl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
$ ccoctl --help
Copy 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-pair
Copy 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 installer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ ccoctl aws create-identity-provider \ --name=<name> \ --region=<aws_region> \ --public-key-file=<path_to_ccoctl_output_dir>/serviceaccount-signer.public
Copy 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.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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
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 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
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
$ 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
Copy 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
,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
$ ll <path_to_ccoctl_output_dir>/manifests
Copy 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
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 \ --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
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 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
ccoctl
pour traiter tous les objetsCredentialsRequest
dans 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
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
$ ls <path_to_ccoctl_output_dir>/manifests
Copy 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.yaml
de manière à ce qu'il contienne le paramètrecredentialsMode
fixé àManual
.Exemple
install-config.yaml
fichier 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 manifests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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/
$ 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
ccoctl
dans le répertoiretls
dans 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 cluster
Copy 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-creds
Copy 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 found
Copy 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 --decode
Copy 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/token
Copy to Clipboard Copied! Toggle word wrap Toggle overflow