You need to enable JavaScript to run this app.
导航

IAM策略语法

最近更新时间2024.04.24 16:08:30

首次发布时间2022.07.01 09:20:44

本文为您介绍IAM自定义策略的语法结构及其组成元素,帮助您更快了解、快速上手创建所需的自定义策略。

权限策略通用语法

权限策略支持JSON格式,其通用语法句式如下:

{
  "Statement": [
    {
      "Effect": "<Effect>",
      "Action": [
	      "<Action>"
	      ],
      "Resource": [
        "<Resource>"
      ],
      "Condition": {
        "<Condition_operator>": {
          "<Condition_key>": [
            "<Condition_value>"
          ]
        }
      }
    }
  ]
}

策略语法字段说明

权限声明(Statement)

Statement是策略中描述权限基本单元,称为权限声明,每条策略可包含多条权限声明,以数组形式表达。

  • 一条策略至少包含一则权限声明,单则声明用{ }包含,全部声明使用数组符号[ ]包含在Statement元素内,最外层的使用{ }包含,代表一个完整的策略。
  • 不同策略内的不同权限声明以及相同策略内的不同权限声明均有相同优先级的效力。
  • 更多Statement元素的介绍,请参见 权限声明(Statement)

示例:如下是一条包含2则权限声明的策略:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "vpc:TagResources"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:TagResources"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

效果(Effect)

Effect是每则策略声明的必需元素,包含着这条权限声明的作用效果是允许(Allow)还是显式拒绝(Deny)。

  • Deny的优先级高于Allow,当身份对某些操作存在Deny权限时,再次赋予这些操作的Allow权限将无法生效,需要将相应的Deny声明去除或更改为Allow。
  • 更多Effect元素的介绍,请参见效果(Effect)

示例:如下这条策略最终效果仍然是拒绝:

{
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "vpc:TagResources"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "vpc:TagResources"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

操作(Action)

Action是每则策略声明的必需元素,包含着这条权限声明定义的操作范围。

  • 元素基本格式为${ServiceCode}:${Action}
    • ${ServiceCode}为云产品的服务代码,云服务器的ServiceCode为ecs
    • ${Action}通常与云服务API的Action同值,云服务器API信息请参见API列表。可以数组形式表达多个操作,支持*?两种通配符。
      • 通配符*:匹配0个、1个或多个字符。
      • 通配符?:匹配一个字符(不能为0个)。
  • 更多Action元素的介绍,请参见 操作(Action)

示例:如下是一条包含具体云服务Action及使用了通配符的策略。

  • 第一则声明定义了允许云服务器ECS的全部操作权限。
  • 第二则声明定义了允许访问控制(IAM)查询用户列表和查询用户详情两项操作的权限。
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListUsers",
        "iam:GetUser"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

资源 (Resource)

Resource元素内包含着权限声明定义的资源范围,使用“TRN”表达式定义。 TRN(The Resource Name)是火山引擎上资源的全局唯一标识,由服务、地域、账号、资源路径等信息组成。

  • 资源TRN格式:trn:{ServiceCode}:{RegionCode}:{AccountId}:{ResourcePath}

    参数说明是否必填
    trnTRN的固定前缀。
    {ServiceCode}云服务的英文代码,例如云服务器的ServiceCode为ecs

    {RegionCode}

    资源所属的地域。

    • 不填表示全局资源,仅适用于无地域属性的资源,如访问控制IAM。

    • *表示任意地域下的资源,适用于有地域属性的资源,如云服务器ECS创建时必须选择地域。

    • 当前支持的地域信息,可在地域和可用区列表的RegionID中获取。

    {AccountId}资源所属的火山引擎账号ID。

    {ResourcePath}

    资源路径。

    • 云服务器支持的资源路径如下:

      • ECS实例:instance/{instanceid}

      • 密钥对:keypair/{keypairname}

      • 镜像:image/{imageid}

    • 更多云产品的资源路径,请参见云服务资源类型

  • 支持整体以通配符*表达,或在TRN从第2段至后续的每一段中使用通配符。

    • 通配符*:匹配0个、1个或多个字符。
    • 通配符?:匹配一个字符(不能为0个)。
  • 更多Resource元素的介绍,请参见资源(Resource)

示例:以下是一条包含Resource的策略,该策略定义了允许删除实例ID为“i-100”和“i-200”的云服务器实例以及允许查询全部IAM用户的权限。

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:DeleteInstance"
      ],
      "Resource": [
        "trn:ecs:cn-beijing:2000000001:instance/i-100",
        "trn:ecs:cn-beijing:2000000001:instance/i-200",
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:GetUser"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

条件(Condition)

Condition是策略语法中的可选元素,定义了权限声明的生效条件。

  • 元素语法:策略中单条Condition由Operator、Condition Key、Condition Value三个部分组成。
  • 更多Condition元素的介绍,请参见条件(Condition)

示例:如下是一条带有Condition的策略示例。

  • 该策略中Condition的Operator为IpAddress,Condition Key为volc:SourceIp,Condition Value为210.22.XX.XX
  • 该策略表示限制仅能从IP地址210.22.XX.XX中访问应用型负载均衡的全部操作。
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "alb:*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "IpAddress": {
          "volc:SourceIp":"210.22.XX.XX"
        }
      }
    }
  ]
}

附录

IAM支持的云服务器资源类型

云服务器ECS的资源TRN格式如下表所示:

产品产品Service代码资源类型资源类型代码trn格式
云服务器ecs实例instancetrn:ecs:{region}:{account}:instance/{instanceid}
密钥对keypairtrn:ecs:{region}:{account}:keypair/{keypairname}
镜像imagetrn:ecs:{region}:{account}:image/{imageid}