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

使用訪問憑據訪問阿里云OpenAPI最佳實踐

訪問憑據一旦發生泄露,會給云上資源和用戶業務帶來很大的安全隱患。本文為您介紹如何在不同的場景中安全使用訪問憑據訪問阿里云OpenAPI。

什么是訪問憑據

訪問憑據是指用戶證明其身份的一組信息。用戶通過開發工具(API、CLI、SDK、Terraform等)訪問阿里云時,需要提供正確的訪問憑據才能驗證身份。常見的訪問憑據類型:

  • AccessKey:訪問密鑰AccessKey(簡稱AK)是阿里云提供給阿里云賬號(主賬號)和RAM用戶(子賬號)的永久訪問憑據,一組由AccessKey ID和AccessKey Secret組成的密鑰對。更多信息,請參見創建AccessKey。

  • STS Token:安全令牌(STS Token)是阿里云提供給RAM角色的臨時訪問憑據,可以自定義時效和訪問權限。更多信息,請參見什么是STS。

常見的訪問憑據泄露案例

  • 開發者直接將AK硬編碼在業務代碼中,有代碼倉庫閱讀權限的開發者均能獲取到AK信息。開發者直接將業務代碼上傳到開源社區或代碼托管服務,導致AK的進一步泄露。

  • 用戶為了能夠讓自己的客戶端直接調用到OpenAPI,將AK寫到客戶端代碼中。攻擊者通過反編譯客戶端代碼,獲取到AK信息。

  • 開發者的技術文檔或者分享材料中包含AK信息。

  • 產品說明文檔中包含的樣例代碼含有AK信息。

  • 用戶無權限控制的接口中返回了訪問憑據信息。

訪問憑據的安全使用方案

訪問憑據的安全使用方案的主要思路:降低訪問憑據的暴露時間和暴露范圍。常見場景的訪問憑據安全使用方案如下表所示。

方案名稱

適用場景

容器實例角色扮演

如果您的應用程序部署在阿里云ACK容器集群上,則可以基于RRSA(RAM Roles for Service Accounts)功能,在容器集群內實現應用隔離的RAM角色功能,各個應用可以扮演獨立的RAM角色,訪問阿里云OpenAPI。

ECS實例角色扮演

如果您的應用程序部署在阿里云ECS實例上,則可以通過ECS實例RAM(Resource Access Management)角色讓ECS實例扮演具有某些權限的角色,訪問阿里云OpenAPI。

員工使用STS Token進行開發調試

針對研發、運維、產品等職能員工,需要使用AccessKey進行運維、管理、調試等操作,建議通過角色SSO的方式,扮演其對應職能的RAM角色,獲取STS Token。

函數計算使用STS Token

如果您在函數計算(FC)上部署的應用程序需要訪問其他云資源,則可以通過函數計算RAM角色將FC函數和RAM角色關聯,使用STS Token(Security Token Service)訪問云資源,解決永久憑據可能導致的安全風險問題。

配置系統環境變量

對于不適用以上方案的場景,建議您使用配置系統環境變量的方式,訪問阿里云OpenAPI。

容器實例角色扮演

前提條件

  • 適用于支持RAM的云服務。

  • RRSA功能目前僅支持1.22及以上版本的集群,即ACK集群基礎版ACK集群Pro版、ACK Serverless集群基礎版、ACK Serverless集群Pro版ACK Edge集群Pro版。

  • 使用V2.0版本的阿里云SDK。

  • 自建網關類產品的自研SDK無法使用。

原理介紹

基于RRSA功能,您可以在集群內實現Pod級別隔離的應用關聯RAM角色功能。各個應用可以扮演獨立的RAM角色并使用獲取的臨時憑證訪問云資源,從而實現應用RAM權限最小化以及無AccessKey訪問阿里云OpenAPI避免AccessKey泄露的需求。

3

從用戶側視角來看,RRSA功能的工作流程如下。

  1. 用戶提交使用了服務賬戶令牌卷投影功能的應用Pod。

  2. 集群將為該應用Pod創建和掛載相應的服務賬戶OIDC Token文件。

  3. Pod內程序使用掛載的OIDC Token文件訪問STS服務的AssumeRoleWithOIDC接口,獲取扮演指定RAM角色的臨時憑證。

    說明
    • 請提前修改RAM角色配置,允許Pod使用的服務賬戶扮演該RAM角色。更多信息,請參見AssumeRoleWithOIDC。

    • 從文件中讀取的OIDC Token是一個臨時Token,建議應用程序每次在使用時都從文件中讀取最新的Token,集群會在Token過期前更新替換文件內已有的Token。

  4. Pod內程序使用獲取到的臨時憑證訪問云資源OpenAPI。

配置方法

  • ACK容器集群開啟RRSA功能。詳細信息,請參見啟用RRSA功能。

  • ACK容器集群使用RRSA功能。詳細信息,請參見使用RRSA功能。

代碼示例

