本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon 的基於身份的政策 EC2
預設情況下,使用者沒有使用 Amazon、Amazon EC2 主控台或建立或修改 Amazon EC2 EC2 API 資源或執行任務的權限CLI。若要允許使用者建立或修改資源以及執行工作,您必須建立IAM政策,以授與使用者使用所需特定資源和API動作的權限,然後將這些原則附加至需要這些權限的使用者、群組或IAM角色。
將政策連接到使用者、使用者群組或角色時,政策會允許或拒絕使用者在特定資源上執行特定任務的許可。如需有關IAM策略的更多一般資訊,請參閱《IAM使用指南》IAM中的〈原則和權限〉。如需有關管理和建立自訂IAM原則的詳細資訊,請參閱管理IAM原則。
IAM政策必須授予或拒絕許可才能使用一個或多個 Amazon EC2 動作。政策中還必須指定可用於動作的資源,可為所有資源,或在某些案例中為特定的資源。政策也可以包含您套用到資源的條件。
若要開始使用,您可以檢查 Amazon 的 AWS 受管政策是否EC2符合您的需求。否則,您可以建立自己的自訂原則。如需詳細資訊,請參閱AWS Amazon 的受管政策 EC2。
目錄
政策語法
IAM策略是由一個或多個陳述式組成的JSON文件。每個陳述式的結構如下所示。
{
"Statement":[{
"Effect":"effect
",
"Action":"action
",
"Resource":"arn
",
"Condition":{
"condition
":{
"key
":"value
"
}
}
}
]
}
陳述式由各種元素組成:
-
Effect (效果):效果 可以是
Allow
或Deny
。根據預設,使用者沒有使用資源和API動作的權限,因此拒絕所有要求。明確允許覆寫預設值。明確拒絕覆寫任何允許。 -
動作:動作是您授與或拒絕權限的特定API動作。若要了解指定動作,請參閱Amazon 的行動 EC2。
-
Resource (資源):受動作影響的資源。某些 Amazon EC2 API 動作可讓您在政策中包含可透過動作建立或修改的特定資源。您可以使用 Amazon 資源名稱 (ARN) 或使用萬用字元 (*) 來指定資源,表示該陳述式適用於所有資源。如需詳細資訊,請參閱支援 Amazon 動作的資源層級許可 EC2 API。
-
Condition (條件):條件為選擇性。您可以使用它們來控制何時政策開始生效。如需有關指定 Amazon 條件的詳細資訊EC2,請參閱Amazon 的條件密鑰 EC2。
如需有關策略需求的詳細資訊,請參閱IAM使用者指南中的IAMJSON政策參考資料。如需 Amazon 的IAM政策聲明範例EC2,請參閱控制 Amazon 訪問的示例政策 EC2 API。
Amazon 的行動 EC2
在IAM政策聲明中,您可以從支持的任何服務中指定任何API操作IAM。對於 AmazonEC2,請使用以下前綴和API動作名稱:ec2:
。例如:ec2:RunInstances
和 ec2:CreateImage
。
若要在單一陳述式中指定多個動作,請用逗號分隔,如下所示:
"Action": ["ec2:action1", "ec2:action2"]
您也可以使用萬用字元指定多個動作。例如,您可以指定名稱開頭有「Describe」文字的所有動作,如下所示:
"Action": "ec2:Describe*"
注意
目前,Amazon EC2 說明 * API 動作不支援資源層級許可。如需 Amazon 資源層級許可的詳細資訊EC2,請參閱。Amazon 的基於身份的政策 EC2
若要指定所有 Amazon EC2 API 動作,請使用 * 萬用字元,如下所示:
"Action": "ec2:*"
如需 Amazon EC2 動作的清單,請參閱服務授權參考EC2中 Amazon 定義的動作。
支援 Amazon 動作的資源層級許可 EC2 API
資源層級許可能夠讓您指定使用者可執行動作的資源。Amazon EC2 對資源級許可提供部分支持。這表示對於某些 Amazon EC2 動作,您可以根據必須滿足的條件或允許使用者使用的特定資源,控制何時允許使用者使用這些動作。例如,您可以授與使用者啟動執行個體的權限,但只能授與特定類型的執行個體,而且只能使用特定的執行個體AMI。
若要在IAM政策陳述式中指定資源,請使用其 Amazon 資源名稱 (ARN)。若要取得有關指定ARN值的更多資訊,請參閱〈〉Amazon 資源名稱(ARNs)Amazon EC2。如果某個API動作不支援個別ARNs,您必須使用萬用字元 (*) 來指定所有資源都可以受到該動作的影響。
若要查看識別哪些 Amazon EC2 API 動作支援資源層級許可的表格,以ARNs及可在政策中使用的和條件金鑰,請參閱 Amazon 的動作、資源和條件金鑰。EC2
請記住,您可以在用於 Amazon 動作的IAM政策中套用以標籤為基礎的資源層級許可。EC2 API這可讓您更有效地控制使用者可以建立、修改或使用的資源。如需詳細資訊,請參閱准許在建立期間標記 Amazon EC2 資源。
Amazon 資源名稱(ARNs)Amazon EC2
每個IAM策略聲明都適用於您使用它們指定的資源ARNs。
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動作不支援ARNs,請在元素中使用 * 萬用字Resource
元,如下所示。
"Resource": "*"
許多 Amazon EC2 API 操作涉及多種資源。例如,AttachVolume
將 Amazon EBS 磁碟區附加到執行個體,因此使用者必須擁有使用磁碟區和執行個體的許可。若要在單一陳述式中指定多個資源,請以逗號ARNs分隔它們,如下所示。
"Resource": ["arn1
", "arn2
"]
如需 Amazon EC2 資源ARNs的清單,請參閱 Amazon 定義的資源類型EC2。
Amazon 的條件密鑰 EC2
在政策陳述式中,您可以選擇性的指定生效時發揮控制效果的條件。每個條件都包含一或多個索引鍵/值對。條件鍵不區分大小寫。我們已定義 AWS 全域條件金鑰,以及其他服務特定條件金鑰。
如需 Amazon 服務特定條件金鑰的清單EC2,請參閱 Amazon 的條件金鑰。EC2Amazon EC2 還實現了 AWS 全局條件密鑰。如需詳細資訊,請參閱《IAM使用指南》中所有請求中的可用資訊。
所有 Amazon EC2 操作都支持aws:RequestedRegion
和ec2:Region
條件密鑰。如需詳細資訊,請參閱範例:限制特定區域的存取。
若要在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使用者指南》中的條件。
ec2:Attribute 條件金鑰
ec2:Attribute
條件金鑰可用於按資源屬性篩選存取的條件。
此條AttributeValue件索引鍵僅支援原始資料類型的屬性 (例如字串或整數),或僅包含 Value 屬性 (例如ModifyImageAttributeAPI動作的「描述」或「ImdsSupport物件」) 的複雜物件。條件索引鍵不能用於包含多個屬性的複雜物件,例如的LaunchPermission物件ModifyImageAttribute。
例如,下列原則會使用ec2:Attribute/Description
條件索引鍵,依動作的複雜「描述」物件篩選存ModifyImageAttributeAPI取。條件金鑰僅允許將映像描述修改為 Production
或 Development
的請求。
{ "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:
條件索引鍵與指定的動API作搭配使用時,會使用條件索引鍵值來指定API動作所建立的產生資源。 Resource
IDec2:
條件鍵不能用於指定API請求中指定的源資源。如果您使用下列其中一個Resource
IDec2:
條件索引鍵搭配指定API,則必須一律指定萬用字元 (Resource
ID*
)。如果指定不同的值,則該條件在執行期期間一律會解析為 *
。例如,若要搭配使用ec2:ImageId
條件索引鍵 CopyImageAPI,您必須指定條件索引鍵,如下所示:
{ "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
若要根據特定資源篩選存取IDs,建議您使用Resource
原則元素,如下所示。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-01234567890abcdef" } ] }
ec2:SourceInstanceARN 條件金鑰
用ec2:SourceInstanceARN
於指定ARN發出要求的執行個體。這是一個AWS 全局條件密鑰,這意味著您可以將其與 Amazon 以外的服務一起使用EC2。如需政策範例,請參閱「範例:允許特定執行個體檢視其他 AWS 服務中的資源」。
使用以屬性為基礎的存取控制存取
當您建立授與使用者使用EC2資源之權限的IAM策略時,您可以在原則的Condition
元素中包含標籤資訊,以根據標籤控制存取。這就是所謂的基於屬性的訪問控制()ABAC。ABAC可以更好地控制使用者可以修改、使用或刪除哪些資源。如需詳細資訊,請參閱有什麼ABAC用途 AWS?
例如:您可以建立一個政策,允許使用者終止執行個體,但如果執行個體具有標籤 environment=production
,則拒絕該動作。若要這樣做,您可以使用 aws:ResourceTag
條件金鑰,根據連接至資源的標籤允許或拒絕存取資源。
"StringEquals": { "aws:ResourceTag/environment": "production" }
若要了解 Amazon EC2 API 動作是否支援使用aws:ResourceTag
條件金鑰控制存取,請參閱 Amazon 的動作、資源和條件金鑰EC2。由於 Describe
動作不支援資源層級許可,您必須在不同的陳述式中指定它們,無需條件。
如需IAM原則範例,請參閱控制 Amazon 訪問的示例政策 EC2 API。
如果您允許或拒絕使用者根據標籤存取資源,請務必考慮明確拒絕使用者將這些標籤新增至相同資源或從中移除的能力。否則,使用者可能透過修改標籤來避開您的限制,並取得資源的存取。
向使用者、群組和角色授予許可
若要提供存取權,請新增權限至您的使用者、群組或角色:
-
使用者和群組位於 AWS IAM Identity Center:
建立權限合集。請按照 AWS IAM Identity Center 使用者指南 中的 建立權限合集 說明進行操作。
-
IAM透過身分識別提供者管理的使用者:
建立聯合身分的角色。請遵循《使用指南》中的〈為第三方身分識別提供IAM者 (同盟) 建立角色〉中的指示進行。
-
IAM使用者:
-
建立您的使用者可擔任的角色。請按照《用戶指南》中的「為IAM用戶創建角色」中的IAM說明進行操作。
-
(不建議) 將政策直接附加至使用者,或將使用者新增至使用者群組。遵循《使用者指南》中的「向使用者 (主控台) 新增權限」IAM 中的指示進行。
-
檢查使用者是否擁有必要的許可
建立IAM原則之後,建議您先檢查原則是否授與使用者使用所需特定API動作和資源的權限,然後再將原則投入生產環境。
首先,建立用於測試目的的的使用者,然後將您建立的IAM策略附加到測試使用者。接著,以測試使用者的身分提出請求。
如果您正在測試的 Amazon EC2 動作建立或修改資源,則應使用DryRun
參數提出請求 (或使用--dry-run
選項執行 AWS CLI 命令)。在此案例中,呼叫會完成授權檢查,但不會完成操作。例如,您可以檢查使用者是否可以終止特定執行個體,而無須實際終止它。若測試使用者具有必要的許可,請求會傳回 DryRunOperation
。否則,會傳回 UnauthorizedOperation
。
如果政策未授予使用者預期的許可,或授予過多許可,您可以視需要調整政策並重新測試,直到您取得所要的結果。
重要
政策變更的散佈可能需要幾分鐘時間才能生效。因此,我們建議您等待五分鐘,然後再測試您的政策更新。
如果授權檢查失敗,請求將傳回包含診斷資訊的編碼訊息。您可使用 DecodeAuthorizationMessage
動作將訊息解碼。若要取得更多資訊,請參閱〈DecodeAuthorizationMessage AWS Security Token ServiceAPI參考〉和〈AWS CLI 指令參考〉decode-authorization-message中的〈〉。