9.3. Assumer un rôle AWS IAM dans vos propres pods


Dans cette section, suivez les procédures pour permettre à un compte de service d’assumer un rôle AWS Identity and Access Management (IAM) dans une pod déployée dans un projet défini par l’utilisateur.

Il est possible de créer les ressources requises, y compris un rôle AWS IAM, un compte de service, une image conteneur qui inclut un SDK AWS et un pod déployé en utilisant l’image. Dans l’exemple, le SDK AWS Boto3 pour Python est utilisé. Il est également possible de vérifier que le webhook d’identité de la pod mute les variables d’environnement AWS, le montage du volume et le volume de jetons dans votre pod. En outre, vous pouvez vérifier que le compte de service assume le rôle AWS IAM dans votre pod et peut exécuter avec succès les opérations SDK AWS.

Créez un rôle AWS Identity and Access Management (IAM) à assumer par un compte de service dans votre Red Hat OpenShift Service sur AWS cluster. Joindre les autorisations requises par votre compte de service pour exécuter les opérations SDK AWS dans un pod.

Conditions préalables

  • Les autorisations sont requises pour installer et configurer les rôles IAM dans votre compte AWS.
  • Accès à un service Red Hat OpenShift sur le cluster AWS qui utilise AWS Security Token Service (STS). Les privilèges utilisateur de niveau admin ne sont pas requis.
  • Le nom de ressource Amazon (ARN) pour le fournisseur OpenID Connect (OIDC) qui est configuré comme émetteur de compte de service dans votre Red Hat OpenShift Service sur AWS avec le cluster STS.

    Note

    Dans Red Hat OpenShift Service sur AWS avec des clusters STS, le fournisseur OIDC est créé lors de l’installation et défini comme émetteur de compte de service par défaut. Lorsque vous ne connaissez pas l’ARN du fournisseur OIDC, contactez l’administrateur de votre cluster.

  • L’AWS CLI (aws) a été installé.

Procédure

  1. Créez un fichier nommé trust-policy.json avec la configuration JSON suivante:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Federated": "<oidc_provider_arn>" 
    1
    
                },
                "Action": "sts:AssumeRoleWithWebIdentity",
                "Condition": {
                    "StringEquals": {
                        "<oidc_provider_name>:sub": "system:serviceaccount:<project_name>:<service_account_name>" 
    2
    
                    }
                }
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
    1
    &lt;oidc_provider_arn&gt; par l’ARN de votre fournisseur OIDC, par exemple arn:aws:iam::&lt;aws_account_id&gt;:oidc-provider/rh-oidc.s3.us-east-1.amazonaws.com/1v3r0n44npxu4g58so46aeohduomfres.
    2
    Limite le rôle au compte de projet et de service spécifié. &lt;oidc_provider_name&gt; par le nom de votre fournisseur OIDC, par exemple rh-oidc.s3.us-east-1.amazonaws.com/1v3r0n44npxu4g58so46aeohduomfres. &lt;project_name&gt;:&lt;service_account_name&gt; par le nom de votre projet et le nom de votre compte de service, par exemple my-project:test-service-account.
    Note

    Alternativement, vous pouvez limiter le rôle à n’importe quel compte de service dans le projet spécifié en utilisant "&lt;oidc_provider_name&gt;:sub": "system:serviceaccount:&lt;project_name&gt;:*". Dans le cas où vous fournissez le générique *, vous devez remplacer StringEquals par StringLike dans la ligne précédente.

  2. Créer un rôle AWS IAM qui utilise la politique de confiance définie dans le fichier trust-policy.json:

    $ aws iam create-role \
        --role-name <aws_iam_role_name> \ 
    1
    
        --assume-role-policy-document file://trust-policy.json 
    2
    Copy to Clipboard Toggle word wrap
    1
    &lt;aws_iam_role_name&gt; par le nom de votre rôle IAM, par exemple pod-identity-test-role.
    2
    Fait référence au fichier trust-policy.json que vous avez créé à l’étape précédente.

    Exemple de sortie

    ROLE    arn:aws:iam::<aws_account_id>:role/<aws_iam_role_name>        2022-09-28T12:03:17+00:00       /       AQWMS3TB4Z2N3SH7675JK   <aws_iam_role_name>
    ASSUMEROLEPOLICYDOCUMENT        2012-10-17
    STATEMENT       sts:AssumeRoleWithWebIdentity   Allow
    STRINGEQUALS    system:serviceaccount:<project_name>:<service_account_name>
    PRINCIPAL       <oidc_provider_arn>
    Copy to Clipboard Toggle word wrap

    Conserver l’ARN pour le rôle dans la sortie. Le format du rôle ARN est arn:aws:iam::&lt;aws_account_id&gt;:role/&lt;aws_iam_role_name&gt;.

  3. Joindre toutes les autorisations AWS gérées qui sont nécessaires lorsque le compte de service exécute les opérations AWS SDK dans votre pod:

    $ aws iam attach-role-policy \
        --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess \ 
    1
    
        --role-name <aws_iam_role_name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    La politique de cet exemple ajoute des autorisations d’accès en lecture seule au rôle IAM.
    2
    &lt;aws_iam_role_name&gt; par le nom du rôle IAM que vous avez créé à l’étape précédente.
  4. Facultatif : Ajoutez des attributs personnalisés ou une limite d’autorisations au rôle. En savoir plus, voir Création d’un rôle pour déléguer des autorisations à un service AWS dans la documentation AWS.

