IBM Cloud Docs
IAM 条件属性

IAM 条件属性

动态规则和可信概要文件都使用您指定的条件 IAM 语句,以自动将联合用户添加到访问组或可信概要文件。 当用户使用联合身份登录时,身份提供商( IdP )的数据会根据您设定的条件动态地将他们映射到访问组。 有关更多信息,请参阅 为访问组创建动态规则创建可信概要文件

您还可以分配条件 IAM 访问策略,以指定对帐户中资源的临时访问权,或者允许在特定时间范围内访问资源。 有关更多信息,请参阅 使用基于时间的条件限制访问权,并查看 /v2/policies 访问策略中的条件 部分。

动态规则和可信配置文件详细信息

每个动态规则和可信概要文件信任关系都具有以下属性:

名称
输入可帮助您记住要添加到访问组或可信概要文件的用户类型的定制名称。
身份提供者 (IdP)
仅当正在登录的用户使用具有此颁发者 URI 的企业 IdP 进行认证时,才会评估动态规则或可信概要文件。 您的 IdP URL 显示在控制台中,以便您在创建动态规则或可信配置文件时复制和粘贴。 例如,https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20。 您也可以点击 View identity provider (IdP) data 查看 IdP。 对于 IBMid,IdP 是SAML "entityId" 字段,有时也称为发行者ID,当您使用 IBMid 登录时,它是联合配置的一部分。 对于 App ID,等效的语法是“领域ID”。 有关更多信息,请参阅 从外部身份提供者启用认证
会话持续时间
动态访问组成员资格或可信概要文件会话在此属性中指定的小时数后到期。 例如,如果该属性设置为 24 小时,那么用户的动态或可信概要文件会话在登录后一天 (24 小时) 结束。

规则和配置文件条件语句属性

此外,每个动态规则和可信概要文件信任关系都具有一个或多个由以下属性组成的条件。 用户需要满足总体动态规则或可信概要文件认证的所有条件才能求值为 true:

在以下情况下允许用户:
属于身份提供者数据的属性名称。 要了解有关如何创建从企业身份提供者到条件评估的属性名称的更多信息,请参阅 企业身份提供者属性的映射
运算符
Allow users when 字段中指定的属性与 Values 属性进行比较。 可以选择“等于”、“不等于”、“等于(忽略大小写)”、“不等于(忽略大小写)”、In 或“包含”。 属性语句具有数组类型时,请使用“包含”选项。 您可以使用“在”选项输入多个数值进行匹配。
比较器用于根据 Allow users when 属性名称进行求值的属性值。

您可以将动态规则或可信概要文件条件视为键/值对。 键是您在 Allow users when 字段中添加的内容,值是您在 Values 字段中输入的内容。

规则和配置文件条件的可用运算符

可用的条件运算符
运算符 描述 样本条件
等于 区分大小写的字符串比较。 在比较之前,会将布尔值或数字值转换为字符串。 primaryGroup 等于 "Admins"
不等于 否定区分大小写的字符串比较。 在比较之前,会将布尔值或数字值转换为字符串。 primaryGroup NotEquals "Admins"
忽略大小写等于 不区分大小写的字符串比较。 在比较之前,会将布尔值或数字值转换为字符串。 isManager EqualsIgnoreCase “tRuE”
忽略大小写不等于 否定不区分大小写的字符串比较。 在比较之前,会将布尔值或数字值转换为字符串。 is_teamleadNotEqualsIgnoreCase “TrUe”
包含 如果属性是字符串,数字或布尔值的数组,那么 Contains 使用比较器 Equals 确定所提供的值是否是登录消息中数组的一部分。 如果该属性是单个字符串,那么 Contains 将确定所提供的值是否包含在登录消息中的字符串属性中。 group 包含 "Admins"
此外, 多个等于运算符的短表示法。 将登录消息属性中的值与此规则中的潜在值列表进行比较。 布尔值或数字在比较之前会转换为字符串。 ["Manager","Director" 和 "Team-Lead"] 中的 jobRole

示例

下表包含动态规则或可信概要文件条件的每个字段的值。 在此示例中,在联合 IdP 中标识为经理的用户被映射到 IBM Cloud 访问组或可信配置文件,该访问组或可信配置文件仅对经理设置了特定的访问权限。

示例值
字段
名称 Manager
身份提供者 https://idp.example.org/SAML2
会话持续时间(以小时计) 12
允许用户在(属性名称)时 isManager
运算符 Equals
true

计算资源属性名称

