日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

首頁 通過ECS實例角色實現臨時憑證的獲取和使用

通過ECS實例角色實現臨時憑證的獲取和使用

更新時間: 2024-10-09 15:34:00

本文介紹了一種部署在ECS實例上的應用程序獲取和使用臨時憑證(STS Token)的方案。避免直接把AccessKey固化在程序或實例中,引發泄露風險。

方案概述

憑證管理是云上最容易出現風險的環節之一,管理不善將導致憑證泄漏,進而導致數據泄漏、資產損失等嚴重安全事故。當ECS實例或部署在ECS實例上的應用需要訪問其他云資源時,必須先通過訪問憑證來驗證身份信息和訪問權限。實例RAM角色允許您將一個角色關聯到ECS實例,使ECS實例及其上的應用基于STS臨時憑證訪問其他云資源,無需透露長期AccessKey,既可減少密鑰泄露的風險,也可借助訪問控制RAM精細化控制資源訪問權限,避免權限過度分配。本方案主要介紹如何創建實例RAM角色并授予給ECS實例,以及如何基于實例RAM角色獲取臨時訪問憑證。

方案優勢

該方案能夠顯著提升云上應用程序的安全性、靈活性和便捷性,同時降低維護成本和操作復雜性。

提高安全性

通過ECS實例角色和RAM角色關聯,使用STS Token訪問云資源,避免了將訪問密鑰硬編碼在代碼中,從而消除AK泄露的風險。臨時憑證(STS Token)的使用有效解決了永久憑證(AK/SK)可能帶來的安全風險問題。

精細化管理權限

通過為不同ECS實例賦予具有特定授權策略的RAM角色,確保實例僅能訪問其所需的資源,實現權限最小化。

增強靈活性

部署在ECS實例的程序可以通過阿里云官方SDK,設置實例角色認證方式,獲取臨時憑證STS Token。這種方式無需預先配置固定的訪問憑證,可以根據需要動態獲取和使用臨時憑證。無需直接在ECS實例上管理憑證,權限的調整僅需通過修改RAM角色的授權策略來實現,快捷地維護ECS實例擁有的訪問權限。

降低維護成本

使用臨時憑證STS Token,無需頻繁更新代碼中的訪問密鑰,減少了維護成本和操作復雜性。本方案提供Java/Python代碼示例,客戶能夠快速完成應用改造,減少開發和部署的復雜度。

客戶場景

部署在ECS中的應用程序采用無AK架構

場景描述

客戶在ECS實例上部署的應用程序需要訪問其他云資源,傳統的方式是客戶將RAM用戶的AK(Access Key)固化在實例中,如果將AK寫在配置文件中,容易造成AK泄露,維護困難等問題。ECS實例RAM角色通過將ECS實例和RAM角色關聯,使用STS Token(Security Token Service)訪問云資源,解決永久憑證可能導致的安全風險問題。

適用客戶

  • 需要高安全性:客戶需要確保AK不被暴露,以防止安全漏洞。
  • 動態管理訪問權限:客戶需要動態管理和臨時授予實例訪問其他資源的權限,避免長期憑證帶來的風險。
  • 簡化運維管理:客戶希望簡化運維過程中對憑證的管理,減少手動維護的復雜性。

方案架構

本方案通過ECS實例角色實現臨時憑證的獲取和使用。該架構和流程通過動態管理和臨時授予訪問權限,避免了長期暴露AK的風險,提高了系統的安全性和靈活性。管理員僅需一次性配置角色和權限,后續實例在運行時即可動態獲取和使用臨時憑證,簡化了運維管理工作。

管理員創建一個ECS實例類型的Role(角色),并對該角色授予相應的權限。角色權限包含訪問需要的云資源的權限(圖中1)。管理員將創建好的角色配置到對應的ECS實例上,使實例與角色關聯(圖中2)。客戶應用程序通過調用ECS Meta服務的接口,獲取臨時安全憑證(STS Token)(圖中3)。該過程中ECS Meta Server會調用AssumeRole接口,以云服務的身份扮演RAM角色,從RAM/STS服務獲取STS Token,該過程對于用戶而言無感知(圖中i)。 客戶應用程序使用獲取到的STS Token來調用目標云資源服務的API。此時,應用程序使用臨時憑證進行認證和授權(圖中4)。資源服務API處理請求并返回訪問結果,客戶端應用程序接收到返回的結果后完成相應的業務邏輯。

產品費用及名詞

產品費用

產品名稱

產品說明

產品費用

資源目錄RD

