政策結構 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

政策結構

下列主題說明 IAM 政策的結構。

政策語法

IAM 政策為包含一或多個陳述式的 JSON 文件。每個陳述式的結構如下所示。

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

陳述式由各種元素組成:

  • Effect (效果):效果 可以是 AllowDeny。根據預設, 使用者沒有使用資源和 API 動作的許可,因此所有請求均會遭到拒絕。明確允許覆寫預設值。明確拒絕覆寫任何允許。

  • Action (動作):動作 是您授予或拒絕許可的特定 API 動作。若要了解指定動作,請參閱Amazon EC2 動作

  • Resource (資源):受動作影響的資源。有些 Amazon EC2 API 動作可讓您在政策中包含可由動作建立或修改的特定資源。您可以使用 Amazon Resource Name (ARN) 來指定資源,或是使用萬用字元 (*) 來指定陳述式套用到所有資源。如需詳細資訊,請參閱 Amazon EC2 API 動作支援的資源層級許可

  • Condition (條件):條件為選擇性。您可以使用它們來控制何時政策開始生效。如需指定 Amazon EC2 條件的詳細資訊,請參閱 Amazon EC2 的條件金鑰

如需這些欄位的詳細資訊,請參閱《IAM 使用者指南》中的 IAM JSON 政策元素參考。如需 Amazon EC2 的範例 IAM 政策陳述式,請參閱 使用 AWS CLI 或 AWS SDK 的範例原則

Amazon EC2 動作

在 IAM 政策陳述式中,您可以從任何支援 IAM 的服務指定任何 API 動作。針對 Amazon EC2,請在 API 動作名稱使用下列字首:ec2:。例如:ec2:RunInstancesec2:CreateImage

若要在單一陳述式中指定多個動作,請用逗號分隔,如下所示:

"Action": ["ec2:action1", "ec2:action2"]

您也可以使用萬用字元指定多個動作。例如,您可以指定名稱開頭有「Describe」文字的所有動作,如下所示:

"Action": "ec2:Describe*"
注意

目前,Amazon EC2 Describe* API 動作並不支援資源層級許可。如需 Amazon EC2 資源層級許可的相關詳細資訊,請參閱 適用於 Amazon EC2 的 IAM 政策

若要指定所有的 Amazon EC2 API 動作,請使用 * 萬用字元,如下所示:

"Action": "ec2:*"

若要查看 Amazon EC2 動作的清單,請參閱服務授權參考中的 Amazon EC2 定義的動作

Amazon EC2 API 動作支援的資源層級許可

資源層級許可能夠讓您指定使用者可執行動作的資源。Amazon EC2 支援部分的資源層級許可。這表示針對特定 Amazon EC2 動作,您可以根據應滿足的條件,或允許使用者使用特定的資源,來控制使用者何時可以使用那些動作。例如,您可以授予使用者啟動執行個體的許可,但僅限特定類型,且僅能藉由特定的 AMI 來達成。

若要在 IAM 政策陳述式中指定資源,請使用它的 Amazon Resource Name (ARN)。如需指定 ARN 值的詳細資訊,請參閱 適用於 Amazon EC2 的 Amazon Resource Name (ARN)。如果 API 動作不支援個別 ARN,您必須使用萬用字元 (*) 來指定該動作可以影響所有資源。

若要查看識別哪些 Amazon EC2 API 動作支援資源層級許可的表格,以及您可以在政策中使用的 ARN 和條件金鑰,請參閱 動作、資源與條件金鑰 Amazon EC2

您可以在用於 Amazon EC2 API 動作的 IAM 政策中,套用以標籤為基礎的資源層級許可。這可讓您更有效地控制使用者可以建立、修改或使用的資源。如需詳細資訊,請參閱 在建立期間授予標籤資源的許可

適用於 Amazon EC2 的 Amazon Resource Name (ARN)

每個 IAM 政策陳述式都會套用到您使用其 ARN 指定的資源。

ARN 一般的語法如下所示:

arn:aws:[service]:[region]:[account-id]:resourceType/resourcePath
服務

服務 (例如,ec2)。

region

資源的區域 (例如,us-east-1)。

account-id

AWS 帳號 ID,不含連字號 (例如,123456789012)。

