0
votes

Comment puis-je joindre une politique iam gérée et une politique iam en ligne / personnalisée à IAM Rôles?

Je veux joindre une stratégie IAM gérée ARN (comme Amazoms3fullAccess CODE>) et une politique IAM inline / personnalisée (écrite dans JSON dans le fichier TerraForm) à un seul rôle IAM.

En utilisant AWS_IAM_ROLE_POLICY_ATCHAMMENT CODE> Je ne peux connecter qu'une seule stratégie, quelle est la façon de joindre les deux? p> xxx pré>

maintenant je souhaite joindre une stratégie personnalisée comme ci-dessous à la Rôle p>

resource "aws_iam_role_policy" "test_policy" {
  name = "test_policy"
  role = aws_iam_role.test_role.id

  policy = <<-EOF
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": [
          "ec2:Describe*"
        ],
        "Effect": "Allow",
        "Resource": "*"
      }
    ]
  }
  EOF
}


7 commentaires

Pourriez-vous partager le code que vous avez jusqu'à présent et des erreurs que vous obtenez pourquoi essayer d'ajouter des politiques supplémentaires?


S'il vous plaît vérifier le code mis à jour @marcin


Vous pouvez avoir plusieurs actions définies dans votre bloc d'action pour votre police. Est-ce ce que vous êtes après?


Je souhaite joindre test_policy à test_role à l'aide de aws_iam_role_policy_atchment


Vous pouvez avoir un fichier de modèle séparé pour votre stratégie, puis ajouter les actions à partir de là dans le fichier. Regardez cette Medium.com/@mitesh_shamra/....


Je veux joindre la politique de la politique iam gérée et la politique de personnalité IAM en Json (en tant que fichier ou en terraform) à un seul rôle test_role , dans le code ci-dessus, j'ai déjà joint des stratégies AWS gérées à Test_role , je veux joindre test_policy pour tester le rôle aussi. Le lien que vous avez mentionné montre comment ajouter une stratégie personnalisée à un rôle. Je cherche à la fois une politique personnalisée et une politique gérée AWS au rôle unique.


Vous pouvez ajouter la stratégie gérée et votre stratégie de test dans un fichier de modèle distinct, puis joindre cette politique au rôle.


4 Réponses :


1
votes

Il suffit de les transmettre comme une variable ou de les déclarer comme une valeur locale, puis itérer sur une telle variable.

Par exemple: P>

resource "aws_iam_role_policy_attachment" "attach" {
  count      = length(var.policies)
  role       = aws_iam_role.my_role.name
  policy_arn = ${var.policies[count.index]}
}


1 commentaires

Je souhaite ajouter une stratégie personnalisée via JSON dans Terraform Terraform, par exemple Ressource "AWS_IAM_ROLE_POLICY" "TEST_POLICY" {NAME = "TEST_POLICY" RÔLE = AWS_IAM_ROLE.TEST_ROLE.ID POLITIQUE = << - EOF {"Version": "2012 -10-17 "," Déclaration ": [{" action ": [" EC2: décrit * "]," effet ":" Autoriser "," ressource ":" * "}]} eof}



0
votes

Vous devrez peut-être modifier la stratégie à vos besoins, mais c'est ce dont on ressemblerait. Vous pouvez effectuer ce qui suit: xxx

espère qu'il aide.


0 commentaires

0
votes

Vous pouvez ajouter la stratégie intégrée avec JSON intégrée comme suit: xxx pré>

ou vous pouvez utiliser un aws_iam_policy_document fort> pour obtenir une meilleure vérification des erreurs dans Idées comme Intellij Idea : P>

resource "aws_iam_role" "test_role" {
  name = "test_role"

  assume_role_policy = data.aws_iam_policy_document.allow_ec2_and_sagemaker
}

data "aws_iam_policy_document" "allow_ec2_and_sagemaker" {
  version = "2012-10-17"

  statement {
    sid    = "AllowEC2AndSageMaker"
    effect = "Allow"

    actions = [
      "sts:AssumeRole",
    ]

    principals {
      type = "Service"
      identifiers = [
        "ec2.amazonaws.com",
        "sagemaker.amazonaws.com",
      ]
    }
  }
}


0 commentaires

0
votes

J'ai pu joindre une politique gérée IAM et une politique IAM inline / personnalisée au rôle IAM à l'aide du code ci-dessous.

# variables.tf
variable "cloudwatch_lambda_iam_policy_arn" {
  type        = list(string)
  description = "IAM Policy to be attached to AWS CloudWatch Lambda role"
  default     = ["arn:aws:iam::aws:policy/AmazonEC2FullAccess", "arn:aws:iam::aws:policy/AWSLambdaExecute", "arn:aws:iam::aws:policy/AmazonCloudDirectoryFullAccess", "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]
}

#------------------------------------------------------------

# lambda.tf
resource "aws_iam_role" "awsmetrics_exec_role" {
  name = "awsmetrics-exec-role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

# custom/inline policy
resource "aws_iam_role_policy" "sts_assumerole_lambda" {
  name = "sts-assumerole-lambda"
  role = aws_iam_role.awsmetrics_exec_role.id

  policy = <<-EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole",
        "sts:DecodeAuthorizationMessage",
        "sts:AssumeRoleWithSAML",
        "sts:AssumeRoleWithWebIdentity"
      ],
      "Resource": "*"
    }
  ]
}
EOF
}

# AWS managed policies
resource "aws_iam_role_policy_attachment" "awsmetrics_role_policy_attachment" {
  role       = aws_iam_role.awsmetrics_exec_role.name
  count      = length(var.cloudwatch_lambda_iam_policy_arn)
  policy_arn = element(var.cloudwatch_lambda_iam_policy_arn, count.index)
}


0 commentaires