Terraform 0.11 - aws_iam_policy_document

डेटा स्रोत: aws_iam_policy_document




terraform

डेटा स्रोत: aws_iam_policy_document

JSON प्रारूप में IAM नीति दस्तावेज़ बनाता है।

यह एक डेटा स्रोत है जिसका उपयोग IAM नीति दस्तावेज़ के JSON प्रतिनिधित्व के निर्माण के लिए किया जा सकता है, संसाधनों के साथ उपयोग करने के लिए जो नीति दस्तावेज़ों की अपेक्षा करते हैं, जैसे aws_iam_policy संसाधन।

data "aws_iam_policy_document" "example" {
  statement {
    sid = "1"

    actions = [
      "s3:ListAllMyBuckets",
      "s3:GetBucketLocation",
    ]

    resources = [
      "arn:aws:s3:::*",
    ]
  }

  statement {
    actions = [
      "s3:ListBucket",
    ]

    resources = [
      "arn:aws:s3:::${var.s3_bucket_name}",
    ]

    condition {
      test     = "StringLike"
      variable = "s3:prefix"

      values = [
        "",
        "home/",
        "home/&{aws:username}/",
      ]
    }
  }

  statement {
    actions = [
      "s3:*",
    ]

    resources = [
      "arn:aws:s3:::${var.s3_bucket_name}/home/&{aws:username}",
      "arn:aws:s3:::${var.s3_bucket_name}/home/&{aws:username}/*",
    ]
  }
}

resource "aws_iam_policy" "example" {
  name   = "example_policy"
  path   = "/"
  policy = "${data.aws_iam_policy_document.example.json}"
}

नीति दस्तावेज़ बनाने के लिए इस डेटा स्रोत का उपयोग करना वैकल्पिक है । यह आपके कॉन्फ़िगरेशन के भीतर शाब्दिक JSON स्ट्रिंग्स का उपयोग करने के लिए, या किसी फ़ाइल से कच्चे JSON नीति दस्तावेज़ को पढ़ने के लिए file इंटरपोलेशन फ़ंक्शन का उपयोग करने के लिए भी मान्य है।

तर्क संदर्भ

निम्नलिखित तर्क समर्थित हैं:

  • policy_id (वैकल्पिक) - पॉलिसी दस्तावेज के लिए एक आईडी।
  • source_json (वैकल्पिक) - वर्तमान नीति दस्तावेज़ के लिए आधार के रूप में आयात करने के लिए एक IAM नीति दस्तावेज़। वर्तमान नीति दस्तावेज़ में गैर-रिक्त sid साथ विवरण, स्रोत json में समान साइड के साथ स्टेटमेंट को अधिलेखित कर देंगे। बिना sid विवरण को अधिलेखित नहीं किया जा सकता है।
  • override_json (वैकल्पिक) - वर्तमान नीति दस्तावेज़ को आयात और ओवरराइड करने के लिए IAM नीति दस्तावेज़। ओवरराइड दस्तावेज़ में गैर-रिक्त sid साथ कथन वर्तमान दस्तावेज़ में एक ही साइड के साथ स्टेटमेंट को अधिलेखित कर देंगे। बिना sid विवरण को अधिलेखित नहीं किया जा सकता है।
  • statement (आवश्यक) - एक नेस्टेड कॉन्फ़िगरेशन ब्लॉक (नीचे वर्णित) पॉलिसी दस्तावेज में शामिल किए जाने के लिए एक बयान को कॉन्फ़िगर करना।