resourceType

資源類型 (例如,instance)。

resourcePath

識別資源的路徑。您可以在路徑中使用 * 萬用字元。

例如,您可以在陳述式中使用特定執行個體 (i-1234567890abcdef0) 的 ARN 來加以指定,如下所示。

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"

您也可以使用 * 萬用字元指定所有屬於特定帳戶的執行個體,如下所示。

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"

您也可以使用 * 萬用字元指定屬於特定帳戶的所有 Amazon EC2 資源,如下所示。

"Resource": "arn:aws:ec2:us-east-1:123456789012:*"

若要指定所有資源,或如果特定的 API 動作不支援 ARN,請在 Resource 元素中使用 * 萬用字元,如下所示。

"Resource": "*"

許多 Amazon EC2 API 動作都涉及多個資源。例如,AttachVolume 會將 Amazon EBS 磁碟區連接至執行個體,所以使用者必須具備該磁碟區與執行個體的使用許可。若要在單一陳述式中指定多項資源,請用逗號分隔其 ARN,如下所示。

"Resource": ["arn1", "arn2"]

如需 Amazon EC2 資源的 ARN 清單,請參閱 由 Amazon EC2 定義的資源類型

Amazon EC2 的條件金鑰

在政策陳述式中,您可以選擇性的指定生效時發揮控制效果的條件。每個條件都包含一或多個索引鍵/值對。條件鍵不區分大小寫。我們已定義 AWS 全域條件金鑰,以及其他服務特定條件金鑰。

如需 Amazon EC2 的服務特定條件金鑰清單,請參閱 Amazon EC2 的條件金鑰。Amazon EC2 也實作了 AWS 全域條件金鑰。如需詳細資訊,請參閱 IAM 使用者指南中的可用於所有請求的資訊

