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

使用ECS實例RAM角色安全訪問KMS

ECS實例RAM角色是RAM角色的一種,它讓ECS實例扮演具有某些權限的角色。當您的自建應用部署在阿里云ECS服務器上時,可以使用ECS實例RAM角色訪問KMS。本文介紹了如何使用ECS實例RAM角色訪問KMS。

支持ECS實例RAM角色的SDK

  • 阿里云SDK:用于執行管控類操作。

  • 憑據SDK:包含憑據客戶端、憑據JDBC客戶端、RAM憑據插件,用于獲取憑據值。

注意事項

  • ECS實例的網絡類型為專有網絡VPC。

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

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

步驟一:創建RAM角色并授權

通過RAM控制臺

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

    1. 登錄RAM控制臺。

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

    3. 角色頁面,單擊創建角色,按照界面提示完成角色創建。注意以下參數,其他參數按需填寫。

      • 角色名稱:本文示例為EcsRamRoleTest。

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

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

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

  2. 授予RAM角色訪問KMS的權限。

    成功創建RAM角色后,該RAM角色沒有任何權限,您需要為該RAM角色授權。

    1. 角色頁面,單擊目標RAM角色操作列的新增授權。

    2. 新增授權頁面,在系統策略上填寫KMS系統策略名稱(AliyunKMSFullAccess),然后單擊確定。

通過RAM OpenAPI

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

    調用RAM的CreateRole - 創建角色接口,請求參數設置如下:

    • RoleName:填寫RAM角色名稱(本文示例為EcsRamRoleTest)。

    • AssumeRolePolicyDocument:填寫如下策略內容,表示允許ECS扮演該角色。

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole", 
                  "Effect": "Allow", 
                  "Principal": {
                      "Service": [
                          "ecs.aliyuncs.com"
                      ]
                  }
              }
          ], 
          "Version": "1"
      }
  2. 授予RAM角色訪問KMS的權限。

    調用RAM的AttachPolicyToRole - 為指定角色添加權限接口,為實例RAM角色(EcsRamRoleTest)添加AliyunKMSFullAccess系統權限。請求參數設置如下:

    • PolicyType:填寫System,表示系統策略。

    • PolicyName:填寫KMS系統策略名稱(AliyunKMSFullAccess)。

    • RoleName:填寫RAM角色名稱(EcsRamRoleTest)。

步驟二:將RAM角色授予ECS實例

通過ECS控制臺

說明

如果您還未購買ECS實例,請先購買ECS實例。具體操作,請參見自定義購買實例。

  1. 登錄ECS管理控制臺。

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

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

  4. 定位到目標ECS實例,選擇圖標 > 實例設置 > 授予/收回RAM角色。

  5. 在對話框中,選擇創建好的RAM角色,單擊確定完成授予。

通過ECS OpenAPI

步驟三:使用ECS實例RAM角色訪問KMS

以使用Java語言,調用KMS ListKeys接口查詢當前地域的所有密鑰ID為例。更詳細的SDK使用指導請參見SDK參考。

阿里云SDK(V1.0)

package com.aliyuncs.kms.examples;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.auth.AlibabaCloudCredentialsProvider;
import com.aliyuncs.auth.InstanceProfileCredentialsProvider;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.kms.model.v20160120.*;
import com.aliyuncs.profile.DefaultProfile;

public class RamRoleTest {
    public static void main(final String[] args) throws Exception {
        String regionId = "<region-id>";
        DefaultProfile profile = DefaultProfile.getProfile(regionId);

        // 設置RAM角色。本文示例使用"EcsRamRoleTest"。
        String roleName = "EcsRamRoleTest"; 

        // 設置ECS實例RAM角色的憑證Provider。
        AlibabaCloudCredentialsProvider provider = new InstanceProfileCredentialsProvider(roleName);

        IAcsClient client = new DefaultAcsClient(profile, provider);

        ListKeysRequest request = new ListKeysRequest();
      
        try {
            ListKeysResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }

    }
}

阿里云SDK(V2.0)

package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    public static com.aliyun.kms20160120.Client createClient() throws Exception {
        com.aliyun.credentials.models.Config credentialConfig = new com.aliyun.credentials.models.Config();
        // 憑證類型
        credentialConfig.type = "ecs_ram_role";
        // 選填,該ECS實例角色名稱,不填會自動獲取,但是建議加上以減少請求次數
        credentialConfig.roleName = "<your-ecsRamRoleName>";
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialConfig);

        com.aliyun.teaopenapi.models.Config kmsClientConfig = new com.aliyun.teaopenapi.models.Config()
        //設置KMS endpoint,例如:kms.cn-hangzhou.aliyuncs.com
        .setEndpoint( "kms.cn-hangzhou.aliyuncs.com").
                setCredential(credentialClient);
        return new com.aliyun.kms20160120.Client(kmsClientConfig);

    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.kms20160120.Client client = Sample.createClient();
        com.aliyun.kms20160120.models.ListKeysRequest listKeysRequest = new com.aliyun.kms20160120.models.ListKeysRequest();
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            client.listKeysWithOptions(listKeysRequest, runtime);
        } catch (TeaException error) {
            System.out.println(error.getMessage());
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            _error.printStackTrace();
        }        
    }
}

