web-dev-qa-db-fra.com

CloudFormation n'est pas autorisé à effectuer: iam: PassRole sur la ressource

Cela fait partie du code de mon template.yml dans Cloud9:

Type: 'AWS::Serverless::Function'
Properties:
  Handler: index.handler
  Runtime: nodejs6.10
  CodeUri: .
  Description: Updates records in the AppConfig table.
  MemorySize: 128
  Timeout: 3
  Role: 'arn:aws:iam::579913947261:role/FnRole'
  Events:
    Api1:
      Type: Api
      Properties:

Lorsque je valide les modifications dans Cloud9, le déploiement échoue à l'étape de déploiement de CodePipeline lors de l'essai de ExecuteChangeSet. Je reçois cette erreur:

CloudFormation n'est pas autorisé à effectuer: iam: PassRole sur la ressource

Quelqu'un peut-il aider?

4
Second Of Two

L'utilisateur: arn: aws: sts :: 156478935478: assume-role/CodeStarWorker-AppConfig-CloudFormation/AWSCloudFormation n'est pas autorisé à effectuer: iam: PassRole on resource: arn: aws: iam :: 156478935478: role/service-role/FnRole (Service: AWSLambda; Code d'état: 403; Code d'erreur: AccessDeniedException; ID de requête: 129f601b-a425-11e8-9659-410b0cc8f4f9)

À partir de ce journal, vous pouvez savoir quelle politique (iam:PassRole) doit être affecté au rôle CloudFormation pour votre pile (CodeStarWorker-AppConfig-CloudFormation).

Vous devriez:

  • Aller IAM > Roles
  • Tapez dans la recherche CodeStarWorker-AppConfig-CloudFormation
  • Ouvrez ce rôle et accédez à Permissions
  • Trouvez CodeStarWorkerCloudFormationRolePolicy, développez-le, allez Edit policy
  • Dans cette section suivante, sous ressources, ajoutez l'ARN de votre rôle (arn:aws:iam::579913947261:role/FnRole), si vous n'avez pas cette section, copiez-collez-la, mais sous Resources utilisez vos ARN.

Politique:

{
    "Action": [
        "iam:PassRole"
    ],
    "Resource": [
        "arn:aws:iam::156478935478:role/CodeStarWorker-AppConfig-Lambda",
        "arn:aws:iam::579913947261:role/FnRole"
    ],
    "Effect": "Allow"
}

Si vous souhaitez attribuer cette autorisation à toutes les ressources ("Resource": "*") recherchez la section suivante et ci-dessus sous actions, ajoutez l'autorisation que vous souhaitez attribuer:

"Resource": "*",
"Effect": "Allow"

Vous pouvez appliquer cela pour toutes les autres autorisations que vous souhaitez attribuer à CloudFormation pour vos ressources.

7
Second Of Two

Bien que je ne puisse pas dire précisément ce qui s'est passé dans votre situation, le message d'erreur signifie que le rôle/l'utilisateur que CloudFormation a utilisé pour déployer les ressources n'avait pas de iam:PassRole autorisations.

Le iam:PassRole l'autorisation est utilisée lors de l'attribution d'un rôle aux ressources. Par exemple, lorsqu'une instance Amazon EC2 est lancée avec un rôle IAM, l'entité qui lance l'instance nécessite l'autorisation de spécifier le rôle IAM à utiliser. Cela se fait pour empêcher les utilisateurs d'obtenir trop d'autorisations. Par exemple, un utilisateur non administrateur ne devrait pas être autorisé à lancer une instance avec un rôle administratif, car il aurait alors accès à des autorisations supplémentaires auxquelles il n'a pas droit.

Dans le cas de votre modèle, il semblerait que CloudFormation crée une fonction et attribue l'autorisation FnRole à cette fonction. Cependant, le modèle CloudFormation n'a pas été autorisé à affecter ce rôle à la fonction.

Lorsqu'un modèle CloudFormation est lancé, il provisionne les ressources en tant qu'utilisateur qui crée la pile ou utilise un rôle IAM spécifié lors du lancement de la pile. C'est cet utilisateur/rôle qui nécessite le iam:PassRole autorisations d'utiliser FnRole.

11
John Rotenstein

Si vous changez le nom du rôle de: RoleName: 'arn:aws:iam::579913947261:role/FnRole'

Pour inclure le préfixe de CodeStar - $ {ProjectId}, le rôle peut être créé/mis à jour/etc sans avoir à modifier la stratégie IAM du CodeStarWorker-AppConfig-CloudFormation rôle. par exemple. RoleName: !Sub 'CodeStar-${ProjectId}-[FunctionName]'

J'ai posté une explication complète ici: Changer le rôle IAM pour une Lambda dans un modèle CloudFormation dans un projet CodeStar?

0
AlexB