天天看點

RocketMQ阿裡雲跨賬戶授權通路示例

Step By Step

主要操作步驟

1、主賬戶A建立角色并進行相關授權;

2、主賬戶B下面建立子賬戶B1;

3、主賬戶B為子賬戶B1授權可以扮演角色;

4、子賬戶B1建立AccessKey&AccessSecret;

5、代碼實作B1認證資訊訂閱主賬戶A下面的RocketMQ。

一、主賬戶A建立角色并進行相關授權

1、登陸主賬戶A

RAM控制台

建立角色

RocketMQ阿裡雲跨賬戶授權通路示例

2、按需輸入必要資訊

RocketMQ阿裡雲跨賬戶授權通路示例
RocketMQ阿裡雲跨賬戶授權通路示例

3、為角色授權

RocketMQ阿裡雲跨賬戶授權通路示例
RocketMQ阿裡雲跨賬戶授權通路示例

4、必要認證參數擷取

RocketMQ阿裡雲跨賬戶授權通路示例

二、主賬戶B下面建立子賬戶B1

1、登陸主賬戶B

下面建立子賬戶

RocketMQ阿裡雲跨賬戶授權通路示例

三、主賬戶B為子賬戶B1授權可以扮演角色

RocketMQ阿裡雲跨賬戶授權通路示例

四、子賬戶B1建立AccessKey&AccessSecret

RocketMQ阿裡雲跨賬戶授權通路示例

五、代碼實作B1認證資訊訂閱主賬戶A下面的RocketMQ

1、pom.xml

<dependencies>
        <!-- https://mvnrepository.com/artifact/com.aliyun.openservices/ons-client -->
        <dependency>
            <groupId>com.aliyun.openservices</groupId>
            <artifactId>ons-client</artifactId>
            <version>1.8.6.Final</version>
        </dependency>

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-sts</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.4.6</version>
        </dependency>
    </dependencies>           

2、Code Sample

import com.aliyun.openservices.ons.api.Action;
import com.aliyun.openservices.ons.api.ConsumeContext;
import com.aliyun.openservices.ons.api.Consumer;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.MessageListener;
import com.aliyun.openservices.ons.api.ONSFactory;
import com.aliyun.openservices.ons.api.PropertyKeyConst;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
import java.util.Properties;

public class ConsumerTest {
    public static void main(String[] args) throws ClientException {
        Properties properties = new Properties();
        // 您在控制台建立的Group ID。
        properties.put(PropertyKeyConst.GROUP_ID, "GID_******");
        
        //子賬戶B1的AccessKey&AccessSecret
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI4G26Yrjp5QjF********", "mHlYOVU6lhnFt6****************");
        IAcsClient client = new DefaultAcsClient(profile);

        // 構造請求,設定參數。
        AssumeRoleRequest request = new AssumeRoleRequest();
        request.setRoleArn("acs:ram::*********:role/taro-submq"); // ARN
        request.setRoleSessionName("taro-submq");  // RAM 角色名稱
        request.setDurationSeconds(3600L); //過期時間,機關為秒,過期時間最小值為900秒,最大值為MaxSessionDuration設定的時間。預設值為3600秒。
        AssumeRoleResponse response;
        //發起請求,并得到響應
        response = client.getAcsResponse(request);

        // 從sts 請求response回報結果擷取認證資訊
        properties.put(PropertyKeyConst.AccessKey, response.getCredentials().getAccessKeyId());
        properties.put(PropertyKeyConst.SecretKey, response.getCredentials().getAccessKeySecret());
        properties.put(PropertyKeyConst.SecurityToken, response.getCredentials().getSecurityToken());

        // 主賬戶A RocketMQ控制台擷取:設定TCP接入域名,進入控制台的執行個體詳情頁面的TCP協定用戶端接入點區域檢視。
        properties.put(PropertyKeyConst.NAMESRV_ADDR, "http://MQ_INST_*********.mq-internet-access.mq-internet.aliyuncs.com:80");

        Consumer consumer = ONSFactory.createConsumer(properties);
        consumer.subscribe("******", "*", new MessageListener() { //訂閱多個Tag。
            public Action consume(Message message, ConsumeContext context) {
                System.out.println("Receive: " + message);
                return Action.CommitMessage;
            }
        });
        consumer.start();
        System.out.println("Consumer Started");
    }
}                       

3、測試效果

RocketMQ阿裡雲跨賬戶授權通路示例
RocketMQ阿裡雲跨賬戶授權通路示例

參考連結

通過RAM角色實作跨雲賬号授權 阿裡雲基于STS擷取臨時通路權限使用示例

繼續閱讀