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

通過ECS實例RAM角色授權ECS訪問其他云資源

當ECS實例或部署在ECS實例上的應用需要訪問其他云資源時,必須配置訪問憑證,阿里云服務會通過訪問憑證驗證您的身份信息和訪問權限。實例RAM角色允許您將一個角色關聯到ECS實例,實現在實例內部自動獲取并刷新臨時訪問憑證,無需直接暴露AccessKey,減少密鑰泄露的風險。同時,也可借助RAM角色精細化控制資源訪問權限,避免權限過度分配。本文主要介紹如何創建實例RAM角色并授予給ECS實例,以及如何基于實例RAM角色的獲取臨時訪問憑證。

說明

實例RAM角色是一種可信實體為阿里云服務的RAM角色,即允許云服務扮演的角色,用于解決跨服務訪問問題。關于RAM角色的詳細說明,請參見什么是RAM角色

功能優勢

基于實例RAM角色獲取臨時訪問憑證驗證身份信息和訪問權限控制,有以下優勢:

  • 增強通信安全性:使用STS臨時憑證代替長期AccessKey,降低憑證泄漏的風險。

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

  • 簡化權限維護:無需直接在ECS實例上管理憑據,權限的調整僅需通過修改RAM角色的授權策略來實現,快捷地維護ECS實例擁有的訪問權限。

使用限制

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

  • ECS實例的網絡類型必須是專有網絡VPC。

  • 一臺ECS實例只能授予一個實例RAM角色。

實現流程

創建ECS實例RAM角色并授予給ECS

創建一個RAM角色,并為該角色授予所需的阿里云服務訪問權限。例如,如果ECS實例需要訪問OSS,就要給角色賦予OSS的讀寫權限。

重要

若您的操作賬戶為RAM用戶(子賬號),請先聯系阿里云賬號(主賬號)獲取使用和配置實例RAM角色的權限。具體操作,請參見授權RAM用戶使用ECS資源

權限策略參考如下

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:[ECS RAM Action]",
                "ecs:CreateInstance",
                "ecs:AttachInstanceRamRole",
                "ecs:DetachInstanceRAMRole"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ram:PassRole",
            "Resource": "*"
        }
    ]
}

通過控制臺創建和授予

  1. 登錄RAM控制臺,創建實例RAM角色并為其授權。

    1. 創建可信實體為阿里云服務的RAM角色。

      選擇身份管理 > 角色,單擊創建角色,按照界面提示完成角色創建。注意以下參數(其他參數按需填寫,可參見創建普通服務角色):

      • 可信實體類型:選擇阿里云服務

      • 角色類型:選擇普通服務角色

      • 受信服務:選擇云服務器

    2. 為已創建的實例RAM角色授權。

      將系統策略或已創建的自定義權限策略授權給RAM用戶,使其擁有相關的資源訪問或操作權限。例如,給角色賦予OSS的讀寫權限(AliyunOSSReadOnlyAccess)。

      說明

      支持添加系統策略自定義策略。若系統策略不滿足您的需求,可新建自定義策略。具體操作,請參見創建自定義權限策略

  2. 授予實例RAM角色給ECS實例。

    1. 登錄ECS管理控制臺

    2. 在左側導航欄,選擇實例與鏡像 > 實例

    3. 在頁面左側頂部,選擇目標資源所在的資源組和地域。地域

    4. 找到要操作的ECS實例,選擇圖標 > 實例設置 > 授予/收回RAM角色

    5. 在對話框中,選擇創建好的實例RAM角色,單擊確定

通過API創建和授予

  1. 創建并配置實例RAM角色

    1. 調用CreateRole接口創建實例RAM角色。

      按如下策略設置參數AssumeRolePolicyDocument

      {
           "Statement": [
           {
               "Action": "sts:AssumeRole",
               "Effect": "Allow",
               "Principal": {
               "Service": [
               "ecs.aliyuncs.com"
               ]
               }
           }
           ],
           "Version": "1"
       }
    2. (可選)調用CreatePolicy接口新建權限策略。

      如果您已有可用權限策略,可跳過該步驟。

      PolicyDocument(權限策略)需按如下設置:

      {
           "Statement": [
               {
               "Action": [
                   "oss:Get*",
                   "oss:List*"
               ],
               "Effect": "Allow",
               "Resource": "*"
               }
           ],
           "Version": "1"
       }
    3. 調用AttachPolicyToRole接口為實例RAM角色授權。

  2. 調用AttachInstanceRamRole接口將RAM角色授予ECS實例。

