获取具有“发布”权限的AWS账户的SNS主题列表

时间:2013-11-20 20:49:27

标签: java amazon-web-services amazon-sns

有没有办法找到给定的AWS账户ID具有PUBLISH(或任何其他)权限的SNS主题列表?

我的用例如下:

  1. 服务器程序允许不同的客户端将消息发布到它拥有的SNS主题上。服务器程序在各个AWS区域中具有这些SNS主题。
  2. 在每个AWS区域中,每个客户端都被授予对SNS主题的“发布”权限。
  3. 客户端被赋予主题的名称,并且基于该区域,它必须派生主题ARN并发布消息。
  4. 我想避免通过AWS区域维护这些主题的ARN并将它们分发到客户端配置中,并且想知道客户端是否有办法根据主题名称和AWS区域派生主题ARN ,通过AWS提供的一些API(而不是将ARN形成为aws:${region}:sns:${topicName}

1 个答案:

答案 0 :(得分:2)

我假设ListTopics结果只返回您可以访问的主题的主题部分。

import java.util.List;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.sns.AmazonSNSClient;
import com.amazonaws.services.sns.model.ListTopicsRequest;
import com.amazonaws.services.sns.model.ListTopicsResult;
import com.amazonaws.services.sns.model.Topic;

public class TestSNS {
    public static void main(String[] args) {
        AWSCredentials credentials = new BasicAWSCredentials(args[0], args[1]);
        AmazonSNSClient snsClient = new AmazonSNSClient(credentials);

        ListTopicsResult listTopicsResult = snsClient.listTopics();
        String nextToken = listTopicsResult.getNextToken();
        List<Topic> topics = listTopicsResult.getTopics();

        // ListTopicResult contains only 100 topics hence use next token to get
        // next 100 topics.
        while (nextToken != null) {
            listTopicsResult = snsClient.listTopics(nextToken);
            nextToken = listTopicsResult.getNextToken();
            topics.addAll(listTopicsResult.getTopics());
        }

        // Display all the Topic ARN's
        for (Topic topic : topics) {
            System.out.println(topic);
            /*
             * perform your actions here
             */
        }
    }
}