要对可信概要文件中的计算资源建立信任,可以使用 IBM Cloud 控制台,IBM Cloud CLI 或 IAM API。 如果选择 所有服务资源 并添加条件以过滤可应用概要文件的计算资源实例,那么将根据以下资源属性来构建这些条件。

Kubernetes 和 Red Hat OpenShift 属性名称

Kubernetes和Red Hat OpenShift属性名称
IBM Cloud 控制台名称 CLI 和 API 名称 描述
资源组标识 resource_group_id 包含此集群的资源组的标识。 您可以在 IBM Cloud Console 中使用集群的概述页面来标识集群的资源组。
资源组名称 resource_group_name 包含此集群的资源组名称。
服务实例 service_instance 该集群的ID。 您可以在 IBM Cloud Console 中以“集群标识”或使用 IBM Cloud CLI 从集群的概述页面中检索此值。
地区 location 从其云资源名称派生的集群的位置。
名称空间 namespace 用于检索计算资源令牌和获取 IAM 令牌的服务帐户的名称空间。
服务帐户 name 用于检索计算资源令牌和获取 IAM 令牌的服务帐户的名称。
Pod pod 运行要检索 IAM 令牌的代码的 Kubernetes pod 的名称。

VPC 属性名称的虚拟服务器

VPC 属性名称的虚拟服务器
IBM Cloud 控制台名称 CLI 和 API 名称 描述
资源组标识 resource_group_id 包含此集群的资源组的标识。 您可以在 IBM Cloud Console 中使用集群的概述页面来标识集群的资源组。
资源组名称 resource_group_name 包含此集群的资源组名称。
资源标识 resource VPC 的虚拟服务器的标识。
实例组名 instance_group_name 实例组的名称 (如果此虚拟服务器属于一个虚拟服务器)。
区域 region 将此虚拟服务器部署到的区域。
Subnet subnet_id VPC 的虚拟服务器的子网标识 (如果有)。
VPC 标识 vpc_id VPC 的虚拟服务器的 VPC 标识 (如果有)。
区域 zone 部署此虚拟服务器的区域名称。

IBM Cloud CLI 命令示例

以下示例显示如何使用 CLI 中的属性名称来构建可信概要文件链接和条件。

为 Kubernetes 创建可信概要文件条件

要将标识为 Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c 的可信概要文件连接到帐户 444aebb0657c7f0f3aae8e7bdc78709a 和服务帐户名称空间 my-namespace 中的 Kubernetes 集群 c0pigdctkkc07fs7pm06 中的所有服务帐户,请指定以下命令:

ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
              --name NewRule4IKS --type Profile-CR --cr-type IKS_SA \
               --conditions "claim:service_instance,operator:EQUALS,vlaue:c0pigdctkkc07fs7pm06" \
               --conditions "claim:namespace,operator:EQUALS,value:my-namespace"

为 VPC 创建可信概要文件条件

要将标识为 Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c 的可信概要文件连接到帐户 444aebb0657c7f0f3aae8e7bdc78709a 中的一个 VPC r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d 中的所有虚拟服务器,请指定以下命令:

ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
              --name NewRule4VSI --type Profile-CR --cr-type VSI \
               --conditions "claim:vpc_id,operator:EQUALS,value:r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d"

v2 访问策略中的条件

IAM 访问策略的基于时间和资源属性的条件使用 /v2/policies 语法。 使用 /v1/policies 语法的策略不适合添加基于时间的资源属性的条件。 有关更多信息,请参阅 访问策略版本限制

要查看策略的新模式,请参阅 /v2/policies

基于时间的条件

下表列出了可用于为访问策略创建基于时间的条件的操作程序。

可用于基于时间条件的访问策略的操作员。
运算符 描述 示例
dayOfWeekAnyOf 客户机可以使用策略的星期几。
1-星期一
2-星期二
3-星期三
4-星期四
5-星期五
6-星期六
7-星期日
请参阅 示例
timeGreaterThanOrEquals 条件开始授予访问权的时间。 时间由 <time>±<time_zone_offset> 计算。 请参阅 示例
timeLessThanOrEquals 条件终止访问的时间。 时间由 <time>±<time_zone_offset> 计算。 请参阅 示例
dateTimeGreaterThanOrEquals 条件开始授予访问权的日期和时间。 日期由 <datetime>±<time_zone_offset> 计算。 请参阅 示例
dateTimeLessThanOrEquals 条件终止访问的日期和时间。 日期由 <datetime>±<time_zone_offset> 计算。 请参阅 示例

