繁体   English   中英

为什么有些 AWS ARN 需要指定账户分段,而有些则不需要?

[英]Why do some AWS ARNs require account segments to be specified and others do not?

我正在授予 lambda 创建标签访问帐户中所有快照、卷和实例的权限。 它仅在我为卷和实例指定帐户 ID 而不是快照时有效。

IAM 政策片段示例

“Resource”: [
                “arn:aws:ec2:*:<account-id>:volume/*“,
                “arn:aws:ec2:*::snapshot/*“,
                “arn:aws:ec2:*:<account-id>:instance/*”
            ]

为什么有的资源需要指定账号,有的资源却指定不了?
:*:::有什么区别?

我试过了

“Resource”: [
                “arn:aws:ec2:*::volume/*“,
                “arn:aws:ec2:*::snapshot/*“,
                “arn:aws:ec2:*::instance/*”
            ]

“Resource”: [
                “arn:aws:ec2:*:<account-id>:volume/*“,
                “arn:aws:ec2:*:<account-id>:snapshot/*“,
                “arn:aws:ec2:*:<account-id>:instance/*”
            ]

但第一个失败了卷,第二个失败了快照。 我希望格式是一致的。

为什么有的资源需要指定账号,有的资源却指定不了?

出于两个有时重叠的原因:

首先,因为在某些情况下需要特异性,而在其他情况下则不需要。 例如 S3 需要全局唯一的存储桶名称,因此帐户是多余的。

否则,出于遗留原因。 同样,S3 是第一个很好的例子……也许第一个 AWS 服务,当时还没有 ARN 的概念。

:*:::有什么区别?

没什么,两者在功能上是相同的,但对于给定的资源类型,通常只接受一个,因为 ARN 要求因资源类型而异。 根据QuickSight 的 ARN 文档,“您可以在任何 ARN 段中使用通配符(* 和?)。” 但是,如果该资源类型需要该段,您可以使用通配符来表示其值,但如果不需要该段,我认为您不能在所有情况下都可以。

要查找资源类型的 ARN 规范,您可以按照服务授权参考select Actions, resources, and condition keys for AWS services ,然后找到您的特定资源类型。 在这种情况下,一个示例是 EC2 快照。

因此,您可以 go 到Amazon EC2并在资源类型下找到snapshot ,它会生成此 ARN 格式字符串。 arn:${Partition}:ec2:${Region}::snapshot/${SnapshotId}

在这种情况下,我会完全省略快照 ARN 的帐户段。

我想这是出于安全目的。 accound_id保留为空白或通配符*表示它适用于任何帐户。 指定 account_id 意味着它仅限于该特定帐户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM