Sid属性在密钥策略中有何用途?

53

这里有一份文档:

Sid – (可选) Sid 是语句标识符,你可以用任意字符串来标识该语句。

这是否意味着 Sid 参数只是说明性的?


4
是的,那确实是它的意思,只是一个描述。 - Mark B
3个回答

53

文档的另一部分中,AWS提供了关于Sid用途的一些附加信息:

Sid(语句ID)是您为策略语句提供的可选标识符。您可以为语句数组中的每个语句分配一个Sid值。对于允许您指定元素的服务(例如SQS和SNS),Sid值只是策略文档ID的子ID。在IAM中,Sid值必须在JSON策略中唯一。

所以,是的,它只是一个描述。


2
你引用的那部分说它是一个“可选标识符”。如果它只是一个描述,为什么它必须是唯一的? - Khoa Vo
2
它似乎不仅仅是一个描述 - 似乎不允许空格或通配符?所以从我收集到的信息来看,它更像是一个标识符,并支持 [a-z, A-Z, 0-9] - Brad Parks
2
并且根据策略,它必须是唯一的,因此您可以在策略中使用多个“sid”标识符来表示语句,但不能在该策略中重复使用相同的“sid”。但是,您可以在不同的策略中重复使用相同的sids。 - Brad Parks
3
文档中的那一部分并没有太大的帮助,它没有说明我们如何使用它,也没有提供任何有用的示例。它绝对不像是一个描述。 - maulik13

11

您可以使用 Sid 来引用长策略中的特定语句

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAll",
            "Effect": "Allow",
            "Action": "*",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "DenyList",
            "Effect": "Deny",
            "Action": "s3:List*",
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

例如,当解释策略时,您可以说AllowAll语句允许所有S3操作,但DenyList拒绝所有列出操作。想象一下,如果这些Sids不存在,您将如何引用它们?
这可能是语义上的吹毛求疵,但我不同意它只是一个“描述”,因为描述不必是唯一的。此外,Sid不支持空格,因此它实际上只是一个ID。
更新:引用AWS文档
一些AWS服务(例如Amazon SQS或Amazon SNS)可能需要此元素,并对其具有唯一性要求。

你所说的“referring”,是指在YAML中的引用,还是仅用于描述目的? - user2770362
1
@user2770362 它可以用于描述和自动化目的。我不确定你所说的“yaml参考”是什么意思,但如果你指的是在编程上下文中,那么是的。我认为循环遍历策略中的所有语句,并挑选出具有特定名称的语句会很有用,例如。 - Khoa Vo
@KhoaVo 这真的应该是被采纳的答案... - Vivek Puurkayastha

7

我认为“仅仅是描述”并不足以描述Sid的意义。

我认为更好的问题是:“如何利用Sid来获得优势?”

以下是一个例子:

  • 如果您需要在一堆数据中查找某个特定策略,您可以使用Sid来处理您的策略。

例如:您有1000个策略,并且想要找到执行“S3DenyPublicReadACL”任务的策略。也许您将该策略存储在S3桶中以便重复使用。

解决方法:编写脚本/lambda,以自动的方式查找并重复使用它。


1
这是一个正确的问题,而文档没有提供任何关于它的使用案例的信息。 - maulik13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接