使用 GreaterThanOrEquals 运算符定义条件时,请始终包含使用 LessThanOrEquals 运算符的条件。 这样,就有了明确定义的持续时间,无论是临时的,全天重现的,还是用定制小时重现的。 有关更多信息,请参阅 条件模式

对于日期和时间运算符,策略支持 ISO 8601 格式 hh:mm:ss±hh:mm。 时区偏移量是指全球标准时间。

使用以下变量来表示 key,该指定策略评估所针对的客户机环境属性。 每个 key 都支持一组独立的运算符。

基于时间条件的变量符号。
变量名称 描述 受支持的运算符
environment.attributes.current_time 客户机的当前时间。 timeGreaterThanOrEquals, timeLessThanOrEquals
environment.attributes.current_date_time 客户的当前日期和时间。 dateTimeGreaterThanOrEquals, dateTimeLessThanOrEquals
environment.attributes.day_of_week 客户的当前星期几。 dayOfWeekAnyOf, dayOfWeekEquals

示例:dayOfWeekAnyOf, timeGreaterThanOrEquals,和timeLessThanOrEquals

此示例中指定的星期几映射到星期一,星期二,星期三和星期四。 timeGreaterThanOrEquals 值指示该条件在时区 UTC-5中的 9 AM 开始授予访问权。 timeLessThanOrEquals 值指示条件在时区 UTC-5中的 5 PM 终止访问。environment.attributes.current_timeenvironment.attributes.day_of_week 指示它是 基于重现时间的条件。 始终包含具有 dayOfWeek 条件的 time 条件。

"conditions": [
			{
				"key": "{{environment.attributes.day_of_week}}",
				"operator": "dayOfWeekAnyOf",
				"value": [
					1,
					2,
					3,
					4
				]
			},
			{
				"key": "{{environment.attributes.current_time}}",
				"operator": "timeGreaterThanOrEquals",
				"value": "09:00:00-05:00"
			},
			{
				"key": "{{environment.attributes.current_time}}",
				"operator": "timeLessThanOrEquals",
				"value": "17:00:00-05:00"
			}
		]

示例:dayOfWeekEquals

此示例中的星期几由映射到星期三的 value 字符串中的 3 表示。 在同一字符串中,+6:00 表示时区 UTC+6:00。 只有一个条件,因此它嵌套在 "rule" 下。

"rule": {
		"key": "{{environment.attributes.day_of_week}}",
		"operator": "dayOfWeekEquals",
		"value": "3+06:00"
},

示例:dateTimeGreaterThanOrEquals和dateTimeLessThanOrEquals

在此示例中,dateTimeGreaterThanOrEquals 值指示条件从 2022 年 12 月 26 日 UTC-5 时区的 9 AM 开始授予访问权。 dateTimeLessThanOrEquals 值指示条件在 2022 年 12 月 27 日 UTC-5 时区的 5 PM 终止访问。environment.attributes.current_date_time 指示它是 基于临时时间的条件

"conditions": [
			{
				"key": "{{environment.attributes.current_date_time}}",
				"operator": "dateTimeGreaterThanOrEquals",
				"value": "2022-12-26T09:00:00-05:00"
			},
			{
				"key": "{{environment.attributes.current_date_time}}",
				"operator": "dateTimeLessThanOrEquals",
				"value": "2022-12-27T17:00:00-05:00"
			}
		]

基于资源属性的条件

下表列出了可用于为访问策略创建基于资源属性的条件的操作程序。

可用于为访问策略提供基于属性的资源条件的操作符。
运算符 描述 示例
stringEquals 区分大小写的字符串比较。 在比较之前,会将布尔值或数字值转换为字符串。 请参阅 示例
stringExists 布尔值,其中 true 指示字符串必须存在并且可以为空。false 指示字符串不得存在。 请参阅 示例
stringMatch 通过使用星号 (*) 和问号 (?),或者两者都不使用 (与字面值相同),在模式与目标字符串之间执行区分大小写的字符串匹配。 星号 (*) 表示字符串中零个或多个字符的任何序列,问号 (?) 表示任何单个字符。 您还可以将星号 * 和问号 ? 表示为字面值,方法是将其括在两组大括号 {{}} 中。 请参阅 示例
stringEqualsAnyOf 与字符串数组中的任何字符串匹配的区分大小写的精确字符串。 限制为 10 个值。 请参阅 示例
stringMatchAnyOf 与字符串数组中的任何字符串匹配的区分大小写的字符串。 字符串值可以包含星号 (*) 和问号 (?),或者两者都不包含 (与字面值相同)。 星号 (*) 表示字符串中零个或多个字符的任何序列,问号 (?) 表示任何单个字符。 您还可以将星号 * 和问号 ? 表示为字面值,方法是将其括在两组大括号 {{}} 中。 限制为 10 个值。

