X.509 证书 Amazon IoT Core 策略变量 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

X.509 证书 Amazon IoT Core 策略变量

X.509 证书策略变量允许您根据 X.509 证书属性编写授予权限的 Amazon IoT Core 策略。以下部分介绍如何使用这些证书策略变量。

CertificateId

RegisterCertificate API 中,certificateId 将显示在响应正文中。要获取有关您的证书的信息,可以使用 DescribeCertificate 中的 certificateId

颁发者属性

以下 Amazon IoT Core 策略变量允许您根据由证书颁发者设置的证书属性来授予或拒绝权限。

  • iot:Certificate.Issuer.DistinguishedNameQualifier

  • iot:Certificate.Issuer.Country

  • iot:Certificate.Issuer.Organization

  • iot:Certificate.Issuer.OrganizationalUnit

  • iot:Certificate.Issuer.State

  • iot:Certificate.Issuer.CommonName

  • iot:Certificate.Issuer.SerialNumber

  • iot:Certificate.Issuer.Title

  • iot:Certificate.Issuer.Surname

  • iot:Certificate.Issuer.GivenName

  • iot:Certificate.Issuer.Initials

  • iot:Certificate.Issuer.Pseudonym

  • iot:Certificate.Issuer.GenerationQualifier

使用者属性

以下 Amazon IoT Core 策略变量允许您根据由证书颁发者设置的证书使用者属性来授予或拒绝权限。

  • iot:Certificate.Subject.DistinguishedNameQualifier

  • iot:Certificate.Subject.Country

  • iot:Certificate.Subject.Organization

  • iot:Certificate.Subject.OrganizationalUnit

  • iot:Certificate.Subject.State

  • iot:Certificate.Subject.CommonName

  • iot:Certificate.Subject.SerialNumber

  • iot:Certificate.Subject.Title

  • iot:Certificate.Subject.Surname

  • iot:Certificate.Subject.GivenName

  • iot:Certificate.Subject.Initials

  • iot:Certificate.Subject.Pseudonym

  • iot:Certificate.Subject.GenerationQualifier

X.509 证书允许这些属性包含一个或多个值。预设情况下,每个多值属性的策略变量会返回第一个值。例如,Certificate.Subject.Country 属性可能包含国家/地区名称列表,但在策略中进行评估时,iot:Certificate.Subject.Country 会替换为第一个国家/地区名称。您可以使用从 1 开始的索引请求第一个值以外的特定属性值。例如,iot:Certificate.Subject.Country.1Certificate.Subject.Country 属性中第二个国家/地区名称替换。如果您指定不存在的索引值(例如,如果您在只有两个值分配到属性时请求第三个值),则不会执行替换功能,并且授权将失败。您可以在策略变量名称中使用 .List 后缀指定属性的所有值。

Registered devices (2)

对于在 Amazon IoT Core 注册表中注册为事物的设备,以下策略允许在 Amazon IoT Core 注册表中注册了事物名称的客户端进行连接,但仅限将证书的 Certificate.Subject.Organization 属性设置为 "Example Corp""AnyCompany" 的客户端有权发布到事物名称特定的主题。通过使用 "Condition" 字段来完成此限制,该字段指定要允许前面的操作而必须满足的条件。在此情况下,条件是与证书关联的 Certificate.Subject.Organization 属性必须包括列出的值之一:

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:Connect" ], "Resource":[ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}" ] }, { "Effect":"Allow", "Action":[ "iot:Publish" ], "Resource":[ "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:Connection.Thing.ThingName}" ], "Condition":{ "ForAllValues:StringEquals":{ "iot:Certificate.Subject.Organization.List":[ "Example Corp", "AnyCompany" ] } } } ] }
Unregistered devices (2)

对于未在 Amazon IoT Core 注册表中注册为事物的设备,以下策略授予权限以使用客户端 ID Amazon IoT Core 、client1client2 连接到 client3,但仅限将证书的 Certificate.Subject.Organization 属性设置为 "Example Corp""AnyCompany" 的客户端有权发布到客户端 ID 特定的主题。通过使用 "Condition" 字段来完成此限制,该字段指定要允许前面的操作而必须满足的条件。在此情况下,条件是与证书关联的 Certificate.Subject.Organization 属性必须包括列出的值之一:

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:Connect" ], "Resource":[ "arn:aws:iot:us-east-1:123456789012:client/client1", "arn:aws:iot:us-east-1:123456789012:client/client2", "arn:aws:iot:us-east-1:123456789012:client/client3" ] }, { "Effect":"Allow", "Action":[ "iot:Publish" ], "Resource":[ "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}" ], "Condition":{ "ForAllValues:StringEquals":{ "iot:Certificate.Subject.Organization.List":[ "Example Corp", "AnyCompany" ] } } } ] }

颁发者备用名称属性

以下 Amazon IoT Core 策略变量允许您根据由证书颁发者设置的颁发者备用名称属性来授予或拒绝权限。

  • iot:Certificate.Issuer.AlternativeName.RFC822Name

  • iot:Certificate.Issuer.AlternativeName.DNSName

  • iot:Certificate.Issuer.AlternativeName.DirectoryName

  • iot:Certificate.Issuer.AlternativeName.UniformResourceIdentifier

  • iot:Certificate.Issuer.AlternativeName.IPAddress

使用者备用名称属性

以下 Amazon IoT Core 策略变量允许您根据由证书颁发者设置的使用者备用名称属性来授予或拒绝权限。

  • iot:Certificate.Subject.AlternativeName.RFC822Name

  • iot:Certificate.Subject.AlternativeName.DNSName

  • iot:Certificate.Subject.AlternativeName.DirectoryName

  • iot:Certificate.Subject.AlternativeName.UniformResourceIdentifier

  • iot:Certificate.Subject.AlternativeName.IPAddress

其他属性

您可以使用 iot:Certificate.SerialNumber 来根据证书的序列号允许或拒绝访问 Amazon IoT Core 资源。iot:Certificate.AvailableKeys 策略变量包含具有值的所有证书策略变量的名称。

X.509 证书策略变量限制

以下限制适用于 X.509 证书策略变量:

通配符

如果证书属性中有通配符,则策略变量不会由证书属性值替换,并在策略文档中保留 ${policy-variable} 文本。这可能会导致授权失败。可以使用以下通配符:*$+?#

数组字段

包含数组的证书属性限制为五项。其他的项将被忽略。

字符串长度

所有字符串值的长度限制为 1024 个字符。如果证书属性包含超过 1024 个字符的字符串,则策略变量不会由证书属性值替换,并在策略文档中保留 ${policy-variable}。这可能会导致授权失败。

特殊字符

在策略变量中使用时,任何特殊字符(例如 ,"\+=<>;)都必须使用反斜杠 (\) 作为前缀。例如,Amazon Web Services O=Amazon.com Inc. L=Seattle ST=Washington C=US 改为 Amazon Web Service O=\Amazon.com Inc. L\=Seattle ST\=Washington C\=US