प्रत्येक दस्तावेज़ कॉन्फ़िगरेशन में एक या एक से अधिक statement ब्लॉक होना चाहिए, जो प्रत्येक निम्न तर्क को स्वीकार करते हैं:

  • sid (वैकल्पिक) - पॉलिसी स्टेटमेंट के लिए एक आईडी।
  • effect (वैकल्पिक) - या तो "अनुमति दें" या "अस्वीकार करें", यह निर्दिष्ट करने के लिए कि क्या यह कथन दिए गए कार्यों की अनुमति देता है या इनकार करता है। डिफ़ॉल्ट "अनुमति दें" है।
  • actions (वैकल्पिक) - क्रियाओं की एक सूची जिसे यह कथन अनुमति देता है या अस्वीकार करता है। उदाहरण के लिए, ["ec2:RunInstances", "s3:*"]
  • not_actions (वैकल्पिक) - उन कार्यों की एक सूची जो यह कथन लागू नहीं होता है। सूचीबद्ध लोगों को छोड़कर सभी कार्यों के लिए एक नीति विवरण लागू करने के लिए उपयोग किया जाता है।
  • resources (वैकल्पिक) - संसाधन ARN की एक सूची जो यह कथन लागू होता है। यदि IAM नीति के लिए उपयोग किया जाता है तो यह AWS द्वारा आवश्यक है।
  • not_resources (वैकल्पिक) - संसाधन ARN की एक सूची जो यह कथन लागू नहीं होता है। सूचीबद्ध लोगों को छोड़कर सभी संसाधनों के लिए एक नीति विवरण लागू करने के लिए उपयोग किया जाता है।
  • principals (वैकल्पिक) - एक नेस्टेड कॉन्फ़िगरेशन ब्लॉक (नीचे वर्णित) एक संसाधन (या संसाधन पैटर्न) निर्दिष्ट करता है जिस पर यह कथन लागू होता है।
  • not_principals (वैकल्पिक) - principals तरह, सिवाय उन संसाधनों के जो बयान पर लागू नहीं होते हैं।
  • condition (वैकल्पिक) - एक नेस्टेड कॉन्फ़िगरेशन ब्लॉक (नीचे वर्णित) जो एक और, संभवतः-सेवा-विशिष्ट स्थिति को परिभाषित करता है जो इस कथन को लागू करता है या नहीं।

प्रत्येक नीति में शून्य या अधिक principals ब्लॉक या शून्य या अधिक not_principals ब्लॉक हो सकते हैं, जिनमें से प्रत्येक निम्नलिखित तर्क स्वीकार करते हैं:

  • type (आवश्यक) मूलधन का प्रकार। AWS खातों के लिए यह "AWS" है।
  • identifiers (आवश्यक) प्रिंसिपलों के लिए पहचानकर्ताओं की सूची। जब type "AWS" होता है, तो ये IAM उपयोगकर्ता या भूमिका ARN होते हैं।

प्रत्येक नीति विवरण में शून्य या अधिक condition ब्लॉक हो सकते हैं, जिनमें से प्रत्येक निम्नलिखित तर्कों को स्वीकार करते हैं:

  • test (आवश्यक) IAM स्थिति प्रकार का नाम मूल्यांकन करने के लिए।
  • variable (आवश्यक) शर्त को लागू करने के लिए एक प्रसंग चर का नाम। संदर्भ चर या तो मानक AWS चर हो सकते हैं, जो aws: शुरू होते हैं aws: या सेवा नाम के साथ उप-विशिष्ट चर।
  • values (आवश्यक) के खिलाफ स्थिति का मूल्यांकन करने के लिए मूल्य। यदि कई मान प्रदान किए जाते हैं, तो उनमें से कम से कम एक पर लागू होने पर स्थिति मेल खाती है। (अर्थात्, परीक्षण "या" बूलियन ऑपरेशन के साथ संयुक्त हैं।)

जब कई condition ब्लॉक प्रदान किए जाते हैं, तो उन्हें लागू करने के लिए नीति विवरण के लिए सभी का सही मूल्यांकन करना होगा। (दूसरे शब्दों में, शर्तों को "और" बूलियन ऑपरेशन के साथ जोड़ा जाता है।)

प्रसंग परिवर्तनशील प्रक्षेप

