Apache Sentry API для управления политиками
Я ищу способ определения политики для роли прагматично. Есть ли API для Sentry? Либо ОТДЫХ / ЯВА?
Любая документация или ссылка будет отличной помощью?
2 ответа
Sentry предоставляет клиентский интерфейс Apache Thrift, здесь вы можете найти определение Thrift API API sentry_policy_service.thrift. Вы можете использовать его для генерации исходного кода клиента.
Кроме того, Cloudera выпускает скомпилированные клиентские библиотеки, совместимые с Sentry Service, распространяемые как часть CDH, то есть:
<dependency>
<groupId>org.apache.sentry</groupId>
<artifactId>sentry-provider-db</artifactId>
<version>1.5.1-cdh5.5.1</version>
</dependency>
доступно в репозитории Maou Cloudera:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
</project>
Вот пример программы, использующей "sentry-provider-db" для получения сведений о разрешениях для данной базы данных кустов (эта программа может не определять политику для роли, но эта программа может дать вам представление об использовании других методов для достижения тот)
public class ConnectSentry {
public static void main(String[] args) throws IOException, SentryUserException, LoginException {
String userName=args[0];
String databaseName=args[1];
Configuration conf = new Configuration();
conf.set(ClientConfig.SERVER_RPC_ADDRESS, "servernamexx.domain");
conf.set(ClientConfig.SERVER_RPC_PORT, "8038"); //default port is 8038, verify this setting in configuration of Sentry
System.setProperty("javax.security.auth.login.name", "userName");
System.setProperty("java.security.auth.login.config", "login.conf");
System.setProperty("java.security.krb5.conf", "krb5.conf");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
System.setProperty("sun.security.krb5.debug", "false");
conf.set(ServerConfig.PRINCIPAL, "sentry/<sentry-server-principal>");
SentryPolicyServiceClientDefaultImpl sentryPolicyServiceClientDefaultImpl = new SentryPolicyServiceClientDefaultImpl(
conf);
sentryPolicyServiceClientDefaultImpl.listUserRoles(userName).
forEach(rolesentry -> {//System.out.println(rolesentry.getRoleName());
try {
sentryPolicyServiceClientDefaultImpl.listAllPrivilegesByRoleName(userName, rolesentry.getRoleName()).forEach(
allpriv ->{
String db = allpriv.getDbName();
String permission=allpriv.getAction();
if (db.equals(args[1]))
{
System.out.println("found database and permission is "+permission);
}
}
);
} catch (SentryUserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
}
}
Обратитесь к программе ниже, чтобы получить представление о доступных методах
Ниже методы и класс могут быть полезны для вас:
открытый класс SentryPolicyServiceClientDefaultImpl реализует SentryPolicyServiceClient
public синхронизированный void importPolicy(Карта >> policyFileMappingData, Строка requestorUserName, логическое значение isOverwriteRole)
Оставьте комментарий, если вам нужен пример krb5.conf, login.conf и pom.xml