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).

Note

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

Detailed authentication flow between AWS and the cluster when using AWS 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>

1
L'espace de noms du composant.
2
Le nom du composant secret.

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

1
L'espace de noms du composant.
2
Le nom du composant secret.
3
Le rôle IAM pour le composant.
4
Le chemin d'accès au jeton du compte de service dans le pod. Par convention, il s'agit de /var/run/secrets/openshift/serviceaccount/token pour les composants de OpenShift Container Platform.

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 :

Note

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

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).

Note

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

  1. 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}')
  2. 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)
    Note

    Veillez à ce que l'architecture de $RELEASE_IMAGE corresponde à l'architecture de l'environnement dans lequel vous utiliserez l'outil ccoctl.

  3. 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
  4. 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.

Note

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

  1. 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

    serviceaccount-signer.private et serviceaccount-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.

  2. 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 commande ccoctl 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

    openid-configuration est un document de découverte et keys.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.

  3. Créer des rôles IAM pour chaque composant du cluster.

    1. 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 objets CredentialsRequest est stockée. Cette commande crée le répertoire s'il n'existe pas.
    2. 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 AWS

      0000_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.
    3. Utilisez l'outil ccoctl pour traiter tous les objets CredentialsRequest dans le répertoire credrequests:

      $ 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
      Note

      Pour 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 objet CredentialsRequest 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.

Note

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

  1. 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 objets CredentialsRequest est stockée. Cette commande crée le répertoire s'il n'existe pas.
    Note

    L'exécution de cette commande peut prendre quelques instants.

  2. 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 AWS

    0000_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.
  3. Utilisez l'outil ccoctl pour traiter tous les objets CredentialsRequest dans le répertoire credrequests:

    $ 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.
    Note

    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.

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

  1. 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>

    <installation_directory> est le répertoire dans lequel le programme d'installation crée les fichiers.

  2. Modifiez le fichier de configuration install-config.yaml de manière à ce qu'il contienne le paramètre credentialsMode fixé à Manual.

    Exemple install-config.yaml fichier de configuration

    apiVersion: 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.
  3. Créez les manifestes d'installation requis pour OpenShift Container Platform :

    $ openshift-install create manifests
  4. 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/
  5. Copiez la clé privée générée par ccoctl dans le répertoire tls dans le répertoire d'installation :

    $ cp -a /<path_to_ccoctl_output_dir>/tls .
  6. Exécutez le programme d'installation d'OpenShift Container Platform :

    $ ./openshift-install create cluster

19.5.2.4. Vérification de l'installation

  1. Connectez-vous au cluster OpenShift Container Platform.
  2. 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
  3. 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

19.5.3. Ressources complémentaires

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.