在Lambda基于资源的策略文档中,它提到最好包括source-account
,例如,您指定了一个source-arn
,它引用了一个在arn
中没有帐户id的s3存储桶,因此,如果您运气不好,有人删除了您的存储桶,另一个帐户创建了一个同名的bucket,他们可以间接访问您的Lambda函数。
但你也有Principal
的符号,就像他们的一个例子:
"Principal":{"AWS":"arn:aws:iam::210987654321:root"}
Principal
&source-account
。当您想将权限细化到帐户中的特定角色或用户时,是否使用Principal
?如果你的情况不是这样,并且你只想从整个帐户授予对Lambda
的访问权限,你会使用source-account
吗?
使用aws:SourceAccount的一个原因是缓解了困惑的副手问题。
具体来说,在S3的上下文中,使用它是为了使S3不被认为是混淆的副手。
主体是有权触发资源的主体,例如,在本例中,主体实际上是S3服务。这是因为S3没有配置为承担IAM角色,服务实际上是Lambda函数的调用方。
然后,下面的条件将权限限定为仅允许S3服务在来自源帐户/存储桶时调用。如果没有这一点,它将成为AmazonS3的一个开放范围。
您正确地认为,主体可以用于引用IAM用户/角色,在您的示例中,还可以用于引用整个AWS帐户(假设调用者实际上是IAM用户/职位(。如果调用者是IAM实体而不是另一个AWS服务,则可以使用此方法。