通過ECS實例RAM角色獲取臨時訪問憑證

獲取到臨時訪問憑證后,應用程序即可使用這些臨時憑證安全地調用阿里云API,進行跨服務訪問或數據操作。該臨時授權訪問憑證會自動周期性地更新。

方式一:在SDK中通過Credentials工具獲取

Credentials工具會自動獲取ECS實例綁定的實例RAM角色,并調用ECS的元數據服務(Meta Data Server)獲取臨時訪問憑證STS Token,該憑證會周期性更新。

下文以Python和Java SDK為例,更多語言SDK示例,請參見使用訪問憑據訪問阿里云OpenAPI最佳實踐

Python
  1. 安裝Credentials工具。

    sudo pip install alibabacloud_credentials
  2. 配置ECS的RAM角色作為訪問憑證。

    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_credentials.models import Config as CredConfig
    
    credentialConfig = CredConfig(
    	type='ecs_ram_role',
    	# 選填,該ECS角色的角色名稱,不填會自動獲取,但是建議加上以減少請求次數
    	role_name='<RoleName>'
    )
    credentialsClient = CredClient(credentialConfig)

Java

  1. 添加credentials依賴。

    <!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java -->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>credentials-java</artifactId>
        <version>0.3.4</version>
    </dependency>
  2. 配置ECS實例RAM角色作為訪問憑證。

    import com.aliyun.credentials.Client;
    import com.aliyun.credentials.models.Config;
    
    public class DemoTest {
        public static void main(String[] args) throws Exception {
            Config credentialConfig = new Config();
            credentialConfig.setType("ecs_ram_role");
            // 選填,該ECS角色的角色名稱,不填會自動獲取,但是建議加上以減少請求次數
            credentialConfig.setRoleName("<RoleName>");
            Client credentialClient = new Client(credentialConfig);
        }
    }

方式二:在實例內部獲取(通過元數據)

某些場景,如果您沒有適配Credentials工具,或需要在腳本中基于實例RAM角色來獲取資源臨時訪問憑證,可直接在實例內部訪問元數據服務器獲取。

說明

通過元數據服務,您無需登錄控制臺或調用API,在實例內部即可獲取實例信息。詳細說明,請參見實例元數據

加固模式

  • Linux實例

    # 獲取元數據服務器的訪問憑證用于鑒權
    TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:<元數據服務器訪問憑證有效期>"` 
    # 獲取實例RAM角色的臨時授權訪問憑證
    curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/ram/security-credentials/<實例RAM角色名稱>
  • Windows實例(Powershell)

    # 獲取元數據服務器的訪問憑證用于鑒權
    $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<元數據服務器的訪問憑證有效期>"} -Method PUT -Uri http://100.100.100.200/latest/api/token
    # 獲取實例RAM角色的臨時授權訪問憑證
    Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/ram/security-credentials/<實例RAM角色名稱>

<元數據服務器的訪問憑證有效期>:實例RAM角色的臨時授權訪問憑證是通過元數據服務器獲取的,在獲取實例RAM角色的臨時授權訪問憑證之前,先獲取元數據服務器的訪問憑證并設置其有效期,以加強數據安全。超過有效期后,需要重新獲取憑證,否則無法獲取實例RAM角色的臨時授權訪問憑證。

取值范圍為1~21600,單位為秒。詳細說明,請參見實例元數據

<實例RAM角色名稱>需替換為具體的實例RAM角色名稱。例如EcsRamRoleDocumentTesting。

普通模式

  • Linux實例

    curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<實例RAM角色名稱>
  • Windows實例(Powershell)

    Invoke-RestMethod http://100.100.100.200/latest/meta-data/Invoke-RestMethod http://100.100.100.200/latest/meta-data/ram/security-credentials/<實例RAM角色名稱>

    <實例RAM角色名稱>需替換為具體的實例RAM角色名稱。例如EcsRamRoleDocumentTesting。

返回示例如下,其中:

  • SecurityToken:實例RAM角色的臨時Token。

  • Expiration:實例RAM角色的臨時授權訪問憑證的有效期(非元數據服務器的訪問憑證有效期)。

    {
       "AccessKeyId" : "STS.*******6YSE",
       "AccessKeySecret" : "aj******jDU",
       "Expiration" : "2017-11-01T05:20:01Z", 
       "SecurityToken" : "CAISng********",
       "LastUpdated" : "2023-07-18T14:17:28Z",
       "Code" : "Success"
    }