9.3.2. Créer un compte de service dans votre projet

Ajoutez un compte de service dans votre projet défini par l’utilisateur. Incluez une annotation eks.amazonaws.com/rolle-arn dans la configuration du compte de service qui fait référence au nom de ressource Amazon (ARN) pour le rôle AWS Identity and Access Management (IAM) que vous souhaitez que le compte de service assume.

Conditions préalables

  • « vous avez créé un rôle AWS IAM pour votre compte de service. Cliquez ici pour plus d’informations sur la configuration d’un rôle AWS IAM pour un compte de service.
  • Accès à un service Red Hat OpenShift sur AWS avec le cluster AWS Security Token Service (STS). Les privilèges utilisateur de niveau admin ne sont pas requis.
  • L’OpenShift CLI (oc) a été installé.

Procédure

  1. Dans votre Red Hat OpenShift Service sur AWS cluster, créez un projet:

    $ oc new-project <project_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    &lt;project_name&gt; par le nom de votre projet. Le nom doit correspondre au nom du projet que vous avez spécifié dans votre configuration de rôle AWS IAM.
    Note

    Lors de sa création, vous passez automatiquement au projet.

  2. Créez un fichier nommé test-service-account.yaml avec la configuration de compte de service suivante:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: <service_account_name> 
    1
    
      namespace: <project_name> 
    2
    
      annotations:
        eks.amazonaws.com/role-arn: "<aws_iam_role_arn>" 
    3
    Copy to Clipboard Toggle word wrap
    1
    &lt;service_account_name&gt; par le nom de votre compte de service. Le nom doit correspondre au nom de compte de service que vous avez spécifié dans votre configuration de rôle AWS IAM.
    2
    &lt;project_name&gt; par le nom de votre projet. Le nom doit correspondre au nom du projet que vous avez spécifié dans votre configuration de rôle AWS IAM.
    3
    Indique l’ARN du rôle AWS IAM que le compte de service assume pour une utilisation dans votre pod. &lt;aws_iam_role_arn&gt; par l’ARN pour le rôle AWS IAM que vous avez créé pour votre compte de service. Le format du rôle ARN est arn:aws:iam::&lt;aws_account_id&gt;:role/&lt;aws_iam_role_name&gt;.
  3. Créez le compte de service dans votre projet:

    $ oc create -f test-service-account.yaml
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    serviceaccount/<service_account_name> created
    Copy to Clipboard Toggle word wrap

  4. Examinez les détails du compte de service:

    $ oc describe serviceaccount <service_account_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    &lt;service_account_name&gt; par le nom de votre compte de service.

    Exemple de sortie

    Name:                <service_account_name> 
    1
    
    Namespace:           <project_name> 
    2
    
    Labels:              <none>
    Annotations:         eks.amazonaws.com/role-arn: <aws_iam_role_arn> 
    3
    
    Image pull secrets:  <service_account_name>-dockercfg-rnjkq
    Mountable secrets:   <service_account_name>-dockercfg-rnjkq
    Tokens:              <service_account_name>-token-4gbjp
    Events:              <none>
    Copy to Clipboard Toggle word wrap

    1
    Indique le nom du compte de service.
    2
    Indique le projet qui contient le compte de service.
    3
    Liste l’annotation pour l’ARN du rôle AWS IAM que le compte de service assume.

9.3.3. Création d’une image de conteneur AWS SDK

Les étapes de cette procédure fournissent un exemple de méthode pour créer une image conteneur qui inclut un SDK AWS.

