111 votes

Terraform: comment associer correctement les stratégies gérées par AWS à un rôle?

Je veux joindre l'un des pré-existant AWS gérées des rôles à un politique, voici mon code actuel:

resource "aws_iam_role_policy_attachment" "sto-readonly-role-policy-attach" {
  role       = "${aws_iam_role.sto-test-role.name}"
  policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}

Est-il une meilleure façon de modéliser la gestion de la politique et de la référence au lieu de coder en dur les ARN? Il semble juste comme à chaque fois que j'ai coder en dur des ARNs / les chemins ou autres trucs de ce genre, j'ai l'habitude de trouver plus tard, il y a une meilleure façon.

Est-il quelque chose de déjà existant dans Terraform que les modèles gérés politiques? Ou est coder en dur les ARN de la "bonne" façon de faire?

163voto

jorelli Points 2494

L' IAM de la Politique de la source de données est excellent pour cela. Une ressource de données est utilisé pour décrire des données ou des ressources qui ne sont pas gérés activement par Terraform, mais sont référencés par Terraform.

Pour votre exemple, vous créez une ressource de données pour la gestion de la politique comme suit:

data "aws_iam_policy" "ReadOnlyAccess" {
  arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}

Le nom de la source de données, ReadOnlyAccess dans ce cas, est entièrement à vous. À la gestion des politiques-je utiliser le même nom que le nom de la politique pour des raisons de cohérence, mais vous pouvez tout aussi facilement nom c' readonly si cela vous convient.

Vous devez ensuite fixer la politique IAM à votre rôle comme suit:

resource "aws_iam_role_policy_attachment" "sto-readonly-role-policy-attach" {
  role       = "${aws_iam_role.sto-test-role.name}"
  policy_arn = "${data.aws_iam_policy.ReadOnlyAccess.arn}"
}

18voto

Martin Atkins Points 3034

Lors de l'utilisation de valeurs de transformer le terrain en lui-même n'est pas directement gérer, vous avez quelques options.

La première, l'option la plus simple est juste de coder en dur la valeur que vous avez fait ici. C'est une réponse simple si vous vous attendez à ce que la valeur ne changera jamais. Étant donné que ces "conserve politiques" sont documentés, haut-AWS caractéristiques il est probable qu'ils correspondent à ce critère.

La deuxième option est de créer un Terraform module et de coder en dur la valeur en queet faire référence à ce module à partir de plusieurs autres modules. Cela permet de gérer la valeur de manière centralisée et de l'utiliser plusieurs fois. Un module qui contient uniquement les sorties d'un modèle commun pour ce genre de chose, bien que vous pourriez aussi choisir de faire un module qui contient un aws_iam_role_policy_attachment des ressources avec le jeu de rôle à partir d'une variable.

La troisième option consiste à placer la valeur dans un endroit que Terraform pouvez récupérer les valeurs d', comme Consul, puis de les récupérer à partir de là à l'aide d'une source de données. Avec seulement transformer le terrain en jeu, cela finit par être largement équivalente à la deuxième option, même si cela signifie transformer le terrain de re-lire à chaque actualisation plutôt que seulement lorsque vous mettez à jour le module à l'aide de terraform init -upgrade, et donc cela pourrait être une meilleure option pour les valeurs qui changent souvent.

La quatrième option est d'utiliser une source de données spécialisée qui permet de lire directement la valeur de la source de la vérité. Terraform n'a pas actuellement avoir une source de données pour récupérer des informations sur AWS géré politiques, donc ce n'est pas une option pour votre situation actuelle, mais peut être utilisé pour récupérer d'autres AWS de données défini comme AWS plages d'adresses IP, le service ARNs, etc.

Laquelle de ces est approprié pour une situation donnée dépendra de la façon dont souvent les changements de valeur, qui gère des modifications, et sur la disponibilité d'spécialisés Terraform sources de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X