web-dev-qa-db-fra.com

Erreur de modèle AWS IAM Cloudformation YAML: les valeurs 'nulles' ne sont pas autorisées

Je travaille sur un modèle Cloudformation pour un rôle IAM qui accorde un accès en lecture seule à plusieurs comptes. Il utilise également une stratégie gérée pour l'accès en lecture seule. Jusqu'à présent, j'ai résolu plusieurs erreurs, mais maintenant j'obtiens une erreur "Les valeurs nulles ne sont pas autorisées dans les modèles" lorsque j'essaie de valider le modèle. Je pense que c'est une chose d'espace ou de syntaxe, mais je ne peux pas être sûr car c'est ma première fois que je crée un modèle de cloudformation à partir de zéro et que j'utilise YAML.

AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation template IAM Role for New Relic to have read access to AWS account
Resources:
  NewRelicInfrastructure-IntegrationsRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
      Version: '2012-10-17'
      Statement:
        Effect: Allow
        Principal:
          AWS: 11111111
        Action: sts:AssumeRole
        Condition:
          StringEquals:
          sts:ExternalId: '11111'
  Path: '/'
  ManagedPolicyArns: arn:aws:iam::aws:policy/ReadOnlyAccess
  RoleName: NewRelicInfrastructure-Integrations2
7
Kyle Mcadams

Indentation corrigée, il spécifiait quelque chose dans AssumeRolePolicyDocument, mais la syntaxe YAML n'était pas correcte, cela a fonctionné:

AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation template IAM Role for New Relic to have read access to AWS account
Resources:
  NewRelicInfrastructureIntegrationsRole: 
    Type: AWS::IAM::Role
    Properties:
      Path: '/managed/'
      ManagedPolicyArns: 
        - 'arn:aws:iam::aws:policy/ReadOnlyAccess'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - 
          Action: sts:AssumeRole  
          Effect: Allow
          Principal:
            AWS: 1111111111111
          Condition:
            StringEquals:
              sts:ExternalId: '11111'
      RoleName: NewRelicInfrastructureIntegrationsRole
4
Kyle Mcadams

Le problème est avec AssumeRolePolicyDocument:. C'est obligatoire mais vous l'avez laissé vide. Vous avez également un problème d'indentation où Path, ManagedPolicyArns et RoleName sont sous Resources au lieu de Properties.

Essayer:

AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation template IAM Role for New Relic to have read access to AWS account
Resources:
  NewRelicInfrastructure-IntegrationsRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          Effect: Allow
          Principal:
            AWS: 11111111
          Action: sts:AssumeRole
          Condition:
            StringEquals:
            sts:ExternalId: '11111'
      Path: '/'
      ManagedPolicyArns: arn:aws:iam::aws:policy/ReadOnlyAccess
      RoleName: NewRelicInfrastructure-Integrations2
1
kichik

Utilisez l'interpréteur YAML en ligne pour vous montrer où vous pourriez obtenir une valeur nulle dans votre fichier yaml. Ils sont difficiles à repérer car une indentation incorrecte peut entraîner une valeur nulle - l'interpréteur yaml vous montrera dans json où vous obtenez cette valeur.

0
Kenzo