這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何解析ECS TAG功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)、渝北網(wǎng)絡(luò)推廣、小程序定制開發(fā)、渝北網(wǎng)絡(luò)營銷、渝北企業(yè)策劃、渝北品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供渝北建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
Tag(標(biāo)簽),阿里云提供的一種標(biāo)記資源的方式,對資源添加標(biāo)簽可以方便地對資源進行標(biāo)記,從而方便的進行資源的批量管理,現(xiàn)在ECS可以使用Tag標(biāo)記的資源主要有以下幾種:實例、磁盤、鏡像、快照、安全組。
每個Tag是由兩個部分組成,Key和Value。Tag是很開放的配置,Tag的Key和Value可以取值幾乎任意字符串。因此,Tag是一個可以方便對資源進行標(biāo)記、分類的工具。
為了更合理使用,Tag在功能上有幾個限制。
首先,一個資源上面已有的Tag不能超過10個,標(biāo)簽太多會導(dǎo)致標(biāo)簽本身難以管理
一個資源上Tag key不能相同,如果添加一個已有key的Tag,會使用新的Tag覆蓋老的Tag
相同Tag相同類型的資源數(shù)量不建議超過500,相同Tag的資源數(shù)量太大,會弱化Tag的資源分類功能
對于一般的資源管理需求,都是針對一個用戶下數(shù)量較多的情況,當(dāng)實例等數(shù)量較多時,對實例進行運維管理等操作就會變得比較困難,有時候甚至需要采取拆分賬號的方式管理不同部門或者不同用途的資源。如果采用Tag進行資源的分類管理,會大大簡化這個問題。
首先,我們可以針對實例的使用場景進行分類,在一般的開發(fā)場景中,機器一般有多個分類:開發(fā)測試環(huán)境、打包環(huán)境、生產(chǎn)環(huán)境等。這些機器的運維管理是絕對隔絕的,因此要在Tag上對其進行區(qū)分,在開發(fā)測試機器上,可以增加標(biāo)簽(增加方式詳見下一節(jié))key為env、value為test;在生產(chǎn)機器上,可以增加標(biāo)簽key為env、value為product。形成如下圖的機器分類。
之后再考慮按照使用人員進行的資源分類。對于資源保有多的,一個人進行資源的全部管理也是很困難的,所以需要進行基于人員的資源劃分,我們可以在資源上,增加表示部門的標(biāo)簽,代表這些資源隸屬于不同的部門。在增加了部門分類之后,機器分類如圖:
接下來,詳細描述下上述操作的具體步驟。
從API操作資源可以更清晰看到資源的變化過程,因此推薦使用API進行資源操作,相關(guān)文檔在這里:https://help.aliyun.com/product/52507.html
對于接下來的操作,只需要安裝python SDK,需要安裝的包如下(ECS外的操作如RAM等通過控制臺操作)
aliyun-python-sdk-core aliyun-python-sdk-ecs
添加標(biāo)簽,需要的參數(shù)主要是資源id、資源類型、標(biāo)簽,注意region不要填錯。下面是為資源添加標(biāo)簽的代碼示例,一次調(diào)用最多可添加5個標(biāo)簽。
# 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添加兩個標(biāo)簽,兩個標(biāo)簽分別為 env:test 和 depart:dep1 。如果添加Tag時value填寫錯誤,可以改正value之后再調(diào)用一次AddTags來“覆蓋”一次同key的標(biāo)簽。
查詢標(biāo)簽,可以根據(jù)資源查詢資源上的標(biāo)簽,也可以不填寫資源,查詢用戶名下所有標(biāo)簽。下面是查詢一個資源下標(biāo)簽的代碼示例
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')
刪除標(biāo)簽,刪除指定資源的標(biāo)簽,本接口現(xiàn)在必須指定資源,可以不指定Tag value,表示刪除所有Tag key為某個值的資源上的標(biāo)簽。
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添加,為了保證標(biāo)簽流程的閉環(huán),在創(chuàng)建資源的時候也是支持標(biāo)簽添加的,在資源的創(chuàng)建接口都是支持直接帶Tag的創(chuàng)建,例如創(chuàng)建實例接口:
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)
這樣創(chuàng)建出來的實例將會天然帶有env:test標(biāo)簽。
在控制臺添加標(biāo)簽,可以直接在實例列表的"更多"選項中選擇編輯標(biāo)簽,在彈出框中新建標(biāo)簽即可。
標(biāo)簽在實例列表中或者實例詳情頁中就可以看到。
與添加標(biāo)簽一樣,刪除標(biāo)簽也在編輯標(biāo)簽的彈出窗口中操作,選擇已有的標(biāo)簽刪除掉即可。
在第四步的分組配置中,可以添加此次創(chuàng)建資源的標(biāo)簽
我們涉及到的權(quán)限控制都指的是在子賬號情況下對子賬號的訪問進行控制,首先需要在RAM控制臺創(chuàng)建子賬號(用戶),然后給子用戶授予權(quán)限,這個子用戶將只有操作、查詢授權(quán)規(guī)則相關(guān)的權(quán)限。
對于標(biāo)簽權(quán)限,授權(quán)語法如下:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "ecs:tag/depart": "dep1" } } } ] }
授權(quán)了如上權(quán)限的子用戶,就只能操作帶有depart:dep1標(biāo)簽的資源,注意,在查詢時,這個授權(quán)不能作為過濾條件,在這個子賬號查詢實例的時候,必須帶有Tag.1.Key=depart Tag.1.Value=dep1的過濾條件才允許查詢。
對于使用Tag授權(quán)的資源,對不同類型的API有不同的限制表現(xiàn),具體的限制如下:
對于操作類接口(如StartInstance),是針對某一個資源的操作,子賬號是否有權(quán)限完全依賴這個實例是否帶有指定的標(biāo)簽。
如果實例上帶有授權(quán)語句中所有規(guī)定的標(biāo)簽,則允許子賬號操作。
對于查詢類操作,由于所有的鑒權(quán)行為都是前置行為(即判斷結(jié)果只區(qū)分是否通過,而不會判斷一個集合中有哪些通過),所以不會對結(jié)果集合進行“有權(quán)限過濾”。使用了標(biāo)簽鑒權(quán)的子賬號,必須在查詢中帶有指定有權(quán)限的標(biāo)簽進行查詢,才能查到有權(quán)限的實例。
對于創(chuàng)建類接口,鑒權(quán)時會判斷接口中使用的所有資源是不是有權(quán)限,同時,也會判斷創(chuàng)建出來的資源是否有權(quán)限。因此,對于帶有標(biāo)簽授權(quán)的子賬號,創(chuàng)建實例的時候,創(chuàng)建調(diào)用也必須帶有相關(guān)Tag,否則子用戶沒有權(quán)限創(chuàng)建。
上述就是小編為大家分享的如何解析ECS TAG功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。