key 表示所选服务支持的资源属性。 key 采用 resource.attributes.<attribute-name> 格式。 例如,对于 Cloud Object Storage,受支持的 prefix 属性可以表示为具有 resource.attributes.prefix 表示法的键。 下表列出了示例变量,但并非所有变量都包含在内。

基于资源属性条件的变量符号。
变量名称 描述 受支持的运算符
resource.attributes.prefix 定义此条件应该允许用于列示对象或文件夹的前缀。 stringMatchAnyOf
resource.attributes.path 作用域包括对对象的所有读,写和管理访问权。 stringMatchAnyOf
resource.attributes.delimiter 限制用户可以生成的文件夹结构类型,并帮助用户像文件层次结构一样浏览存储区。 stringEquals

有关更多信息,请参阅 条件模式

示例:stringMatchAnyOf和stringEqualsAnyOf

在此示例中,resource.attributes.path 变量的 stringMatchAnyOf 值指示在对象路径匹配且以 home/David/*special/*restricted/*temporary/test*spatial.?.log 开头时授予访问权 (例如 temporary/test_spatial.1.log)。 or 值指示存在可授予访问权的备用条件。

resource.attributes.delimiter 变量的 stringEqualsAnyOf 值指示在没有边界指示符或 / 存在时授予访问权。 此外,resource.attributes.prefix 变量的 stringEqualsAnyOf 指示 home/home/David/,或者必须不存在任何前缀才能授予访问权。 and 值让我们知道必须同时满足 resource.attributes.delimiterresource.attributes.prefix 才能授予访问权。

"pattern": "attribute-based-condition:resource:literal-and-wildcard",
"rule": {
    "operator": "or",
    "conditions": [
      {
        "key": "{{resource.attributes.path}}",
        "operator": "stringMatchAnyOf",
        "value": [
          "home/David/*",
          "special/*",
          "restricted/*",
          "temporary/test*spatial.?.log"
        ]
      },
      {
        "operator": "and",
        "conditions": [
          {
            "key": "{{resource.attributes.delimiter}}",
            "operator": "stringEqualsAnyOf",
            "value": [
              "",
              "/"
            ]
          },
          {
            "key": "{{resource.attributes.prefix}}",
            "operator": "stringEqualsAnyOf",
            "value": [
              "",
              "home/",
              "home/David/"
            ]
          }
        ]
      }
    ]
  }

例如:"stringExists,""stringEquals,""stringMatch

在此示例中,iam_idaccountIDserviceNameresourceTypestringEquals 指示执行精确字符串匹配。 资源变量的 stringMatch 值中存在的星号指示已授予对以 dev-bucket- 开头的所有资源的访问权。 路径变量的 true stringExists 值和前缀和定界符变量的 false stringExists 值指示只有路径才能授予访问权。

{
    "type": "access",
    "subject": {
        "attributes": [
            {
                "key": "iam_id",
                "operator": "stringEquals",
                "value": "IBMid-1234"
            }
        ]
    },
    "control": {
        "grant": {
            "roles": [
                {
                    "role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolderContent"
                },
                {
                    "role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolder"
                },
                {
                    "role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:AllFolderOperations"
                }
            ]
        }
    },
    "resource": {
        "attributes": [
            {
                "name": "accountId",
                "operator": "stringEquals",
                "value": "account-123"
            },
            {
                "key": "serviceName",
                "operator": "stringEquals",
                "value": "cloud-object-storage"
            },
            {
                "key": "serviceInstance",
                "operator": "stringEquals",
                "value": "cd329d97-c33d-4428-b39e-6170dc1c2a1e"
            },
            {
                "key": "resource",
                "operator": "stringMatch",
                "value": "dev-bucket-*"
            },
            {
                "key": "resourceType",
                "operator": "stringEquals",
                "value": "bucket"
            }
        ]
    },
    "rule": {
        "operator": "and",
        "conditions": [
            {
                "key": "{{resource.attributes.path}}",
                "operator": "stringExists",
                "value": true
            },
            {
                "key": "{{resource.attributes.prefix}}",
                "operator": "stringExists",
                "value": false
            },
            {
                "key": "{{resource.attributes.delimiter}}",
                "operator": "stringExists",
                "value": false
            }
        ]
    }
}