憑據客戶端

更多詳細信息,請參見憑據客戶端

  1. 通過系統環境變量或配置文件secretsmanager.properties配置以下參數。

    參數

    參數值

    credentials_type

    固定取值ecs_ram_role。

    credentials_role_session_name

    RAM角色名稱。

    cache_client_region_id

    格式為[{"regionId":"<your region id>"}],請將<your region id>替換為您真實的地域ID。

  2. 構建客戶端獲取憑據值。

    import com.aliyuncs.kms.secretsmanager.client.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.model.SecretInfo;
    
    public class CacheClientEnvironmentSample {
    
        public static void main(String[] args) {
            try {
                //構建憑據客戶端
                SecretCacheClient client = SecretCacheClientBuilder.newClient();
                //使用構建好的客戶端獲取憑據信息
                SecretInfo secretInfo = client.getSecretInfo("#secretName#");
                System.out.println(secretInfo);
            } catch (CacheSecretException e) {
                e.printStackTrace();
            }
        }
    }

憑據JDBC客戶端

以通過JDBC方式連接MySQL數據庫為例介紹。詳細信息,請參見憑據JDBC客戶端。

  1. 在項目的運行代碼中新增配置文件secretsmanager.properties。

    ## 訪問憑據類型
    credentials_type=ecs_ram_role
    ## ECS RAM Role名稱
    credentials_role_name=#credentials_role_name#
    ## 關聯的KMS服務地域
    cache_client_region_id=[{"regionId":"#regionId#"}]
    ## 用戶自定義的刷新頻率, 默認為6小時,最小值為5分鐘,單位為毫秒
    refresh_secret_ttl=21600000
  2. 通過JDBC方式連接MySQL數據庫。

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class SecretManagerJDBCSample {
        public static void main(String[] args) throws Exception {
            // 加載阿里云憑據管家JDBC Load the JDBC Driver com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver
            Class.forName("com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver");
            Connection connect = null;
            try {
                connect = DriverManager.getConnection("secrets-manager:mysql://<YOUR-MYSQL-IP>:<YOUR-MYSQL-PORT>/<YOUR-DATABASE-NAME>", "#your-mysql-secret-name#","");
            } catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }

RAM憑據插件

更多詳細信息,請參見RAM憑據插件。

  1. 在項目的運行代碼中新增配置文件managed_credentials_providers.properties。

    credentials_type=ecs_ram_role
    ## ECS RAM Role名稱
    credentials_role_name=#credentials_role_name#
    ## 關聯的KMS服務地域
    cache_client_region_id=[{"regionId":"#regionId#"}]
  2. 獲得阿里云Java SDK客戶端并調用云服務。

    以調用ECS DescribeInstanceStatus為例:

    運行以下示例代碼時,請自行在pom.xml中添加云服務器aliyun-java-sdk-ecs依賴。

    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusRequest;
    import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusResponse;
    import com.aliyun.kms.secretsmanager.plugin.sdkcore.ProxyAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    
    public class AliyunSdkProviderSample {
        public static void main(String[]args) {
            String secretName="******";
            /*
              如果應用無法設置從classpath和可執行jar包中讀取默認配置文件(managed_credentials_providers.properties),
              或需自定義配置文件名稱時,可調用以下代碼設置自定義配置文件,并按以下順序讀?。?          1."your-config-name"配置絕對路徑+文件名稱,即讀取絕對路徑下的文件
              2."your-config-name"僅配置文件名稱,默認先讀取classpath下的配置文件,再讀取可執行jar包中的配置文件
            */
            //ConfigLoader.setConfigName("your-config-name");
            
            // 1. 獲取ACSClient by aliyun-java-sdk-managed-credentials-provider
            IAcsClient client = null;
            try {
                client = new ProxyAcsClient("<the regionId of ECS>", secretName);
            } catch (ClientException e) {
                 e.printStackTrace();
             }
            // 2. 調用ECS的OpenAPI實現業務功能
            DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest();
            DescribeInstanceStatusResponse response;
            try {
                 response = client.getAcsResponse(request);
            } catch (ServerException e) {
                 e.printStackTrace();
             } catch (ClientException e) {
                 e.printStackTrace();
             }
            // 3. 通過下面方法關閉客戶端來釋放插件關聯的資源 
            client.shutdown();
        }
    }

相關文檔