資源目錄RD(Resource Directory)阿里云面向企業客戶提供的一套多級賬號和資源關系管理服務。

免費,詳情參見產品計費

云服務器ECS

云服務器ECS(Elastic Compute Service)是一種簡單高效、處理能力可彈性伸縮的計算服務。幫助您構建更穩定、安全的應用,提升運維效率,降低IT成本,使您更專注于核心業務創新。

收費,詳情參見產品計費

訪問控制RAM

訪問控制RAM(Resource Access Management)是阿里云提供的管理用戶身份與資源訪問權限的服務。

免費,詳情參見產品計費

配置審計

配置審計(Cloud Config)是一項資源審計服務,為您提供面向資源的配置歷史追蹤、配置合規審計等能力。面對大量資源,幫您輕松實現基礎設施的自主監管,確保持續性合規。

免費,詳情參見產品計費

系統運維管理OOS

系統管理與運維服務(CloudOps Orchestration Service, OOS),是阿里云提供的云上自動化運維服務,能夠自動化管理和執行任務。

免費,詳情參見產品計費

阿里云資源編排服務ROS

資源編排服務ROS(Resource Orchestration Service)可以幫助您簡化云計算資源的管理。自動完成所有資源的創建和配置,實現自動化部署和運維。

免費,詳情參見產品計費

操作審計

操作審計(ActionTrail)是阿里云提供的云賬號資源操作記錄的查詢和投遞服務,可用于安全分析、資源變更追蹤以及合規性審計等場景。

免費,詳情參見產品計費

名詞解釋

名稱

說明

企業管理主賬號

在企業擁有多個阿里云賬號時,特指擁有管理其他賬號資源權限的管理員賬號。用于管理多賬號,統一配置多賬號身份權限,統一查看各云賬號賬單,統一配置審計規則并下發到各成員賬號。

共享服務賬號

企業共享服務會部署在這個賬號內,如網絡的部署。推薦這個賬號的費用由統一的某個團隊來承擔,比如基礎設施團隊。

RAM管理員

RAM管理員具備賬號下RAM資源的管理權限。RAM管理員可以是阿里云賬號(主賬號),也可以是主賬號下擁有AliyunRAMFullAccess權限的RAM用戶,強烈推薦您使用RAM用戶充當RAM管理員。

訪問密鑰(AccessKey)

訪問密鑰AccessKey(簡稱AK)是阿里云提供給用戶的永久訪問憑據,一組由AccessKey ID和AccessKey Secret組成的密鑰對。發起的請求會攜帶AccessKey ID和AccessKey Secret加密請求內容生成的簽名,進行身份驗證及請求合法性校驗。

RAM角色(RAM role)

RAM角色是一種虛擬用戶,可以被授予一組權限策略。與RAM用戶不同,RAM角色沒有永久身份憑證(登錄密碼或訪問密鑰),需要被一個可信實體扮演。扮演成功后,可信實體將獲得RAM角色的臨時身份憑證,即安全令牌(STS Token),使用該安全令牌就能以RAM角色身份訪問被授權的資源。

實例RAM角色

ECS實例通過實例RAM角色獲得該角色擁有的權限,可以基于臨時安全令牌STS(Security Token Service)訪問指定云服務的API和操作指定的云資源,安全性更高。

實例啟動模板

包含了ECS實例的配置信息,使用實例啟動模板創建ECS實例可以免去重復配置的操作。

安全性

元數據服務器訪問模式

默認情況下,實例元數據服務器可同時通過普通模式和加固模式訪問。為了進一步增強安全性,您可以設置實例元數據服務器訪問模式為僅加固模式。采用ECS實例的元數據加固策略來獲取RAM角色的初始化憑據,相較于普通模式,此方式采納了一種更為嚴謹的安全邏輯:首先在ECS實例內部自動生成一個具有時效限制的token,利用此token作為憑據,向元數據服務(Metadata Server)請求獲得STS(Security Token Service)臨時憑證。這一系列操作構成了憑據客戶端的安全初始化流程。什么是加固模式請參見加固模式的介紹。

注意事項

ECS實例角色限制

為ECS實例授予實例RAM角色存在以下限制:

  • ECS實例的網絡類型必須是專有網絡VPC。
  • 一臺ECS實例只能授予一個實例RAM角色。

ECS實例啟動模板限制

  • 一個賬號在每個地域最多可創建30個實例啟動模板。
  • 創建實例啟動模板時,所有參數都是可選的。但是,如果實例啟動模板中未包含必要參數(例如實例規格、鏡像等),則在使用該模板創建實例時還需要補充該必要參數。
  • 模板一旦創建,不可修改,但支持創建新的版本。

元數據服務器加固模式限制

需確保實例的cloud-init版本為23.2.2。

  • 部分最新發布的公共鏡像支持cloud-init 23.2.2版本。在通過API接口RunInstancesCreateInstance創建新實例時,可以指定ImageId選擇cloud-init 23.2.2版本的鏡像,選用這些公共鏡像創建的實例支持加固模式訪問元數據。支持cloud-init 23.2.2版本的公共鏡像信息,請參見公共鏡像發布記錄
  • 如果已有實例的cloud-init版本不滿足要求,您可以升級cloud-init版本,從而支持加固模式。檢查cloud-init版本及升級方法,請參見安裝cloud-init

支持STS的云服務

詳情參見支持STS的云服務

通過ECS實例角色獲取的臨時憑證有效期

通過ECS實例角色獲取的臨時憑證STS Token的有效期固定為6小時,并且不支持修改。同時該有效期不受實例角色的最大會話時間限制,比如您的實例角色最大會話時間設置的是1小時,但是通過ECS實例角色獲取的STS Token有效期依然是6小時。

自動化模板

模板介紹

若您的應用程序在獲取到ECS實例角色的臨時憑據以后,還需要跨賬號角色扮演到其他賬號,使用其他角色身份調用OpenAPI,同時您希望跨賬號批量完成被扮演的角色的創建。本方案提供基于Terraform的自動化模板,為資源目錄下的目標賬號批量創建 RAM 角色。

模板地址

模板詳情參見代碼倉庫

實施步驟

實施準備

如您需要審計ECS實例是否綁定實例角色,請確保已在「企業管理主賬號」中開通配置審計。具體操作,請參考開通配置審計服務

實施時長

在實施準備工作完成的情況下,本方案實施預計時長:60分鐘。

操作步驟

持續合規審計(可選)

您可以通過配置審計,審計ECS實例是否綁定實例角色,保證臨時憑據的使用落實。

創建賬號組(可選)

如果您當前為多賬號環境,希望對多個成員賬號進行集中的合規管理,可以使用企業管理賬號將資源目錄中的所有或部分成員賬號加入到同一個賬號組中,賬號組將作為一個跨賬號合規管理的管理單元。如果您是單賬號環境,可跳過本步驟。

  1. 登入企業管理主賬號,進入資源管理控制臺,在左側導航欄選擇 資源目錄 > 可信服務。選擇配置審計,單擊管理
  2. 委派管理員賬號中,單擊添加,將日志賬號委派為配置審計服務的管理員。
  3. 登入日志賬號,進入配置審計控制臺,在左側導航欄選擇賬號組。單擊創建賬號組,通過賬號組,對資源目錄中的成員賬號進行集中合規管理。
  4. 創建賬號組時,賬號組類型,可以選擇全局。全局賬號組包含的成員將自動與資源目錄保持一致。全局賬號組會自動感知資源目錄中成員的新增,并自動同步加入到該全局賬號組中,確保合規管理的賬號范圍始終與資源目錄保持一致。需要注意的是,您只能新建一個全局賬號組。填入名稱描述后單擊提交完成賬號組的創建。
創建規則
  1. 進入配置審計控制臺。若您使用上述步驟中的賬號組進行多賬號合規管控,需要在左側導航欄中切換到需要合規管控的賬號組中。
  2. 在左側導航欄選擇合規審計 > 規則,單擊新建規則。選擇名為ECS實例被授予實例RAM角色的規則。單擊下一步
  3. 設置基本屬性中,設置風險等級觸發機制觸發頻率等。然后單擊下一步
  4. 默認選中云服務器 ECS作為規則關聯的資源類型。您可以進一步設置規則生效的范圍,比如,配置該該規則只對某些資源組內的資源或者具有某些標簽的資源生效。以此來對合規管控的資源范圍進行更加精細化的管理。然后單擊下一步
  5. 單擊提交進行創建,創建完成后,在規則詳情頁,您可以看到當前賬號組下,所有不合規的資源,即未被授予實例RAM角色的所有ECS主機實例。該規則默認會每 24 個小時執行一次檢測,您可以在創建規則或者修改規則時,配置該規則的觸發頻率。
  6. 最后,您還可以將不合規資源數據投遞到其他云產品中,比如日志服務、對象存儲等。方便您進一步對數據進行歸檔、處理、審計等操作。更多投遞相關的信息,請參考配置審計投遞

