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

通過RAM角色實現跨云賬號授權

本文介紹如何使用RAM控制臺和SDK獲取阿里云臨時安全令牌STS(Security Token Service)并實現跨賬號授權查看函數計算的資源。

使用示例

企業A開通了函數計算服務,該企業需要企業B代為操作函數計算的資源。同時企業A有如下訴求:

  • 希望能專注于業務系統,僅作為函數計算的所有者,同時,可以授權企業B操作部分業務,例如創建服務、創建函數等。

  • 當企業B的員工加入或離職時,無需做任何權限變更。企業B可以進一步將企業A的資源訪問權限分配給企業B的RAM用戶,并可以精細控制其RAM用戶對資源的訪問或操作權限。

  • 如果雙方合同終止,企業A隨時可以撤銷對企業B的授權。

使用控制臺的操作步驟

假如企業A需要授權企業B的員工訪問函數計算的所有服務。企業A和企業B下分別有一個阿里云賬號A和阿里云賬號B:

  • 企業A的阿里云賬號ID為123456789012****,賬號別名(企業別名)為company-a

  • 企業B的阿里云賬號ID為134567890123****,賬號別名(企業別名)為company-b

步驟一:阿里云賬號A創建RAM角色

使用阿里云賬號A創建一個RAM角色,并為RAM角色授予適當的權限,允許阿里云賬號B使用該角色,即其他云賬號選擇阿里云賬號B。

  1. 使用阿里云賬號A登錄RAM控制臺

  2. 在左側導航欄,選擇身份管理 > 角色

  3. 角色頁面,單擊創建角色

  4. 創建角色面板,選擇可信實體類型為阿里云賬號,然后單擊下一步

  5. 設置角色fc-admin的信息。

    1. 輸入角色名稱

    2. 輸入備注

    3. 選擇其他云賬號為賬號B的賬號ID。

      說明
  6. 單擊完成

  7. 單擊關閉

  8. 阿里云賬號A為剛才創建的RAM角色添加AliyunFCReadOnlyAccess權限。關于如何為RAM角色授權,請參見為RAM角色授權

RAM角色創建成功后,您可以在該角色的基本信息頁面內查看到該RAM角色的ARN和信任策略:

  • RAM角色的ARN為:acs:ram::123456789012****:role/fc-admin

  • RAM角色的信任策略如下:

    說明

    以下策略表示僅允許阿里云賬號B下的RAM用戶來扮演該RAM角色。

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "RAM": [
              "acs:ram::134567890123****:root"
            ]
          }
        }
      ],
      "Version": "1"
    }

步驟二:阿里云賬號B創建RAM用戶

  1. 使用阿里云賬號B為其員工創建RAM用戶。關于如何創建RAM用戶,請參見創建RAM用戶

  2. 阿里云賬號B為創建好的RAM用戶添加AliyunSTSAssumeRoleAccess權限,即允許RAM用戶扮演RAM角色。關于如何為RAM用戶添加權限,請參見為RAM用戶授權

步驟三:切換身份登錄

當阿里云賬號B下的某個員工(RAM用戶)需要訪問阿里云賬號A下的資源時,阿里云賬號B可以自主進行授權控制。即阿里云賬號B下的RAM用戶扮演阿里云賬號A下的RAM角色訪問阿里云賬號A下的資源。具體操作如下:

  1. 使用阿里云賬號B的RAM用戶登錄RAM控制臺

    關于RAM用戶登錄控制臺的詳細信息,請參見RAM用戶登錄阿里云控制臺

  2. 將鼠標懸停在右上角頭像的位置,單擊切換身份

    1. 輸入RAM角色對應的企業別名(賬號別名)、默認域名或歸屬的阿里云賬號(主賬號)ID,三者取其一即可。更多信息,請參見查看和修改默認域名
    2. 輸入RAM角色名稱。更多信息,請參見查看RAM角色

    更多信息,請參見使用RAM角色

(可選)撤消授權

如果企業A與企業B的合作終止了,企業A只需要撤銷阿里云賬號B對RAM角色的使用即可。此時阿里云賬號B下的所有RAM用戶對RAM角色的使用權限將被自動撤銷。具體操作如下:

  1. 阿里云賬號A登錄RAM控制臺

  2. 在左側導航欄,選擇身份管理 > 角色

  3. 角色頁面,單擊目標RAM角色操作列的刪除

  4. 單擊確定

說明

在刪除RAM角色前,請先為RAM角色移除權限。具體操作,請參見為RAM角色移除權限

使用SDK的操作步驟

函數計算可以通過STS進行臨時授權訪問。STS是為云計算使用者提供臨時訪問令牌的Web服務。以下示例展示,阿里云賬號B如何獲取查看阿里云賬號A下所有服務的權限。

前提條件

創建函數

操作步驟

  1. 使用阿里云賬號A創建RAM角色,并選擇信任的云賬號為阿里云賬號B。

  2. 使用阿里云賬號B創建RAM用戶,并為其授予扮演RAM角色的權限。

    具體操作,請參見創建RAM用戶為RAM用戶授權

  3. 在阿里云賬號B的函數中,輸入以下示例代碼,獲取臨時訪問憑證。更多信息,請參見STS SDK概覽AssumeRole

    const Core = require('@alicloud/pop-core');
    
    //構建一個阿里云客戶端, 用于發起請求。
    /*
        阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
        建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
        本示例以將AccessKey ID和AccessKey Secret保存在環境變量中實現身份驗證為例。
        在運行本示例前請先在本地環境中設置環境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        在FC Runtime運行環境下,配置執行權限后,ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET環境變量會自動被設置。
    */
     var client = new Core({
       accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
       accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
       endpoint: 'https://sts.aliyuncs.com',
       apiVersion: '2015-04-01'
     });
    
     //設置參數。
     var params = {
       "RegionId": "cn-hangzhou",
       "RoleArn": "<RoleARN>",
       "RoleSessionName": "<RoleSessionName>"
     }
    
     var requestOption = {
       method: 'POST'
     };
    
     //發起請求,并得到響應。
     client.request('AssumeRole', params, requestOption).then((result) => {
       console.log(JSON.stringify(result));
     }, (ex) => {
       console.log(ex);
     })
    # -*- coding: utf-8 -*-
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_sts20150401.client import Client
    from alibabacloud_sts20150401.models import AssumeRoleRequest
    
    
    def main():
        # 輸入用戶臨時密鑰,包括臨時Token
        # 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
        # 建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
        # 本示例以將AccessKey ID和AccessKey Secret保存在環境變量中實現身份驗證為例。
        # 運行本示例前請先在本地環境中設置環境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        # 在FC Runtime運行環境下,配置執行權限后,ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET環境變量會自動被設置。
        AccessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))
        AccessKeyId=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID')
        regionId ='cn-hangzhou'
    
    
        config = Config(
            access_key_id='<ACCESS-KEY-ID>',
            access_key_secret='<ACCESS-KEY-SECRET>',
            region_id='cn-hangzhou'
        )
        client = Client(config)
    
        assume_role_request = AssumeRoleRequest(
            duration_seconds=3600,
            role_arn='<RoleARN>',
            role_session_name='fc-python-sdk'
        )
        response = client.assume_role(assume_role_request)
        response_json = json.loads(str(response.body).replace("'", "\"")) 
    	  result = json.dumps(response_json) 
    	  print(result)
    
    if __name__ == "__main__":
        main()

    預期輸出。

    {
      "RequestId": "964E0EC5-575B-4FF5-8FD0-D4BD8025602A",
      "AssumedRoleUser": {
        "Arn": "acs:ram::****:role/wss/wss",
        "AssumedRoleId": "***********:wss"
      },
      "Credentials": {
        "SecurityToken": "*************",
        "AccessKeyId": "STS.*************",
        "AccessKeySecret": "*************",
        "Expiration": "2023-05-28T11:23:19Z"
      }
    }
    說明

    獲取SecurityToken時,可能遇到的常見問題,請參見RAM角色和STS Token常見問題

  4. 修改阿里云賬號B的函數代碼,使其RAM用戶具有查看阿里云賬號A下函數計算的所有服務的權限。

    示例如下:

    const FC = require('@alicloud/fc2');
    // 構建客戶端。
    // 設置密鑰信息為獲取的臨時密鑰信息。/*
        阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
        建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
        本示例以將AccessKey ID和AccessKey Secret保存在環境變量中實現身份驗證為例。
        運行本示例前請先在本地環境中設置環境變量ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET和ALIBABA_CLOUD_SECURITY_TOKEN。
        在FC Runtime運行環境下,配置執行權限后,ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET和ALIBABA_CLOUD_SECURITY_TOKEN環境變量會自動被設置。
    */
    const client = new FC('<accountID>', {
        region: '<yourRegionID>',
        accessKeyID: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
        securityToken: process.env['ALIBABA_CLOUD_SECURITY_TOKEN'],
        accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    });
    // 獲取服務列表。
    client.listServices().then(res => {
        console.log(JSON.stringify(res, null, ' '))
    }).catch(ex=> console.log(ex))
    重要

    請確保臨時密鑰的授權角色,即阿里云賬號A創建的角色具有獲取服務列表的權限。