若要在 IAM 政策中使用條件金鑰,請使用 Condition 陳述式。例如,下列政策會授與使用者新增及移除任何安全群組之傳入和傳出規則的許可。它會使用 ec2:Vpc 條件金鑰,來指定這些動作只能在特定 VPC 中的安全群組上執行。

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress"], "Resource": "arn:aws:ec2:region:account:security-group/*", "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-11223344556677889" } } } ] }

若您指定多個條件,或在單一條件中指定多個索引鍵,我們會使用邏輯 AND 操作加以評估。若您針對單一索引鍵使用多個值指定單一條件,我們會使用邏輯 OR 操作評估條件。若要授予許可,必須符合所有的條件。

您也可以在指定條件時使用預留位置。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM 政策元素:變數和標籤

重要

許多條件鍵均為資源專屬,而且部分 API 動作使用多個資源。若您撰寫的政策具備條件鍵,請使用陳述式的 Resource 元素來指定套用該條件鍵的資源。若未這麼做,該政策可能會導致使用者完全無法執行該動作,因為未套用條件金鑰之資源的條件檢查會失敗。若您不希望指定資源,或者若已撰寫政策的 Action 元素來納入多個 API 動作,則您必須使用 ...IfExists 條件類型,以確保未使用該條件金鑰的資源,忽略該條件金鑰。如需詳細資訊,請參閱... IfExists IAM 使用者指南中的條件

所有 Amazon EC2 操作都支援 aws:RequestedRegionec2:Region 條件索引鍵。如需詳細資訊,請參閱 範例:限制特定區域的存取

ec2:SourceInstanceARN 條件金鑰

針對發出請求的執行個體,ec2:SourceInstanceARN 條件金鑰可用於指定其 ARN 的條件。這是 AWS 全域條件金鑰,不是服務特定的。如需政策範例,請參閱 Amazon EC2:將磁碟區與 EC2 執行個體連接或分開範例:允許特定執行個體檢視其他 AWS 服務中的資源ec2:SourceInstanceARN 金鑰無法用來當做變數來填入陳述式內 Resource 元素的 ARN。

如需 Amazon EC2 的範例政策陳述式,請參閱使用 AWS CLI 或 AWS SDK 的範例原則

ec2:Attribute 條件金鑰

ec2:Attribute 條件金鑰可用於按資源屬性篩選存取的條件。條件索引鍵僅支援原始資料類型 (例如字串或整數) 的屬性,或只支援 Value 屬性 (例如「描述」或 ModifyImageAttributeAPI 動作ImdsSupport物件) 的複雜AttributeValue物件。

重要

條件鍵不能用於具有多個屬性的複雜LaunchPermission對象,例如 ModifyImageAttributeAPI 操作的對象。

例如,下列原則會使用ec2:Attribute/Description條件索引鍵,依 ModifyImageAttributeAPI 動作的複雜「描述」物件篩選存取。條件金鑰僅允許將映像描述修改為 ProductionDevelopment 的請求。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute/Description": [ "Production", "Development" ] } } } ] }

下列範例原則會使用ec2:Attribute條件索引鍵,依 ModifyImageAttributeAPI 動作的原始屬性內容篩選存取權。條件金鑰會拒絕嘗試修改映像描述的所有請求。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute": "Description" } } } ] }

ec2:ResourceID 條件索引鍵

使用以下 ec2:ResourceID 條件索引鍵搭配指定的 API 動作時,條件索引鍵值會用於指定由 API 動作建立之產生的資源。ec2:ResourceID 條件索引鍵不能用於指定 API 請求中指定的來源資源。如果使用下列其中一項 ec2:ResourceID 條件索引鍵搭配指定的 API,您必須一律指定萬用字元 (*)。如果指定不同的值,則該條件在執行期期間一律會解析為 *。例如,若要搭配 CopyImageAPI 使用ec2:ImageId條件索引鍵,您必須依照下列方式指定條件索引鍵:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { ec2:ImageID": "*" } } } ] }
條件鍵 API 動作
ec2:DhcpOptionsID
  • CreateDhcpOptions

ec2:ImageID
  • CopyImage

  • CreateImage

  • ImportImage

  • RegisterImage

ec2:InstanceID
  • RunInstances

  • ImportInstance

ec2:InternetGatewayID
  • CreateInternetGateway

ec2:NetworkAclID
  • CreateNetworkAcl

ec2:NetworkInterfaceID
  • CreateNetworkInterface

ec2:PlacementGroupName
  • CreatePlacementGroup

ec2:RouteTableID
  • CreateRouteTable

ec2:SecurityGroupID
  • CreateSecurityGroup

ec2:SnapshotID
  • CopySnapshot

  • CreateSnapshot

  • CreateSnapshots

  • ImportSnapshots

ec2:SubnetID
  • CreateSubnet

ec2:VolumeID
  • CreateVolume

  • ImportVolume

ec2:VpcID
  • CreateVpc

ec2:VpcPeeringConnectionID
  • CreateVpcPeeringConnection

我們建議您避免使用 ec2:ResourceID 條件索引鍵搭配這些 API 動作。相反地,如果需要根據特定資源 ID 篩選存取權,建議您按如下方式使用 Resource 政策元素:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-01234567890abcdef" } ] }

檢查使用者是否擁有必要的許可

建立 IAM 政策之後,我們建議您檢查該政策是否授予使用者許可,允許他們使用所需要的特定 API 動作和資源,再讓政策生效。

首先,建立一個用於測試的使用者,然後將建立的 IAM 政策連接到該測試使用者。接著,以測試使用者的身分提出請求。

若您要測試的 Amazon EC2 動作會建立或修改資源,您應使用 DryRun 參數進行請求 (或使用 --dry-run 選項執行 AWS CLI 命令)。在此案例中,呼叫會完成授權檢查,但不會完成操作。例如,您可以檢查使用者是否可以終止特定執行個體,而無須實際終止它。若測試使用者具有必要的許可,請求會傳回 DryRunOperation。否則,會傳回 UnauthorizedOperation

如果政策未授予使用者預期的許可,或授予過多許可,您可以視需要調整政策並重新測試,直到您取得所要的結果。

重要

政策變更的散佈可能需要幾分鐘時間才能生效。因此,我們建議您等待五分鐘,然後再測試您的政策更新。

如果授權檢查失敗,請求將傳回包含診斷資訊的編碼訊息。您可使用 DecodeAuthorizationMessage 動作將訊息解碼。如需詳細資訊,請參閱 DecodeAuthorizationMessage AWS Security Token ServiceAPI 參考AWS CLI 命令參考decode-authorization-message中的。