創建RAM角色(可選)

您需要創建一個RAM角色,用于后續步驟中為ECS實例綁定RAM角色,如已創建,可跳過本步驟。

  1. 使用ECS實例所屬賬號登錄RAM控制臺
  2. 在左側導航欄,選擇身份管理 > 角色
  3. 角色頁面,單擊創建角色
  4. 創建角色頁面,選擇可信實體類型為阿里云服務,然后單擊下一步
  5. 選擇角色類型為普通服務角色。輸入角色名稱備注。選擇可信服務為云服務器。單擊完成

成功創建RAM角色后,該RAM角色沒有任何權限,您需要為該RAM角色授權,使其擁有相關的資源訪問或操作權限。具體操作,請參見為RAM角色授權

為增量ECS實例綁定RAM角色

接下來介紹在創建ECS實例時,如何為ECS實例綁定RAM角色。有多種方式可以完成ECS的創建,例如:控制臺創建、使用實例啟動模板、彈性伸縮創建。為增量ECS實例綁定RAM角色需確保已存在待綁定的RAM角色,如需新建RAM角色,請參考創建RAM角色章節。

控制臺創建
  1. 前往實例創建頁
  2. 選擇自定義購買頁簽。
  3. 按需選擇付費類型、地域、實例規格、鏡像等配置。各配置項詳細說明,請參考配置項說明
  4. 展開高級選型(選填)表單,在實例RAM角色中,選擇要綁定的RAM角色。

  1. 在最終創建實例前,請在頁面右側檢查實例的整體配置并配置使用時長等選項,確保各項配置符合您的要求。
  2. 閱讀并簽署《云服務器ECS服務條款》等服務協議(若已簽署,則無需重復簽署,請以頁面提示為準),然后單擊確認下單

創建實例一般需要3~5分鐘,請您耐心等待。您可前往控制臺的實例列表頁面查看實例的狀態,當實例狀態變為運行中時,表示實例創建完成。

實例啟動模版創建
創建實例啟動模板

您可以提前創建啟動模板(如已有啟動模版可跳過本步驟),便于后續使用模板快速創建ECS實例、彈性伸縮組或者彈性供應組。通過在模板中指定授予的RAM角色,確保通過該模板創建出來的實例都關聯了指定的RAM角色。

  1. 登錄ECS管理控制臺
  2. 在左側導航欄,選擇部署與彈性 > > 實例啟動模板
  3. 在頁面頂部,選擇目標資源所在的資源組和地域。
  4. 單擊創建模板
  5. 完成完成基礎配置和高級配置,詳細的參數配置及說明信息,請參見自定義購買實例
  6. 高級配置頁面,找到高級選項。在此處配置實例RAM角色。

  1. 配置確認頁面,輸入模板名稱和模板版本描述,并單擊創建啟動模板
修改已有的實例啟動模板

如果您已經創建了實例啟動模板,并且想要變更已有的模板,例如在模板中配置實例RAM角色。您可以通過創建啟動模板的新版本來更改配置參數。在通過實例啟動模板創建ECS實例時,您可以使用任何版本的實例啟動模板。需要注意的是,如果您未指定某一版本,則會使用默認版本。

  1. 登錄ECS管理控制臺
  2. 在左側導航欄,選擇部署與彈性 > > 實例啟動模板
  3. 在頁面頂部,選擇目標資源所在的資源組和地域。
  4. 在目標模板的操作列中,單擊新建版本。您也可以選中一個模板,在版本信息中單擊新建版本

  1. 啟動模板頁面,自定義配置參數。您可以在模板克隆區域選擇已有的模板和版本,在此基礎上配置參數。詳細的參數配置及說明信息,請參見自定義購買實例
  2. 高級配置頁面,找到高級選項。在此處配置實例RAM角色。

  1. 配置確認頁面選中創建新版本,并選擇要保存到哪一個模板。
  2. 單擊創建啟動模板。在彈出的對話框中,單擊查看新版本前往控制臺查看已創建的新版本。
  3. 如需將其設置為默認版本,在啟動模板頁面,選中一個模板,在版本信息的操作列中單擊設為默認

使用實例啟動模版創建實例

您可以使用指定的模板的任意一個版本快速創建ECS實例,提升效率及使用體驗。在模板中配置好RAM角色后,通過該模板創建出來的實例都會關聯上指定的RAM角色。

  1. 登錄ECS管理控制臺
  2. 在左側導航欄,選擇部署與彈性 > > 實例啟動模板
  3. 啟動模板頁面,找到目標模板,在操作列中單擊創建實例

  1. 自定義購買頁面,選擇模板和版本,待配置信息加載完成,檢查所有配置信息。
  2. 創建實例。
    • 如果您選擇的是包年包月實例,則選擇購買時長并勾選服務協議,單擊確認下單
    • 如果您選擇的是按量付費實例,則勾選服務協議,單擊確認下單

實例創建成功后,您可以前往ECS控制臺實例頁面查看新創建的實例。單擊目標ECS實例ID,在實例詳情頁面下方其他信息中,查看實例綁定的RAM角色。

彈性伸縮創建

如果您使用彈性伸縮(Elastic Scaling Service,簡稱ESS)來根據設定的策略自動調整計算資源數量(即業務所需的實例數量),需要確保使用的伸縮配置正確配置了實例RAM角色,否則由彈性伸縮新創建出來的實例沒有綁定RAM角色,導致業務故障。

  1. 登錄彈性伸縮控制臺
  2. 在左側導航欄中,單擊伸縮組管理
  3. 在頂部菜單欄處,選擇地域。
  4. 找到待操作的伸縮組,在操作列,單擊查看詳情
  5. 在頁面上方,單擊實例配置來源頁簽。

實例配置來源是伸縮組擴容ECS實例時使用的實例配置模板。自動擴容時,伸縮組根據實例配置來源創建ECS實例,并將創建的實例添加到伸縮組。實例配置來源包括實例啟動模板伸縮配置兩種。伸縮組內只能有一項生效的實例配置來源。例如,選用一條新的伸縮配置后,當前生效的啟動模板或伸縮配置會失效。

如果您希望通過實例啟動模板來伸縮擴容ECS實例:

  1. 啟動模板頁簽下,查看當前伸縮組所應用的啟動模板,檢查該啟動模板對應的版本是否正確配置了實例RAM角色,若未配置RAM實例角色,參考實例啟動模板創建章節完成配置。然后,點擊操作列的修改按鈕,選擇對應的啟動模板和版本。

如果您希望通過伸縮配置來伸縮擴容ECS實例:

若還沒有伸縮配置:

  1. 伸縮配置頁簽下,單擊創建伸縮配置
  2. 完成相關參數配置。(在高級設置中,配置實例RAM角色)

  1. 單擊創建,確認參數配置無誤,然后單擊確認創建
  2. 單擊啟用配置

若已有伸縮配置:

  1. 伸縮配置頁簽下,找到對應的伸縮配置,在操作列,單擊修改
  2. 完成相關參數配置。(在高級設置中,配置實例RAM角色)
  3. 單擊修改,確認參數配置無誤,然后單擊確認修改
  4. 對應的伸縮配置狀態列變為生效后表示配置成功,彈性伸縮會使用該伸縮配置創建ECS實例。

為存量ECS實例綁定RAM角色

接下來介紹如何為已有的ECS實例綁定RAM角色,您有多種方式可以完成角色的綁定,例如:在控制臺手動配置、通過API批量綁定、通過OSS批量綁定。為存量ECS實例綁定RAM角色需確保已存在待綁定的RAM角色,如需新建RAM角色,請參考創建RAM角色章節。

通過控制臺綁定
  1. 登錄ECS管理控制臺
  2. 在左側導航欄,選擇實例與鏡像 > 實例
  3. 在頁面頂部,選擇目標資源所在的資源組和地域。
  4. 找到要操作的ECS實例,在操作列單擊 后,單擊實例設置 > 授予/收回RAM角色
  5. 在對話框中,選擇創建好的實例RAM角色,單擊確定完成授予。
通過API批量綁定
  1. 通過 AttachInstanceRamRole API為ECS實例批量綁定RAM角色。
  2. 通過 DescribeInstanceRamRole API查詢ECS實例上的RAM角色。
  3. 通過 DetachInstanceRamRole API回收ECS實例上的RAM角色。

接下來以Java為例,演示如何調用API為存量ECS實例綁定實例RAM角色,首先需要集成SDK:

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>ecs20140526</artifactId>
  <version>5.1.8</version>
</dependency>