目前,阿里云V2.0 SDK已經內置了支持使用RRSA OIDC Token進行OpenAPI認證的功能,所有基于V2.0 SDK生成并且支持STS Token認證的云產品SDK都將默認支持RRSA OIDC Token認證。支持此功能的SDK版本信息和參考代碼如下。

編程語言

支持認證的SDK版本

使用示例

Go

Alibaba Cloud Credentials for Go 1.2.6及以上版本。更多信息,請參考方式六:使用OIDCRoleArn。

Go SDK使用示例

Java

Alibaba Cloud Credentials for Java 0.2.10及以上版本。更多信息,請參考方式六:使用OIDCRoleArn。

Java SDK使用示例

Python 3

Alibaba Cloud Credentials for Python 0.3.1及以上版本。更多信息,請參考方式六:使用OIDCRoleArn。

Python 3 SDK使用示例

Node.js和TypeScript

Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6及以上版本。更多信息,請參考方式六:使用OIDCRoleArn

Node.js和TypeScript使用示例

ECS實例角色扮演

前提條件

  • 適用于支持阿里云RAM的云服務。

  • 使用V2.0版本的阿里云SDK。

  • 自建網關類產品的自研SDK無法使用。

原理介紹

實例RAM角色允許您將一個角色關聯到ECS實例,在ECS實例內部基于STS(Security Token Service)臨時憑證訪問其他云產品的API,臨時憑證將周期性更新。既可以保證云賬號AccessKey的安全性,也可以借助訪問控制RAM實現精細化控制和權限管理。

1

工作流程如下:

  1. 應用程序訪問ECS實例元數據獲取STS臨時憑證。詳細信息,請參見ECS實例元數據概述。

  2. 使用STS臨時憑證訪問云資源。詳細信息,請參見什么是STS

配置方法

為ECS實例授予RAM角色。詳細信息,請參見實例RAM角色。

示例代碼

Alibaba Cloud Credentials是阿里云為阿里云開發者用戶提供身份憑證管理工具,使用Credentials工具可以為您提供更加便捷的方式使用ECS實例角色扮演功能,以調用云服務器ECS的DescribeRegions接口為例,參考代碼如下。

編程語言

使用示例

Go

Go語言代碼示例

Java

Java語言代碼示例

Python

Python語言代碼示例

PHP

PHP語言代碼示例

Node.js

Node.js語言代碼示例

.NET

.NET語言代碼示例

員工使用STS Token進行開發調試

場景描述

針對研發、運維、產品等職能員工,需要使用AccessKey進行運維、管理、調試等操作,建議通過角色SSO的方式,扮演其對應職能的RAM角色,獲取STS Token。

配置方法

函數計算使用STS Token

場景描述

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

方案架構

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

管理員創建一個受信給函數計算的Role(角色),并對該角色授予相應的權限。角色權限包含訪問需要的云資源的權限(圖中1)。管理員將創建好的角色配置到對應的FC函數上,使函數與角色關聯(圖中2)。客戶應用程序從函數上下文中獲取臨時安全憑證(STS Token)(圖中3),該過程中函數計算會使用云服務的身份調用AssumeRole接口,從RAM/STS服務獲取STS Token(圖中i)。 客戶應用程序使用獲取到的STS Token來調用目標云資源服務的API(圖中4)。資源服務API處理請求并返回訪問結果,客戶端應用程序接收到返回的結果后完成相應的業務邏輯。

image

配置方法

具體操作,請參見通過FC函數角色實現臨時憑證的獲取和使用。

配置系統環境變量

配置方法

配置環境變量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。

  • Linux和macOS系統配置方法

    執行以下命令:

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id>
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>

    <access_key_id>需替換為已準備好的AccessKey ID,<access_key_secret>替換為AccessKey Secret。

  • Windows系統配置方法

    1. 新建環境變量文件,添加環境變量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,并寫入已準備好的AccessKey ID和AccessKey Secret。

    2. 重啟Windows系統。

阿里云SDK代碼示例

阿里云SDK支持通過定義ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET環境變量來創建默認的訪問憑證。調用接口時,程序直接訪問憑證,讀取您的訪問密鑰(即AccessKey)并自動完成鑒權。以調用云服務器ECS的DescribeRegions接口為例,參考代碼如下。

編程語言

使用示例

Go

Go語言代碼示例

Java

Java語言代碼示例

Python

Python語言代碼示例

PHP

PHP語言代碼示例

Node.js

Node.js語言代碼示例

.NET

.NET語言代碼示例

通用代碼示例

對于自建網關類產品的自研SDK等無法使用阿里云SDK的場景,以Java語言為例,可以采用下面的方式加載環境變量。

import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class DemoTest {
    public static void main(String[] args) throws Exception{
        Config config = new Config();
        // Which type of credential you want
        config.setType("access_key");
        // AccessKeyId of your ram user
        config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // AccessKeySecret of your ram user
        config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        Client client = new Client(config);
    }
}

訪問憑據泄露處理方案

相關文檔

更多云上安全實踐,請參閱以下文檔: