【问题标题】:How to impersonate using HBase API and hbase-site.xml for BigTable Connection如何使用 HBase API 和 hbase-site.xml 模拟 BigTable 连接
【发布时间】:2022-01-13 05:55:47
【问题描述】:

我们正在使用 HBase API 连接到 BigTable,并且我们正在使用 hbase-site.xml。 我们有什么方法可以使用 HBase API 模拟连接到 BigTable?

<configuration  xmlns:xi="http://www.w3.org/2001/XInclude">
    <property>
        <name>hbase.client.connection.impl</name>
        <value>com.google.cloud.bigtable.hbase1_x.BigtableConnection</value>
    </property>
    <property>
        <name>google.bigtable.project.id</name>
        <value></value>
    </property>
    <property>
        <name>google.bigtable.instance.id</name>
    <value></value>
    </property>
    <property>
        <name>google.bigtable.auth.json.keyfile</name>
        <value></value>
    </property>
</configuration>

源代码(使用 HBase API 的 bigtable 实现,即 com.google.cloud.bigtable.hbase1_x.BigtableConnection)没有任何与使用模拟相关的功能。 https://github.com/googleapis/java-bigtable-hbase

【问题讨论】:

  • 你需要在什么环境下使用模拟?它在您的本地环境中吗?在生产中?在 GCP 上?
  • 需要在 prod 中使用,但此组件/代码不在 GCP 计算引擎中运行,它将来自本地。
  • 那么,为什么需要模拟?你的用例是什么?
  • 嗨,Ranga,你在这方面有什么进展吗?我试图在下面提供答案。你有没有机会检查一下,这有意义吗?如果我的回答有用,请点击它左侧的点赞按钮 (▲)。如果它回答了您的问题,请单击复选标记 (✓) 接受它。这样其他人就知道你得到了(足够的)帮助。
  • 模拟用于 GCP 和组织中定义的 IAM 策略等。在这种情况下,我指的是拥有凭据密钥 json,但这没有写入权限,但您可以模拟具有写入权限但此服务帐户密钥未提供给您的不同服务帐户。 sudo 权限的种类。

标签: google-cloud-platform hbase google-cloud-bigtable


【解决方案1】:

关于用户Impersonation in Hbase,它是appears that it is supported through the user of an Apache Thrift server,我认为它有点像上游代理。根据here 帖子中的 cmets,据说 CBT 确实支持使用此provided example 进行节俭(请注意,这应该在 GCE 实例上设置)。此附加指南显示了设置此网关并将其用于requests coming from App Engine 的过程。如果我误解了您的意图,您可以回来提供有关您的用例的更多详细信息,以便我处理您的问题。

【讨论】:

  • 问题不在于在 HBase 中模拟用户,而是在使用 HBase API 时模拟 BigTable 中的用户。例如,您有 api,具有读取/写入的 HBase 实现,当您的项目迁移到 BigTable 时,与 BigTable 支持 HBase API 相同的代码 HBase API 应该工作。
【解决方案2】:

我们并没有在 hbase-site.xml 中配置模拟用户,因为在源代码中没有找到这个 https://github.com/googleapis/java-bigtable-hbase 的任何参数

在连接到 BigTable 时,我们可以使用 HBase API 模拟的最佳方法是使用模拟创建 BigTable 连接,并在现有 HBase API 实现中使用该连接对象。这是获取连接的代码sn-p

public org.apache.hadoop.hbase.client.Connection getConnection() throws Exception{
        Credentials credentials = GoogleCredentials.fromStream(new FileInputStream("credentials_key.json"));
        ImpersonatedCredentials targetCredentials = ImpersonatedCredentials.create((GoogleCredentials) credentials,
                "your-service-account@gcp-test-project.iam.gserviceaccount.com", null,
                Arrays.asList("https://www.googleapis.com/auth/bigtable.data"), 3600);
        // use your gcp project name and bigtable instance name
        Configuration config = BigtableConfiguration.configure("gcp-test-project", "big-table-instance"); 
        BigtableConfiguration.withCredentials(config,(Credentials)targetCredentials);
        Connection connection = BigtableConfiguration.connect(config);
        return connection;
    }

使用这种方法,只需进行最少的更改,就可以使用现有的 api/实现,使用 HBase API 连接到 BigTable 并可以模拟。请注意,如果不需要模拟(您使用的 json 密钥帐户具有读/写权限),那么您现有的代码库将不需要任何更改。参考https://cloud.google.com/bigtable/docs/hbase-bigtable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多