簡體   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