收回/更改ECS的實例RAM角色

通過控制臺收回/更改

  1. 登錄ECS管理控制臺

  2. 在左側導航欄,選擇實例與鏡像 > 實例

  3. 在頁面左側頂部,選擇目標資源所在的資源組和地域。地域

  4. 找到要操作的ECS實例,選擇圖標 > 實例設置 > 授予/收回RAM角色

    • 收回實例RAM角色:操作類型選擇收回,單擊確定

    • 更改實例RAM角色:操作類型選擇授予,選擇所需的實例RAM角色,單擊確定完成更改。

      image.png

通過API收回/更改

應用示例:通過ECS實例RAM角色訪問其他云服務

下文以部署在Linux ECS實例上的Python應用程序訪問OSS下載圖片為例,為您介紹如何通過ECS及部署在ECS實例上的應用如何通過實例RAM角色訪問其他云資源。

  1. 準備工作。

    1. 創建ECS實例RAM角色,授予所需資源的訪問權限(本文示例AliyunOSSReadOnlyAccess),并將該實例RAM角色授予ECS實例。

      具體操作,可參見創建ECS實例RAM角色并授予給ECS

    2. 在ECS實例所在的地域創建OSS存儲空間(Bucket),并記錄Bucket名稱和EndPoint,可在Bucket概覽頁獲取。具體操作,請參見創建存儲空間

      重要

      若需通過外網訪問OSS,請確保ECS實例已開通公網。您可以通過更改帶寬或綁定EIP方式開通IPv4公網。具體操作,請參見修改固定公網帶寬綁定EIP

      image

      image

    3. 上傳圖片到OSS存儲空間(Bucket)。具體操作,請參見上傳圖片到OSS

  2. 遠程連接ECS實例,安裝OSS Python SDK和alibabacloud_credentials。

    說明

    本步驟以Alibaba Cloud Linux 3 ECS實例為例,Alibaba Cloud Linux 3默認安裝的是Python 3,如果您使用其他Linux操作系統需要根據Python版本適當調整命令。如果您使用的是Windows ECS實例,請參見安裝OSS Python SDK

    1. 升級pip和setuptools、wheel工具。

      sudo pip3 install --upgrade pip setuptools wheel
    2. 安裝credentials工具。

      sudo pip3 install alibabacloud_credentials  
    3. 安裝OSS SDK依賴的python-devel包。

      sudo yum install python3-devel 
    4. 安裝OSS Python SDK。

      sudo pip3 install oss2 
  3. 使用實例RAM角色作為臨時憑證訪問OSS,并下載圖片。

    Python示例代碼如下(部分信息需參考注釋,按實際情況替換):

    import oss2
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials.models import Config
    from oss2 import CredentialsProvider
    from oss2.credentials import Credentials
    
    class CredentialProviderWarpper(CredentialsProvider):
        def __init__(self, client):
            self.client = client
    
        def get_credentials(self):
            access_key_id = self.client.get_access_key_id()
            access_key_secret = self.client.get_access_key_secret()
            security_token = self.client.get_security_token()
            return Credentials(access_key_id, access_key_secret, security_token)
    
    def download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name):
        config = Config(
            type='ecs_ram_role',      # 訪問憑證類型。固定為ecs_ram_role。
            role_name=role_name
        )
        cred = Client(config)
        credentials_provider = CredentialProviderWarpper(cred)
        auth = oss2.ProviderAuth(credentials_provider)
    
        # 初始化 OSS Bucket 對象
        bucket = oss2.Bucket(auth, endpoint, bucket_name)
        # 下載圖片到本地
        bucket.get_object_to_file(object_key, local_file)
        print("Image downloaded successfully")
    
    if __name__ == "__main__":  
    
        # 定義全局變量
        role_name = 'role_name'  # 需替換為實例RAM角色名稱
        bucket_name = 'bucket_name'  # 需替換為Bucket名稱
        endpoint = 'http://oss-cn-beijing-internal.aliyuncs.com'  # 需替換為OSS Bucket的Endpoint
        object_key = 'testfolder/example.png'  # 需替換為你要下載的圖片在OSS中的完整存儲路徑(不包含Bucket名稱)
        local_file = '/localpath/to/image.png'  # 需替換為圖片需要在ECS上存儲的根路徑,并定義圖片名稱
        download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name)

相關文檔