[ 
https://issues.apache.org/jira/browse/FLINK-3930?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15632707#comment-15632707
 ] 

ASF GitHub Bot commented on FLINK-3930:
---------------------------------------

Github user mxm commented on a diff in the pull request:

    https://github.com/apache/flink/pull/2425#discussion_r86340045
  
    --- Diff: 
flink-yarn/src/main/java/org/apache/flink/yarn/cli/FlinkYarnSessionCli.java ---
    @@ -788,75 +719,125 @@ private void logAndSysout(String message) {
                }
        }
     
    -   public static File getYarnPropertiesLocation(Configuration conf) {
    -           String defaultPropertiesFileLocation = 
System.getProperty("java.io.tmpdir");
    -           String currentUser = System.getProperty("user.name");
    -           String propertiesFileLocation =
    -                   
conf.getString(ConfigConstants.YARN_PROPERTIES_FILE_LOCATION, 
defaultPropertiesFileLocation);
    -
    -           return new File(propertiesFileLocation, YARN_PROPERTIES_FILE + 
currentUser);
    +   public static File getYarnPropertiesLocation() {
    +           String path = System.getProperty("user.home") + File.separator 
+ YARN_APP_INI;
    +           File stateFile;
    +           try {
    +                   stateFile = new File(path);
    +                   if(!stateFile.exists()) {
    +                           stateFile.createNewFile();
    +                   }
    +           } catch(IOException e) {
    +                   throw new RuntimeException(e);
    +           }
    +           return stateFile;
        }
     
    -   public static void persistAppState(String appId, String cookie) {
    -           if(appId == null || cookie == null) {
    -                   return;
    +   public static void persistAppState(YarnAppState appState) {
    +
    +           final String appId = appState.getApplicationId();
    +           final String parallelism = appState.getParallelism();
    +           final String dynaProps = appState.getDynamicProperties();
    +           final String cookie = appState.getCookie();
    +
    +           if(appId == null) {
    +                   throw new RuntimeException("Missing application ID from 
Yarn application state");
                }
    -           String path = System.getProperty("user.home") + File.separator 
+ fileName;
    -           LOG.debug("Going to persist cookie for the appID: {} in {} ", 
appId, path);
    +
    +           String path = getYarnPropertiesLocation().getAbsolutePath();
    +
    +           LOG.debug("Going to persist Yarn application state: {} in {}", 
appState,path);
    +
                try {
    -                   File f = new File(path);
    -                   if(!f.exists()) {
    -                           f.createNewFile();
    -                   }
                        HierarchicalINIConfiguration config = new 
HierarchicalINIConfiguration(path);
    +
                        SubnodeConfiguration subNode = config.getSection(appId);
    -                   if (subNode.containsKey(cookieKey)) {
    -                           String errorMessage = "Secure Cookie is already 
found in "+ path + " for the appID: "+ appId;
    -                           LOG.error(errorMessage);
    -                           throw new RuntimeException(errorMessage);
    +                   if(!subNode.isEmpty()) {
    +                           throw new RuntimeException("Application with ID 
" + appId + "already exists");
                        }
    -                   subNode.addProperty(cookieKey, cookie);
    +
    +                   subNode.addProperty(YARN_PROPERTIES_PARALLELISM, 
parallelism);
    +                   
subNode.addProperty(YARN_PROPERTIES_DYNAMIC_PROPERTIES_STRING, dynaProps);
    +                   subNode.addProperty(YARN_PROPERTIES_SECURE_COOKIE, 
cookie);
    +
    +                   //update latest entry section with the most recent APP 
Id
    +                   config.clearTree(YARN_LATEST_ENTRY_SECTION_NAME);
    +                   SubnodeConfiguration activeAppSection = 
config.getSection(YARN_LATEST_ENTRY_SECTION_NAME);
    +                   activeAppSection.addProperty(YARN_APPLICATION_ID_KEY, 
appId);
    +
                        config.save();
    -                   LOG.debug("Persisted cookie for the appID: {}", appId);
    +                   LOG.debug("Persisted Yarn App state: {}", appState);
                } catch(Exception e) {
    -                   LOG.error("Exception occurred while persisting app 
state for app id: {}", appId, e);
                        throw new RuntimeException(e);
                }
        }
     
    -   public static String getAppSecureCookie(String appId) {
    +   public static YarnAppState retrieveMostRecentYarnApp() {
    +           String path = getYarnPropertiesLocation().getAbsolutePath();
    +           LOG.debug("Going to fetch app state from {}", path);
    +           try {
    +                   HierarchicalINIConfiguration config = new 
HierarchicalINIConfiguration(path);
    +                   SubnodeConfiguration subNode = 
config.getSection(YARN_LATEST_ENTRY_SECTION_NAME);
    +                   String appId = 
subNode.getString(YARN_APPLICATION_ID_KEY, null);
    +                   if(null != appId) {
    +                           return retrieveYarnAppState(appId);
    +                   }
    +           } catch(Exception e) {
    +                   throw new RuntimeException(e);
    +           }
    +           return null;
    +   }
    +
    +   public static YarnAppState retrieveYarnAppState(String appId) {
    --- End diff --
    
    You could pass the config here which would avoid re-creating it in this 
method.


> Implement Service-Level Authorization
> -------------------------------------
>
>                 Key: FLINK-3930
>                 URL: https://issues.apache.org/jira/browse/FLINK-3930
>             Project: Flink
>          Issue Type: New Feature
>          Components: Security
>            Reporter: Eron Wright 
>            Assignee: Vijay Srinivasaraghavan
>              Labels: security
>   Original Estimate: 672h
>  Remaining Estimate: 672h
>
> _This issue is part of a series of improvements detailed in the [Secure Data 
> Access|https://docs.google.com/document/d/1-GQB6uVOyoaXGwtqwqLV8BHDxWiMO2WnVzBoJ8oPaAs/edit?usp=sharing]
>  design doc._
> Service-level authorization is the initial authorization mechanism to ensure 
> clients (or servers) connecting to the Flink cluster are authorized to do so. 
>   The purpose is to prevent a cluster from being used by an unauthorized 
> user, whether to execute jobs, disrupt cluster functionality, or gain access 
> to secrets stored within the cluster.
> Implement service-level authorization as described in the design doc.
> - Introduce a shared secret cookie
> - Enable Akka security cookie
> - Implement data transfer authentication
> - Secure the web dashboard



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to