您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何解析ECS TAG功能,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Tag(標簽),阿里云提供的一種標記資源的方式,對資源添加標簽可以方便地對資源進行標記,從而方便的進行資源的批量管理,現在ECS可以使用Tag標記的資源主要有以下幾種:實例、磁盤、鏡像、快照、安全組。
每個Tag是由兩個部分組成,Key和Value。Tag是很開放的配置,Tag的Key和Value可以取值幾乎任意字符串。因此,Tag是一個可以方便對資源進行標記、分類的工具。
為了更合理使用,Tag在功能上有幾個限制。
首先,一個資源上面已有的Tag不能超過10個,標簽太多會導致標簽本身難以管理
一個資源上Tag key不能相同,如果添加一個已有key的Tag,會使用新的Tag覆蓋老的Tag
相同Tag相同類型的資源數量不建議超過500,相同Tag的資源數量太大,會弱化Tag的資源分類功能
對于一般的資源管理需求,都是針對一個用戶下數量較多的情況,當實例等數量較多時,對實例進行運維管理等操作就會變得比較困難,有時候甚至需要采取拆分賬號的方式管理不同部門或者不同用途的資源。如果采用Tag進行資源的分類管理,會大大簡化這個問題。
首先,我們可以針對實例的使用場景進行分類,在一般的開發場景中,機器一般有多個分類:開發測試環境、打包環境、生產環境等。這些機器的運維管理是絕對隔絕的,因此要在Tag上對其進行區分,在開發測試機器上,可以增加標簽(增加方式詳見下一節)key為env、value為test;在生產機器上,可以增加標簽key為env、value為product。形成如下圖的機器分類。
之后再考慮按照使用人員進行的資源分類。對于資源保有多的,一個人進行資源的全部管理也是很困難的,所以需要進行基于人員的資源劃分,我們可以在資源上,增加表示部門的標簽,代表這些資源隸屬于不同的部門。在增加了部門分類之后,機器分類如圖:
接下來,詳細描述下上述操作的具體步驟。
從API操作資源可以更清晰看到資源的變化過程,因此推薦使用API進行資源操作,相關文檔在這里:https://help.aliyun.com/product/52507.html
對于接下來的操作,只需要安裝python SDK,需要安裝的包如下(ECS外的操作如RAM等通過控制臺操作)
aliyun-python-sdk-core aliyun-python-sdk-ecs
添加標簽,需要的參數主要是資源id、資源類型、標簽,注意region不要填錯。下面是為資源添加標簽的代碼示例,一次調用最多可添加5個標簽。
# common codes, 下次不再添加 # coding=utf-8 import logging from aliyunsdkcore import client from aliyunsdkcore.acs_exception.exceptions import ServerException, ClientException from aliyunsdkecs.request.v20140526.AddTagsRequest import AddTagsRequest clint = client.AcsClient('AK', 'SK', 'cn-qingdao') # region 按實際填寫 logging.basicConfig(level=logging.INFO, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S') def _get_response(request): try: ret = clint.do_action_with_exception(request) logging.info(ret) except ServerException, e: logging.error(e) except ClientException, e: logging.error(e) # common codes end def add_tag(resource_id, resource_type, tag1, tag2): request = AddTagsRequest() request.set_ResourceId(resource_id) request.set_ResourceType(resource_type) request.set_Tag1Key(tag1.get('key')) request.set_Tag1Value(tag1.get('value')) request.set_Tag2Key(tag2.get('key')) request.set_Tag2Value(tag2.get('value')) _get_response(request) if __name__ == '__main__': add_tag('i-xxxxx', 'instance', {'key':'env', 'value':'test'}, {'key':'depart', 'value':'dep1'})
以上示例可以給instance(實例)i-xxxxx添加兩個標簽,兩個標簽分別為 env:test 和 depart:dep1 。如果添加Tag時value填寫錯誤,可以改正value之后再調用一次AddTags來“覆蓋”一次同key的標簽。
查詢標簽,可以根據資源查詢資源上的標簽,也可以不填寫資源,查詢用戶名下所有標簽。下面是查詢一個資源下標簽的代碼示例
from aliyunsdkecs.request.v20140526.DescribeTagsRequest import DescribeTagsRequest def describe_tag(resource_id, resource_type): request = DescribeTagsRequest() request.set_ResourceId(resource_id) request.set_ResourceType(resource_type) _get_response(request) if __name__ == '__main__': describe_tag('i-xxxxx', 'instance')
刪除標簽,刪除指定資源的標簽,本接口現在必須指定資源,可以不指定Tag value,表示刪除所有Tag key為某個值的資源上的標簽。
from aliyunsdkecs.request.v20140526.RemoveTagsRequest import RemoveTagsRequest def remove_tag(resource_id, resource_type, tag): request = RemoveTagsRequest() request.set_ResourceId(resource_id) request.set_ResourceType(resource_type) request.set_Tag1Key(tag.get('key')) request.set_Tag1Value(tag.get('value')) _get_response(request) if __name__ == '__main__': remove_tag('i-xxxx', 'instance', {'key':'env', 'value':'test'})
上述的操作都是針對于已有資源的Tag添加,為了保證標簽流程的閉環,在創建資源的時候也是支持標簽添加的,在資源的創建接口都是支持直接帶Tag的創建,例如創建實例接口:
from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequest def remove_tag(resource_id, resource_type, tag): request = RunInstancesRequest() ... request.set_Tags({'Key':'env', 'Value':'test'}) _get_response(request)
這樣創建出來的實例將會天然帶有env:test標簽。
在控制臺添加標簽,可以直接在實例列表的"更多"選項中選擇編輯標簽,在彈出框中新建標簽即可。
標簽在實例列表中或者實例詳情頁中就可以看到。
與添加標簽一樣,刪除標簽也在編輯標簽的彈出窗口中操作,選擇已有的標簽刪除掉即可。
在第四步的分組配置中,可以添加此次創建資源的標簽
我們涉及到的權限控制都指的是在子賬號情況下對子賬號的訪問進行控制,首先需要在RAM控制臺創建子賬號(用戶),然后給子用戶授予權限,這個子用戶將只有操作、查詢授權規則相關的權限。
對于標簽權限,授權語法如下:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "ecs:tag/depart": "dep1" } } } ] }
授權了如上權限的子用戶,就只能操作帶有depart:dep1標簽的資源,注意,在查詢時,這個授權不能作為過濾條件,在這個子賬號查詢實例的時候,必須帶有Tag.1.Key=depart Tag.1.Value=dep1的過濾條件才允許查詢。
對于使用Tag授權的資源,對不同類型的API有不同的限制表現,具體的限制如下:
對于操作類接口(如StartInstance),是針對某一個資源的操作,子賬號是否有權限完全依賴這個實例是否帶有指定的標簽。
如果實例上帶有授權語句中所有規定的標簽,則允許子賬號操作。
對于查詢類操作,由于所有的鑒權行為都是前置行為(即判斷結果只區分是否通過,而不會判斷一個集合中有哪些通過),所以不會對結果集合進行“有權限過濾”。使用了標簽鑒權的子賬號,必須在查詢中帶有指定有權限的標簽進行查詢,才能查到有權限的實例。
對于創建類接口,鑒權時會判斷接口中使用的所有資源是不是有權限,同時,也會判斷創建出來的資源是否有權限。因此,對于帶有標簽授權的子賬號,創建實例的時候,創建調用也必須帶有相關Tag,否則子用戶沒有權限創建。
上述就是小編為大家分享的如何解析ECS TAG功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。