IAM नीति दस्तावेज़ प्रारूप संदर्भ चर को एक स्टेटमेंट के भीतर विभिन्न स्ट्रिंग्स में प्रक्षेपित करने की अनुमति देता है। मूल IAM नीति दस्तावेज़ प्रारूप ${...} -स्टाइल सिंटैक्स का उपयोग करता है जो कि टेराफ़ॉर्म के प्रक्षेप सिंटैक्स के साथ विरोध में होता है, इसलिए यह डेटा स्रोत इसके बजाय &{...} सिंटैक्स का उपयोग करता है, जिसे टेराफ़ॉर्म द्वारा AWS द्वारा संसाधित किया जाना चाहिए ।

वाइल्डकार्ड प्रिंसिपल

वाइल्डकार्ड प्रिंसिपल (उर्फ अनाम उपयोगकर्ता) को परिभाषित करने के लिए type = "*" और identifiers = ["*"] । उस मामले में प्रदान किए गए जोंस में "Principal": "*" । ध्यान दें, भले ही IAM दस्तावेज़ीकरण बताता है कि "Principal": "*" और "Principal": {"AWS": "*"} समतुल्य हैं, उन प्रिंसिपलों का IAM रोल ट्रस्ट पॉलिसी के लिए अलग व्यवहार है। इसलिए Terraform केवल उपर्युक्त मामले में प्रिंसिपल फील्ड को सामान्य करेगा और type = "AWS" और identifiers = ["*"] जैसे "Principal": {"AWS": "*"} को "Principal": {"AWS": "*"}

संदर्भ संदर्भित करता है

निम्नलिखित विशेषता निर्यात की जाती है:

  • json - उपरोक्त तर्क एक मानक JSON नीति दस्तावेज़ के रूप में क्रमबद्ध हैं।

कई प्राचार्यों के साथ उदाहरण

यह दिखाते हुए कि आप इसे एक मान्‍यता नीति के रूप में कैसे उपयोग कर सकते हैं और साथ ही यह भी दिखा सकते हैं कि आप विभिन्न प्रकारों के साथ कई प्रमुख ब्लॉक कैसे निर्दिष्ट कर सकते हैं।

data "aws_iam_policy_document" "event_stream_bucket_role_assume_role_policy" {
  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["firehose.amazonaws.com"]
    }

    principals {
      type        = "AWS"
      identifiers = ["${var.trusted_role_arn}"]
    }
  }
}

स्रोत और ओवरराइड के साथ उदाहरण

यह source_json कि आप source_json और override_json उपयोग कैसे कर सकते override_json

data "aws_iam_policy_document" "source" {
  statement {
    actions   = ["ec2:*"]
    resources = ["*"]
  }

  statement {
    sid = "SidToOverwrite"

    actions   = ["s3:*"]
    resources = ["*"]
  }
}

data "aws_iam_policy_document" "source_json_example" {
  source_json = "${data.aws_iam_policy_document.source.json}"

  statement {
    sid = "SidToOverwrite"

    actions = ["s3:*"]

    resources = [
      "arn:aws:s3:::somebucket",
      "arn:aws:s3:::somebucket/*",
    ]
  }
}

data "aws_iam_policy_document" "override" {
  statement {
    sid = "SidToOverwrite"

    actions   = ["s3:*"]
    resources = ["*"]
  }
}

data "aws_iam_policy_document" "override_json_example" {
  override_json = "${data.aws_iam_policy_document.override.json}"

  statement {
    actions   = ["ec2:*"]
    resources = ["*"]
  }

  statement {
    sid = "SidToOverwrite"

    actions = ["s3:*"]

    resources = [
      "arn:aws:s3:::somebucket",
      "arn:aws:s3:::somebucket/*",
    ]
  }
}

data.aws_iam_policy_document.source_json_example.json उनका मूल्यांकन करेगा:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": "ec2:*",
      "Resource": "*"
    },
    {
      "Sid": "SidToOverwrite",
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::somebucket/*",
        "arn:aws:s3:::somebucket"
      ]
    }
  ]
}

data.aws_iam_policy_document.override_json_example.json उनका मूल्यांकन करेगा:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": "ec2:*",
      "Resource": "*"
    },
    {
      "Sid": "SidToOverwrite",
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

आप उसी दस्तावेज़ में source_json और override_json को भी जोड़ सकते हैं।