Les étapes d’exemple utilisent Podman pour créer l’image conteneur et Quay.io pour héberger l’image. En savoir plus sur Quay.io, voir Getting Started with Quay.io. L’image conteneur peut être utilisée pour déployer des pods qui peuvent exécuter des opérations SDK AWS.

Note

Dans cette procédure d’exemple, le SDK AWS Boto3 pour Python est installé dans une image conteneur. Consultez la documentation AWS Boto3 pour plus d’informations sur l’installation et l’utilisation du SDK AWS Boto3. Consultez le Guide de référence AWS SDK et Tools dans la documentation AWS pour plus de détails sur les autres SDK AWS.

Conditions préalables

  • J’ai installé Podman sur votre hôte d’installation.
  • Il y a un compte d’utilisateur Quay.io.

Procédure

  1. Ajouter la configuration suivante à un fichier nommé Containerfile:

    FROM ubi9/ubi 
    1
    
    RUN dnf makecache && dnf install -y python3-pip && dnf clean all && pip3 install boto3>=1.15.0 
    2
    Copy to Clipboard Toggle word wrap
    1
    Indique la version 9 de Red Hat Universal Base Image.
    2
    Installe le SDK AWS Boto3 à l’aide du système de gestion des paquets pip. Dans cet exemple, AWS Boto3 SDK version 1.15.0 ou ultérieure est installée.
  2. À partir du répertoire qui contient le fichier, construisez une image de conteneur nommée awsboto3sdk:

    $ podman build -t awsboto3sdk .
    Copy to Clipboard Toggle word wrap
  3. Connectez-vous à Quay.io:

    $ podman login quay.io
    Copy to Clipboard Toggle word wrap
  4. Balisez l’image en préparation pour le téléchargement sur Quay.io:

    $ podman tag localhost/awsboto3sdk quay.io/<quay_username>/awsboto3sdk:latest 
    1
    Copy to Clipboard Toggle word wrap
    1
    &lt;quay_username&gt; par votre nom d’utilisateur Quay.io.
  5. Appuyez sur l’image du conteneur marqué sur Quay.io:

    $ podman push quay.io/<quay_username>/awsboto3sdk:latest 
    1
    Copy to Clipboard Toggle word wrap
    1
    &lt;quay_username&gt; par votre nom d’utilisateur Quay.io.
  6. Faites le dépôt Quay.io qui contient l’image publique. Cela publie l’image afin qu’elle puisse être utilisée pour déployer un pod dans votre Red Hat OpenShift Service sur AWS cluster:

    1. Dans https://quay.io/, accédez à la page Paramètres de dépôt pour le référentiel qui contient l’image.
    2. Cliquez sur Rendre public pour rendre le référentiel accessible au public.

9.3.4. Déploiement d’un pod qui inclut un SDK AWS

Déployez un pod dans un projet défini par l’utilisateur à partir d’une image conteneur qui comprend un SDK AWS. Dans votre configuration de pod, spécifiez le compte de service qui inclut l’annotation eks.amazonaws.com/role-arn.

Avec la référence du compte de service en place pour votre pod, le webhook d’identité de pod injecte les variables d’environnement AWS, le montage de volume et le volume de jetons dans votre pod. La mutation de pod permet au compte de service d’assumer automatiquement le rôle AWS IAM dans le pod.

Conditions préalables

  • Il a créé un rôle AWS Identity and Access Management (IAM) pour votre compte de service. Cliquez ici pour plus d’informations sur la configuration d’un rôle AWS IAM pour un compte de service.
  • Accès à un service Red Hat OpenShift sur le cluster AWS qui utilise AWS Security Token Service (STS). Les privilèges utilisateur de niveau admin ne sont pas requis.
  • L’OpenShift CLI (oc) a été installé.
  • Dans votre projet, vous avez créé un compte de service qui inclut une annotation eks.amazonaws.com/role-arn qui fait référence au nom de ressource Amazon (ARN) pour le rôle IAM que vous souhaitez que le compte de service assume.
  • Il y a une image conteneur qui inclut un SDK AWS et l’image est disponible pour votre cluster. Cliquez sur Créer un exemple d’image de conteneur SDK AWS.

    Note

    Dans cette procédure d’exemple, le SDK AWS Boto3 pour Python est utilisé. Consultez la documentation AWS Boto3 pour plus d’informations sur l’installation et l’utilisation du SDK AWS Boto3. Consultez le Guide de référence AWS SDK et Tools dans la documentation AWS pour plus de détails sur les autres SDK AWS.

