【问题标题】:Attach policy to a IAM Role将策略附加到 IAM 角色
【发布时间】:2017-05-17 01:06:49
【问题描述】:

按照 cloudformation 模板在第 9 行出现错误:

{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "Policy to allow send receive message from SQS Queue",
"Resources" : {
"MyPolicy" : {
  "Type" : "AWS::IAM::Policy",
    "Properties" : {
        "PolicyName" : "CFUsers",
        "Roles": [ { "arn:aws:iam::710161973367:role/Cognito_CFIAuth_Role" } ],
        "PolicyDocument" : {
            "Version" : "2012-10-17",
            "Statement": [
            {
                "Sid": "Sid1482400105445",
                "Effect": "Allow",
                "Principal": {
                    "AWS":         "arn:aws:iam::710161973367:role/Cognito_CFIAuth_Role"
                },
                "Action": [
                    "SQS:SendMessage",
                    "SQS:ReceiveMessage",
                    "SQS:DeleteMessage",
                    "SQS:GetQueueUrl"
                ],
                "Resource": "arn:aws:sqs:ap-south-1:710161973367:CFI-Trace"
            }
            ]
        }
    }
 }
 }

我希望角色 Cognito_CFIAuth_Role 在 SQS 队列 CFI-Trace 上拥有消息发送/读取/删除权限。如何将 SQS 操作权限附加到 IAM 角色?

【问题讨论】:

  • 严格从语法角度来看,[ { "arn:aws:iam::710161973367:role/Cognito_CFIAuth_Role" } ], 确实是错误的,因为它是一个包含有键但没有值的对象的数组。 {} 不正确。

标签: amazon-web-services amazon-sqs amazon-cloudformation amazon-iam


【解决方案1】:

首先,第 9 行包含 JSON 语法错误,应删除 Role 字符串周围的括号 {}

        "Roles": [ "arn:aws:iam::710161973367:role/Cognito_CFIAuth_Role" ],

其次,AWS::IAM::PolicyRoles 属性接受“AWS::IAM::Roles 的名称附加到此策略”,而不是完整的 ARN,因此您的行应该是:

        "Roles": [ "Cognito_CFIAuth_Role" ],

您还需要在示例末尾缺少右括号 }

【讨论】:

    【解决方案2】:

    使用AWS::IAM::Policy 资源,您正在创建一个内联 策略。 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html 解释说,这需要一个列表“AWS::IAM::Roles 的名称,我认为这是在同一堆栈中定义的角色资源的逻辑名称。

    如果要将策略附加到预先存在的角色,则应改用 ManagedPolicy 类型。 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-roles 采用预先存在的角色的名称。

    【讨论】:

    • 此外,它必须是有效的 JSON。请参阅@michael 对您的问题的评论。
    【解决方案3】:

    Cloudformation 类型 IAM::Policy 用于用户和组。角色和实例配置文件适用于 ec2。你把这两个想法混为一谈了。如果您在不同的 CFN 中预定义了角色,那么您只需为您的 EC2 实例使用一个实例配置文件,如果没有,您也可以创建它然后引用它

    "RootInstanceProfile": {
         "Type": "AWS::IAM::InstanceProfile",
         "Properties": {
            "Path": "/",
            "Roles": [ {
               "arn:aws:iam::710161973367:role/Cognito_CFIAuth_Role"
            } ]
         }
      }
    

    {
      "AWSTemplateFormatVersion": "2010-09-09",
      "Resources": {
      "SQSRole": {
          "Type": "AWS::IAM::Role",
          "Properties": {
            "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": [
                    "ec2.amazonaws.com"
                  ]
                },
                "Action": [
                  "sts:AssumeRole"
              ]
            }
          ]
        },
        "Path": "/",
        "Policies": [
          {
            "PolicyName": "root",
            "PolicyDocument": {
              "Version": "2012-10-17",
              "Statement": [
                {
                  "Effect": "Allow",
                  "Action": [
                    "SQS:SendMessage",
                    "SQS:ReceiveMessage",
                    "SQS:DeleteMessage",
                    "SQS:GetQueueUrl"
                  ],
                  "Resource": "arn:aws:sqs:ap-south-1:710161973367:CFI-Trace"
                }
              ]
            }
          }
        ]
      }
    },
        "RootInstanceProfile": {
          "Type": "AWS::IAM::InstanceProfile",
          "Properties": {
            "Path": "/",
            "Roles": [
              {
                "Ref": "SQSRole"
              }
            ]
          }
        }
      }
    }
    

    IAM 政策

    http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html

    IAM 角色 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html

    现在还有 SQS Policy http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html

    【讨论】:

      【解决方案4】:

      您还可以将 ManagedPolicyArns 附加到 CloudFormation 资源类型 AWS::IAM::Role https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-managepolicyarns

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-01
        • 2018-01-11
        • 1970-01-01
        • 2020-10-31
        • 1970-01-01
        • 1970-01-01
        • 2021-08-25
        相关资源
        最近更新 更多