下述代碼演示了調用AttachInstanceRamRole API,為已有的ECS實例(i-bp139vch042zn1c5tq9b)綁定實例RAM角色(my-ecs-role):

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * 使用AK&SK初始化賬號Client
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.ecs20140526.Client createClient() throws Exception {
        // 工程代碼泄露可能會導致 AccessKey 泄露,并威脅賬號下所有資源的安全性。以下代碼示例僅供參考。
        // 建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:http://bestwisewords.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
        // 必填,請確保代碼運行環境設置了環境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。
        .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
        // 必填,請確保代碼運行環境設置了環境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 請參考 https://api.aliyun.com/product/Ecs
        config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
        return new com.aliyun.ecs20140526.Client(config);
    }

    public static void main() throws Exception {
        com.aliyun.ecs20140526.Client client = Sample.createClient();
        // 為杭州地域的i-bp139vch042zn1c5tq9b實例綁定my-ecs-role角色
        com.aliyun.ecs20140526.models.AttachInstanceRamRoleRequest attachInstanceRamRoleRequest = new com.aliyun.ecs20140526.models.AttachInstanceRamRoleRequest()
        .setRegionId("cn-hangzhou")
        .setRamRoleName("my-ecs-role")
        .setInstanceIds("[\"i-bp139vch042zn1c5tq9b\"]");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 復制代碼運行請自行打印 API 的返回值
            client.attachInstanceRamRoleWithOptions(attachInstanceRamRoleRequest, runtime);
        } catch (TeaException error) {
            // 此處僅做打印展示,請謹慎對待異常處理,在工程項目中切勿直接忽略異常。
            // 錯誤 message
            System.out.println(error.getMessage());
            // 診斷地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此處僅做打印展示,請謹慎對待異常處理,在工程項目中切勿直接忽略異常。
            // 錯誤 message
            System.out.println(error.getMessage());
            // 診斷地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}
通過OOS批量綁定

以下步驟需要在ECS實例所屬賬號執行。建議您創建一個RAM角色,用于OOS批量授予實例RAM角色時使用該角色身份來運行任務:

  1. 進入RAM控制臺
  2. 在左側導航欄,選擇身份管理 > 角色
  3. 角色頁面,單擊創建角色
  4. 創建角色頁面,選擇可信實體類型為阿里云服務,然后單擊下一步

  1. 角色類型選擇普通服務角色,輸入角色名稱,例如oss-AttachInstanceRamRole-role,選擇授信服務為系統運維管理,點擊完成。

接下來,您需要為該角色分配權限

  1. 進入RAM控制臺
  2. 選擇權限策略菜單,點擊創建權限策略。

  1. 通過腳本編輯模式,將配置框中的原有腳本替換為如下內容。
{
    "Version": "1",
    "Statement": [
      {
        "Action": [
          "ecs:AttachInstanceRamRole",
          "ecs:DescribeInstances"
        ],
        "Resource": "*",
        "Effect": "Allow"
      },
      {
        "Action": [
          "ram:PassRole"
        ],
        "Resource": "*",
        "Effect": "Allow"
      },
      {
        "Action": [
          "oos:StartExecution"
        ],
        "Resource": "*",
        "Effect": "Allow"
      }
    ]
}
  1. 點擊繼續編輯基本信息,輸入自定義權限策略名稱。例如BulkyAttachInstanceRamRolePolicy。點擊確定完成創建。
  2. 創建完成后,在角色頁面,找到上述步驟創建的角色,點擊新建授權按鈕。
  3. 授權范圍選擇整個云賬號。權限在當前阿里云賬號內生效。授權主體選擇您在上述步驟中創建的角色。自定義策略選擇BulkyAttachInstanceRamRolePolicy,即您在上述步驟中創建的策略。
  4. 點擊確定完成創建。

接下來通過OOS為存量ECS實例綁定RAM角色:

  1. 使用ECS實例所屬賬號進入系統運維管理管理控制臺
  2. 自動化任務 > 任務執行管理頁面點擊創建
  3. 創建任務頁面,設置基本信息。本示例中參數說明如下:

參數

描述

模板類別

選擇公共任務模板

模板選擇

選擇ACS-ECS-BulkyAttachInstanceRamRole

執行模式

選擇失敗暫停,當子任務執行有失敗時,執行會暫停,等待您調整并決定是否繼續執行。如果需要分批執行,每批暫停,此處也需選擇失敗暫停

  1. 單擊下一步:設置參數。設置為完成后單擊下一步:確定。本示例中參數說明如下:

參數

描述

Ram角色名稱

填寫待授予ECS的RAM實例角色名

地域ID

選擇ECS實例所在的地域

目標實例

選擇授予RAM實例角色的ECS實例

任務執行的并發比率

根據需要選擇并發控制或批次控制,本例中選擇批次控制:

  • 批次速率數組:[1, 5%, 10%]
  • 循環并發控制:每批暫停
  • 最大錯誤次數:0

OOS扮演的RAM角色

選擇指定RAM角色,使用改角色的權限:

  • 選擇上述步驟中創建的RAM角色,本例中為oss-AttachInstanceRamRole-role

  1. 參數確認完畢后點擊創建
  2. 若在上述步驟中選擇每批暫停,待執行狀態變為等待中后,確認無誤,單擊繼續按鈕。

  1. 待執行狀態變為成功后,表明已完成批量授予實例RAM角色任務。

基于實例RAM角色獲取并使用臨時憑證

當您通過阿里云SDK調用OpenAPI進行資源操作時,必須正確配置憑證信息。強烈推薦您使用阿里云的Credentials工具,幫助您輕松地獲取和管理訪問憑證:

  • 基于實例RAM角色獲取臨時憑證時,Credentials工具會自動調用ECS的元數據服務(Meta Data Server)獲取臨時訪問憑證。
  • Credentials工具會自動維護臨時憑證的生命周期,研發人員無需關心臨時憑證的到期更新,Credentials工具會自動保證憑證的周期性更新。
  • 借助Credentials工具的默認憑據鏈,可以用同一套代碼,通過程序之外的配置來控制不同環境下的憑據獲取方式
阿里云V2.0 SDK

如果您使用V2.0版本的阿里云SDK,可以很方便的集成阿里云的Credentials工具。

以Java為例,通過Maven方式安裝Credentials工具:

<!--建議使用最新發布的Credentials版本。-->
<!--獲取所有已發布的版本列表,請參見https://github.com/aliyun/credentials-java/blob/master/ChangeLog.txt-->
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>credentials-java</artifactId>
  <version>LATEST</version>
</dependency>

Credentials工具支持多種方式初始化憑據客戶端,您可根據實際情況選擇合適的方式進行憑據客戶端初始化。下面介紹顯式配置ECS角色(推薦)和默認憑據鏈的方式,更多方式,請參考初始化憑據客戶端

顯式配置實例角色(推薦)

推薦您使用該方式,在代碼中明確指定實例角色,避免運行環境中的環境變量、配置文件等帶來非預期的結果。該方式顯式設置類型為ecs_ram_role,Credentials工具會自動獲取ECS實例綁定的RAM角色,調用ECS的元數據服務(Meta Data Server)換取STS Token,完成憑據客戶端初始化。詳細代碼請參考代碼示例

import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
// import com.alibaba.fastjson2.JSON;
// import com.aliyun.sts20150401.models.GetCallerIdentityResponse;

public class DemoTest {
    public static void main(String[] args) {
        Config credentialConfig = new Config();
        credentialConfig.setType("ecs_ram_role");
        // 選填,該ECS角色的角色名稱,不填會自動獲取,建議加上以減少請求次數
        credentialConfig.setRoleName("RoleName");
        // 在加固模式下獲取STS Token,強烈建議開啟
        credentialConfig.setEnableIMDSv2(true);
        Client credentialClient = new Client(credentialConfig);

        // 調用API,以調用GetCallerIdentity獲取當前調用者身份信息為例
        // com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
        //     .setCredential(credentialsClient)
        //     .setEndpoint("sts.cn-hangzhou.aliyuncs.com");
        // com.aliyun.sts20150401.Client stsClient = new com.aliyun.sts20150401.Client(config);

        // GetCallerIdentityResponse getCallerIdentityResponse = stsClient.getCallerIdentity();
        // System.out.println(JSON.toJSONString(getCallerIdentityResponse));
    }
}

上述代碼在通過ECS實例RAM角色初始化客戶端時,設置enable_imds_v2的值為true,表示使用數據加固模式。相較于普通模式,此方式采納了一種更為嚴謹的安全邏輯:首先在ECS實例內部自動生成一個具有時效限制的token,利用此token作為憑據,向元數據服務(Metadata Server)請求獲得STS(Security Token Service)臨時憑證。這一系列操作構成了憑據客戶端的安全初始化流程。加固模式的核心優勢在于,ECS實例內部產生的token不僅具備動態性,還嚴格限制了有效時間,大大降低了外部攻擊者通過預測或偽造token來非法訪問元數據服務的可能性,從而有效抵御了服務器端請求偽造(SSRF, Server-Side Request Forgery)等多種網絡安全隱患。

默認情況下,實例元數據服務器可同時通過普通模式和加固模式訪問。為了進一步增強安全性,您可以設置實例元數據服務器訪問模式為僅加固模式

對于新創建實例,可以通過API設置。通過API接口RunInstancesCreateInstance創建實例時,通過HttpTokens參數設置實例元數據服務器訪問模式。該參數取值范圍:

  • optional:默認不強制使用加固模式,支持通過普通模式或加固模式訪問實例元數據。
  • required:強制使用加固模式,即僅加固模式。設置該取值后,無法通過普通模式訪問實例元數據。

對于已有實例,可以通過控制臺手動修改或API方式修改。

控制臺方式:

  1. 在實例列表頁,找到待操作的實例,在操作列,選擇 > 實例設置 > 修改實例元數據訪問信息
  2. 開啟是否啟用實例元數據訪問通道,并設置實例元數據訪問模式
    • 普通:支持通過普通模式或加固模式查看實例元數據。
    • 僅加固模式(推薦):僅支持通過加固模式查看實例元數據,普通模式無法訪問實例元數據。

API方式:通過ModifyInstanceMetadataOptions 修改元數據信息時,通過HttpTokens參數設置實例元數據訪問模式。該參數取值范圍:

  • optional:默認不強制使用加固模式,支持通過普通模式或加固模式訪問實例元數據。
  • required:強制使用加固模式,即僅加固模式。設置該取值后,普通模式無法訪問實例元數據。
默認憑據鏈

當您在初始化憑據客戶端不傳入任何參數時,Credentials工具會使用默認憑據鏈方式初始化客戶端。借助Credentials工具的默認憑據鏈,您可以用同一套代碼,通過程序之外的配置來控制不同環境下的憑據獲取方式。除非您清楚的知道默認憑據鏈中憑據信息查詢優先級以及您的程序運行的各個環境中憑據信息配置方式,否則不建議您使用默認憑據鏈,推薦您使用顯式配置實例角色方式,避免運行環境中的環境變量、配置文件等帶來非預期的結果。詳細代碼請參考代碼示例

import com.aliyun.credentials.Client;
// import com.alibaba.fastjson2.JSON;
// import com.aliyun.sts20150401.models.GetCallerIdentityResponse;

public class DemoTest {
    public static void main(String[] args) throws Exception{
        // 不指定參數
        Client credentialClient = new Client();

        // 調用API,以調用GetCallerIdentity獲取當前調用者身份信息為例
        // com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
        //     .setCredential(credentialsClient)
        //     .setEndpoint("sts.cn-hangzhou.aliyuncs.com");
        // com.aliyun.sts20150401.Client stsClient = new com.aliyun.sts20150401.Client(config);

        // GetCallerIdentityResponse getCallerIdentityResponse = stsClient.getCallerIdentity();
        // System.out.println(JSON.toJSONString(getCallerIdentityResponse));
    }
}

當使用默認憑據鏈方式初始化客戶端時,以Java SDK為例,會嘗試按照如下順序查找相關憑據信息(優先級由高到低)。

  1. 系統屬性
  2. 環境變量
  3. OIDC RAM角色
  4. 配置文件
  1. ECS實例RAM角色

詳細信息請參考Java SDK默認憑據鏈

其中,對于ECS實例RAM角色,Credentials工具會在環境變量中獲取ALIBABA_CLOUD_ECS_METADATA(ECS實例RAM角色名稱),若存在,程序將會通過ECS的元數據服務(Meta Data Server)獲取ECS實例RAM角色的STS Token作為默認憑據信息。強烈建議配置環境變量ALIBABA_CLOUD_ECS_IMDSV2_ENABLE=true開啟在加固模式下獲取STS Token。

需要注意的是:

  • 使用默認憑據鏈的方式,Credentials工具會按照優先級依次查找相關憑據的信息,請避免環境變量維護不當導致獲取到了非預期的憑據。
  • 如果您在運行在ECS中的Docker環境中使用Credentials工具
    • 請確保Docker中可以正常訪問到ECS Meta Service,您可以在Docker環境中,執行命令:url http://100.100.100.200/latest/meta-data/ram/security-credentials/${實例角色名稱},如果正確返回臨時憑證,那么您的Docker環境可以正常訪問ECS Meta Service。
    • 如果您使用的是Credentials工具的默認憑據鏈,請確保您在Docker環境中已經配置了上述所需的環境變量,而不是將環境變量配置到ECS實例上。

如果您需要從長期固定AccessKey的使用方式進行遷移,只需修改少量代碼即可完成,如下圖所示,左側一欄是使用固定AccessKey初始化阿里云SDK,右側一欄是使用Credentials工具初始化阿里云SDK。