Procédure

  1. Créez un fichier nommé awsboto3sdk-pod.yaml avec la configuration de pod suivante:

    apiVersion: v1
    kind: Pod
    metadata:
      namespace: <project_name> 
    1
    
      name: awsboto3sdk 
    2
    
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      serviceAccountName: <service_account_name> 
    3
    
      containers:
      - name: awsboto3sdk
        image: quay.io/<quay_username>/awsboto3sdk:latest 
    4
    
        command:
        - /bin/bash
        - "-c"
        - "sleep 100000" 
    5
    
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: [ALL]
      terminationGracePeriodSeconds: 0
      restartPolicy: Never
    Copy to Clipboard Toggle word wrap
    1
    &lt;project_name&gt; par le nom de votre projet. Le nom doit correspondre au nom du projet que vous avez spécifié dans votre configuration de rôle AWS IAM.
    2
    Indique le nom du pod.
    3
    &lt;service_account_name&gt; par le nom du compte de service configuré pour assumer le rôle AWS IAM. Le nom doit correspondre au nom de compte de service que vous avez spécifié dans votre configuration de rôle AWS IAM.
    4
    Indique l’emplacement de votre image de conteneur awsboto3sdk. &lt;quay_username&gt; par votre nom d’utilisateur Quay.io.
    5
    Dans cet exemple de configuration de pod, cette ligne maintient le pod en cours d’exécution pendant 100000 secondes pour permettre les tests de vérification dans le pod directement. En ce qui concerne les étapes de vérification détaillées, voir Vérifier le rôle assumé de l’IAM dans votre pod.
  2. Déployer un awsboto3sdk pod:

    $ oc create -f awsboto3sdk-pod.yaml
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    pod/awsboto3sdk created
    Copy to Clipboard Toggle word wrap

9.3.5. La vérification du rôle de l’IAM dans votre pod

Après avoir déployé un pod awsboto3sdk dans votre projet, vérifiez que le webhook d’identité de la gousse a muté le pod. Assurez-vous que les variables d’environnement AWS requises, le montage de volume et le volume de jetons OIDC sont présents dans le pod.

En outre, vous pouvez vérifier que le compte de service assume le rôle AWS Identity and Access Management (IAM) pour votre compte AWS lorsque vous exécutez des opérations SDK AWS dans la pod.

Conditions préalables

  • « vous avez créé un rôle AWS IAM pour votre compte de service. Cliquez ici pour plus d’informations sur la configuration d’un rôle AWS IAM pour un compte de service.
  • Accès à un service Red Hat OpenShift sur le cluster AWS qui utilise AWS Security Token Service (STS). Les privilèges utilisateur de niveau admin ne sont pas requis.
  • L’OpenShift CLI (oc) a été installé.
  • Dans votre projet, vous avez créé un compte de service qui inclut une annotation eks.amazonaws.com/role-arn qui fait référence au nom de ressource Amazon (ARN) pour le rôle IAM que vous souhaitez que le compte de service assume.
  • Dans votre projet défini par l’utilisateur, vous avez déployé un pod qui inclut un SDK AWS. Le pod fait référence au compte de service qui utilise le webhook d’identité de pod pour assumer le rôle AWS IAM requis pour exécuter les opérations SDK AWS. Les étapes détaillées, voir Déploiement d’un pod qui inclut un SDK AWS.

    Note

    Dans cette procédure d’exemple, un pod qui inclut le SDK AWS Boto3 pour Python est utilisé. Consultez la documentation AWS Boto3 pour plus d’informations sur l’installation et l’utilisation du SDK AWS Boto3. Consultez le Guide de référence AWS SDK et Tools dans la documentation AWS pour plus de détails sur les autres SDK AWS.

