【问题标题】:Defining two statements for the action on an IAM role为 IAM 角色的操作定义两个语句
【发布时间】:2020-05-19 08:40:39
【问题描述】:

是否可以在 IAM 角色中针对同一操作使用两条语句? 对于不同的操作,它可以正常工作,但是在为相同的操作创建新语句时它不起作用。

例子:

  IamDeploymentRole:
    Type: "AWS::IAM::Role"
    Properties:
      RoleName: "iam-deployment"
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Principal:
              AWS:
                - !Sub "arn:aws:iam::${ManagementAccountID}:root"
            Action:
              - "sts:AssumeRole"
            Condition:
              IpAddress:
                X
          - Effect: "Allow"
            Principal:
              Service:
                - "some service"
            Action:
              - "sts:AssumeRole"

我正在尝试这样做,但这就像声明中的第二项被忽略了。我不知道这个过滤器究竟是如何工作的。 例如,当一个语句匹配动作但不匹配条件时,它会继续吗?还是一开始就知道不停止?

我尝试了很多文档,但找不到答案。

条件: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html

条件运算符: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_ARN

条件键: https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awscloudformation.html#awscloudformation-aws_ResourceTag___TagKey_

全局条件键: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalarn

策略和权限:https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html

【问题讨论】:

    标签: amazon-web-services amazon-iam


    【解决方案1】:

    您似乎正在定义 AssumeRolePolicyDocument,这是 IAM 角色的信任策略

    我通过创建一个带有信任策略的 IAM 角色来测试这一点,该信任策略同时信任 Amazon EC2 和 AWS Lambda:

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

    然后我将 Amazon S3 权限分配给该角色。

    测试:

    • EC2:我尝试使用此角色启动 Amazon EC2 实例,但该角色未出现在下拉列表中
    • Lambda:我能够成功地将角色附加到 AWS Lambda 函数并访问 Amazon S3。

    然后我交换了信任关系的顺序:

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

    没有影响 — Lambda 运行良好,但 EC2 无法识别该角色。

    然后我从信任关系中删除了 Lambda:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "ec2.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

    这导致角色从 Lambda 控制台中消失,而且奇怪的是,它也没有出现在 EC2 控制台中使用。

    然后我创建了一个相同的角色(只有 EC2 作为可信实体),它运行良好

    底线:当信任策略中有多个服务时,服务似乎会混淆。几乎就好像它“记住”了第一个服务而忽略了其他服务,即使修改了信任策略也是如此。因此,您似乎只能在信任策略中指定一项服务。

    【讨论】:

    • 对于 EC2,您需要一个实例配置文件。 docs.aws.amazon.com/IAM/latest/UserGuide/…
    • 如果您添加角色,Amazon EC2 管理控制台会处理实例配置文件的内容。 (事实上​​,没有办法通过管理控制台直接创建实例配置文件。当 IAM 角色附加到实例时会发生这种情况。)
    【解决方案2】:

    您似乎遇到了缩进问题。数组中的第二项需要缩进。

    【讨论】:

    • 谢谢,但事实并非如此,只是这里的副本和过去都坏了。
    猜你喜欢
    • 2021-03-02
    • 2021-10-20
    • 2022-01-24
    • 2020-07-01
    • 1970-01-01
    • 2019-05-10
    • 2020-06-08
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多