wip: add http proxy handling

This commit is contained in:
Isabella Siu
2025-12-18 16:44:55 -05:00
parent 156a6f1375
commit cf36cc8c90
13 changed files with 102 additions and 39 deletions
@@ -50,12 +50,13 @@ type PluginInstanceCfg struct {
PluginSettings setting.PluginSettings
AWSAllowedAuthProviders []string
AWSAssumeRoleEnabled bool
AWSExternalId string
AWSSessionDuration string
AWSListMetricsPageLimit string
AWSForwardSettingsPlugins []string
AWSAllowedAuthProviders []string
AWSAssumeRoleEnabled bool
AWSPerDatasourceHTTPProxyEnabled bool
AWSExternalId string
AWSSessionDuration string
AWSListMetricsPageLimit string
AWSForwardSettingsPlugins []string
Azure *azsettings.AzureSettings
AzureAuthEnabled bool
@@ -107,6 +108,7 @@ func ProvidePluginInstanceConfig(cfg *setting.Cfg, settingProvider setting.Provi
PluginSettings: extractPluginSettings(settingProvider),
AWSAllowedAuthProviders: allowedAuth,
AWSAssumeRoleEnabled: aws.KeyValue("assume_role_enabled").MustBool(cfg.AWSAssumeRoleEnabled),
AWSPerDatasourceHTTPProxyEnabled: aws.KeyValue("per_datasource_http_proxy_enabled").MustBool(cfg.AWSPerDatasourceHTTPProxyEnabled),
AWSExternalId: aws.KeyValue("external_id").Value(),
AWSSessionDuration: aws.KeyValue("session_duration").Value(),
AWSListMetricsPageLimit: aws.KeyValue("list_metrics_page_limit").Value(),
@@ -109,6 +109,9 @@ func (p *EnvVarsProvider) awsEnvVars(pluginID string) []string {
if !p.cfg.AWSAssumeRoleEnabled {
variables = append(variables, p.envVar(awsds.AssumeRoleEnabledEnvVarKeyName, "false"))
}
if p.cfg.AWSPerDatasourceHTTPProxyEnabled {
variables = append(variables, p.envVar(awsds.PerDatasourceHTTPProxyEnabledEnvVarKeyName, "true"))
}
if len(p.cfg.AWSAllowedAuthProviders) > 0 {
variables = append(variables, p.envVar(awsds.AllowedAuthProvidersEnvVarKeyName, strings.Join(p.cfg.AWSAllowedAuthProviders, ",")))
}
@@ -65,6 +65,9 @@ func (s *RequestConfigProvider) PluginRequestConfig(ctx context.Context, pluginI
if !s.cfg.AWSAssumeRoleEnabled {
m[awsds.AssumeRoleEnabledEnvVarKeyName] = "false"
}
if s.cfg.AWSPerDatasourceHTTPProxyEnabled {
m[awsds.PerDatasourceHTTPProxyEnabledEnvVarKeyName] = "true"
}
if len(s.cfg.AWSAllowedAuthProviders) > 0 {
m[awsds.AllowedAuthProvidersEnvVarKeyName] = strings.Join(s.cfg.AWSAllowedAuthProviders, ",")
}
@@ -544,6 +544,7 @@ func TestRequestConfigProvider_PluginRequestConfig_aws(t *testing.T) {
}
cfg.AWSAssumeRoleEnabled = false
cfg.AWSPerDatasourceHTTPProxyEnabled = true
cfg.AWSAllowedAuthProviders = []string{"grafana_assume_role", "keys"}
cfg.AWSExternalId = "mock_external_id"
cfg.AWSSessionDuration = "10m"
@@ -554,17 +555,19 @@ func TestRequestConfigProvider_PluginRequestConfig_aws(t *testing.T) {
t.Run("uses the aws settings for an AWS plugin", func(t *testing.T) {
require.Subset(t, p.PluginRequestConfig(context.Background(), "cloudwatch", nil), map[string]string{
"AWS_AUTH_AssumeRoleEnabled": "false",
"AWS_AUTH_AllowedAuthProviders": "grafana_assume_role,keys",
"AWS_AUTH_EXTERNAL_ID": "mock_external_id",
"AWS_AUTH_SESSION_DURATION": "10m",
"AWS_CW_LIST_METRICS_PAGE_LIMIT": "100",
"AWS_AUTH_AssumeRoleEnabled": "false",
"AWS_AUTH_PerDatasourceHTTPProxyEnabled": "true",
"AWS_AUTH_AllowedAuthProviders": "grafana_assume_role,keys",
"AWS_AUTH_EXTERNAL_ID": "mock_external_id",
"AWS_AUTH_SESSION_DURATION": "10m",
"AWS_CW_LIST_METRICS_PAGE_LIMIT": "100",
})
})
t.Run("does not use the aws settings for a non-aws plugin", func(t *testing.T) {
m := p.PluginRequestConfig(context.Background(), "", nil)
require.NotContains(t, m, "AWS_AUTH_AssumeRoleEnabled")
require.NotContains(t, m, "AWS_AUTH_PerDatasourceHTTPProxyEnabled")
require.NotContains(t, m, "AWS_AUTH_AllowedAuthProviders")
require.NotContains(t, m, "AWS_AUTH_EXTERNAL_ID")
require.NotContains(t, m, "AWS_AUTH_SESSION_DURATION")
@@ -576,11 +579,12 @@ func TestRequestConfigProvider_PluginRequestConfig_aws(t *testing.T) {
p = NewRequestConfigProvider(cfg, &fakeSSOSettingsProvider{})
require.Subset(t, p.PluginRequestConfig(context.Background(), "test-datasource", nil), map[string]string{
"AWS_AUTH_AssumeRoleEnabled": "false",
"AWS_AUTH_AllowedAuthProviders": "grafana_assume_role,keys",
"AWS_AUTH_EXTERNAL_ID": "mock_external_id",
"AWS_AUTH_SESSION_DURATION": "10m",
"AWS_CW_LIST_METRICS_PAGE_LIMIT": "100",
"AWS_AUTH_AssumeRoleEnabled": "false",
"AWS_AUTH_PerDatasourceHTTPProxyEnabled": "true",
"AWS_AUTH_AllowedAuthProviders": "grafana_assume_role,keys",
"AWS_AUTH_EXTERNAL_ID": "mock_external_id",
"AWS_AUTH_SESSION_DURATION": "10m",
"AWS_CW_LIST_METRICS_PAGE_LIMIT": "100",
})
})
}