Procédure

  1. Assurez-vous que les variables d’environnement AWS, le montage de volume et le volume de jetons OIDC sont listés dans la description du pod awsboto3sdk déployé:

    $ oc describe pod awsboto3sdk
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Name:         awsboto3sdk
    Namespace:    <project_name>
    ...
    Containers:
      awsboto3sdk:
        ...
        Environment:
          AWS_ROLE_ARN:                 <aws_iam_role_arn> 
    1
    
          AWS_WEB_IDENTITY_TOKEN_FILE:  /var/run/secrets/eks.amazonaws.com/serviceaccount/token 
    2
    
        Mounts:
          /var/run/secrets/eks.amazonaws.com/serviceaccount from aws-iam-token (ro) 
    3
    
    ...
    Volumes:
      aws-iam-token: 
    4
    
        Type:                    Projected (a volume that contains injected data from multiple sources)
        TokenExpirationSeconds:  86400
    ...
    Copy to Clipboard Toggle word wrap

    1
    Liste la variable d’environnement AWS_ROLE_ARN qui a été injectée dans le pod par le webhook d’identité de la gousse. La variable contient l’ARN du rôle AWS IAM à assumer par le compte de service.
    2
    Liste la variable d’environnement AWS_WEB_IDENTITY_TOKEN_FILE qui a été injectée dans le pod par le webhook d’identité de pod. La variable contient le chemin complet du jeton OIDC qui est utilisé pour vérifier l’identité du compte de service.
    3
    Liste le support de volume qui a été injecté dans la gousse par le webhook d’identité de la gousse.
    4
    Liste le volume aws-iam-token monté sur le point de montage /var/run/secrets/eks.amazonaws.com/serviceaccount. Le volume contient le jeton OIDC qui est utilisé pour authentifier le compte de service pour assumer le rôle AWS IAM.
  2. Démarrez un terminal interactif dans le pod awsboto3sdk:

    $ oc exec -ti awsboto3sdk -- /bin/sh
    Copy to Clipboard Toggle word wrap
  3. Dans le terminal interactif du pod, vérifiez que la variable d’environnement $AWS_ROLE_ARN a été mutée dans la pod par le webhook d’identité de la gousse:

    $ echo $AWS_ROLE_ARN
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    arn:aws:iam::<aws_account_id>:role/<aws_iam_role_name> 
    1
    Copy to Clipboard Toggle word wrap

    1
    La sortie doit spécifier l’ARN pour le rôle AWS IAM qui a les autorisations requises pour exécuter les opérations SDK AWS.
  4. Dans le terminal interactif du pod, vérifiez que la variable d’environnement $AWS_WEB_IDENTITY_TOKEN_FILE a été mutée dans le pod par le webhook d’identité du pod:

    $ echo $AWS_WEB_IDENTITY_TOKEN_FILE
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    /var/run/secrets/eks.amazonaws.com/serviceaccount/token 
    1
    Copy to Clipboard Toggle word wrap

    1
    La sortie doit spécifier le chemin complet dans le pod vers le jeton OIDC pour le compte de service.
  5. Dans le terminal interactif du pod, vérifiez que le support de volume aws-iam-token contenant le fichier de jeton OIDC a été monté par le webhook d’identité de pod:

    $ mount | grep -is 'eks.amazonaws.com'
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    tmpfs on /run/secrets/eks.amazonaws.com/serviceaccount type tmpfs (ro,relatime,seclabel,size=13376888k)
    Copy to Clipboard Toggle word wrap

  6. Dans le terminal interactif du pod, vérifiez qu’un fichier de jeton OIDC nommé token est présent sur le point de montage /var/run/secrets/eks.amazonaws.com/serviceaccount/mount:

    $ ls /var/run/secrets/eks.amazonaws.com/serviceaccount/token
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    /var/run/secrets/eks.amazonaws.com/serviceaccount/token 
    1
    Copy to Clipboard Toggle word wrap

    1
    Le fichier de jetons OIDC dans le volume aws-iam-token qui a été monté dans le pod par le webhook d’identité de la gousse. Le jeton est utilisé pour authentifier l’identité du compte de service dans AWS.
  7. Dans le pod, vérifiez que les opérations SDK AWS Boto3 fonctionnent avec succès:

    1. Dans le terminal interactif du pod, démarrez un shell Python 3:

      $ python3
      Copy to Clipboard Toggle word wrap
    2. Dans le shell Python 3, importez le module boto3:

      >>> import boto3
      Copy to Clipboard Toggle word wrap
    3. Créez une variable qui inclut la ressource de service Boto3 s3:

      >>> s3 = boto3.resource('s3')
      Copy to Clipboard Toggle word wrap
    4. Imprimez les noms de tous les seaux S3 de votre compte AWS:

      >>> for bucket in s3.buckets.all():
      ...     print(bucket.name)
      ...
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      <bucket_name>
      <bucket_name>
      <bucket_name>
      ...
      Copy to Clipboard Toggle word wrap

      Dans le cas où le compte de service assumait avec succès le rôle AWS IAM, la sortie répertorie tous les seaux S3 disponibles dans votre compte AWS.

Retour au début
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. Découvrez nos récentes mises à jour.

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 le Blog 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.

Theme

© 2025 Red Hat