potiuk commented on PR #26162:
URL: https://github.com/apache/airflow/pull/26162#issuecomment-1243061529

   > > Wrong box to open :). This is not part of it.
   > 
   > But it do almost the same the same thing that `PostgresHook.get_iam_token` 
and `MySqlHook.get_iam_token` - grant access by use AWS IAM auth method. This 
methods exists for very long time (might be before even providers exists)
   > 
   > In case of 
`airflow.providers.amazon.aws.hooks.base_aws.BaseSessionFactory._get_google_identity_token_loader`
 it use GCP to auth in AWS. So if apply the same logic this method should live 
in Google Provider rather than Amazon Provider.
   
   Yes. the difference is WHAT is doing it. If this is the code that is under 
stewardship of AWS, they choose to do it and maintain it. In Postgres there is 
no-one to maintain it.  This is the main criteria. You are using wrong 
comparision. It's not what code it is, but who is interested in maintainig it 
and reacting when there is a problem.
   
   To put it simple. If there is in the future a problem with library of Google 
that will cause a problem with this operator - the AWS people will have to fix 
it. and if - for example - it causes us a conflict  with other providers (say 
Google) we might choose not to release AWS provider until AWS people will fix 
the conflict. Plain and simple. AWS is impacted, they are fixing it. With 
spltting providers, I want AWS people to subscribe to aws repo and be aware of 
all the things they will need to fix.
   
   When Google provider uses AWS for authentication - it still holds. It's the 
Google team that should fix any problems that might undermine their way of 
interfacing with AWS.
   
   With Postgres, the situation is different. If the same problem happens with 
Postgres provider, It will hold Postgres provider from being released.  So the 
problem with AWS will hold a new release of Postgres provider. This is not 
something we want.
   
   Again - your parallells are not entirely correct - it's not "what code is 
needed". I agree it is similar code. But IMHO it does not matter. What matters 
is  "who has the incentive to fix it if it is broken",  This is fundamental 
difference. Think "human", "team", "responsibility", "governance" not "code".
   
   > In the ideal world auth to different hooks should be pluggable. In this 
case user might be auth to Postgres by different ways (Explicit Credentials, 
pgpass, GSAPI, AWS IAM, etc) the same way also might work with Docker 
Registries (Explicit Credentials, ECR Get Token) as well as additional methods 
to auth into AWS Cloud.
   
   I don't think it's an "ideal world" it's one of the choices. Right now in 
Airflow authentication is very closely connected to the Connection and 
corresponding Hook. Basically Auth is THE ONLY functionality that Hook provides 
on top of most of the integrations.  You give it a connection id and it gives 
you back some form of a client that you can use. Other than that hooks are not 
very useful - they are passing through parameters to underlying "clients". Qute 
often,  particular Hook returns you directly a Python client that you could 
instantiate and use yourself. The actual "benefit" of using Hooks is that you 
can pass it the connection id. That's pretty much it. And this is big and 
important feature.
   
   Currently, the way to implement different authentications it is through 
inheritance (if we want to do handling at the Hook level). If you need an 
extended Hook with new authentication, you extend one that is there and add the 
authentication. This fits very well Airflow's model - where Hook is a class and 
it is extendable and can be passed a connection id. Postgres Hook should get 
postgres connection id and so on. If you want to implement Postgres Hook with 
the conneciton Id from Google, you should implement a GooglePostgresHook 
"child" that can take Google Connection as initialization param. Or if you want 
to use AWS authentication - implement an AWSPostgres Hook "child" that can take 
"AWS connection"  as initialization param.  And this is the model used 
currently. This is a different model than "pluggable" authentication -  where 
you "extend" rather tha "inject" authentication.
   
   We might have different view on which model is better. I personally think 
the "pluggable authentication" is far more difficult to make into a generic 
solution that is applicable to multiple types of hook, I'd say airflow's model 
where you extend functionality and add authentication as you need it in "child" 
class is much better - as it saves you to define a common "authenticaiton" 
layer - that would have to handle a lot of complexities - a good example is 
impersonation chain from GCP which is very specific for GCP, and implementing 
common "authentication" model which would handle, GCP, Azure, AWS, Databricks, 
and big number of other options - via HTTP, proprietary database connection 
types, OpenID, Oauth etc is far more complex and error-prone. 
   
   But no-matter what our thinking on more/less complex is - the "Extension" 
model is what is being used in Airflow.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to