Hi! I'm trying to figure out if/how it's possible ...
# flyte-v1-support
c
Hi! I'm trying to figure out if/how it's possible to setup flyte for multi-tenancy, ie. isolate tenants workloads in separate namespaces, without sharing/mounting any global secret, thus relying only on tenant-scoped secrets. Ideally tenant workloads would run under tenant namespace. While there seems to be a way to have propellers per tenants, thus enabling true parallelism, IIUC there doesn't seem to be any way to isolate metadata per tenant, since there's a single s3 configuration shared by admin and all propellers/task executions. Which means sharing the bucket secret with all tenants, which wouldn't fit our requirements. Has anybody any experience/recommendations to share? Thanks a lot
c
You can control namespaces executions end up with this: https://docs-legacy.flyte.org/en/v1.13.2/deployment/configuration/generated/flyteadmin_config.html#section-namespace-mapping by default its project-domain
You can isolate metadata per tenant, just need to use different credentials with tenant scoped bucket access
c
There's only a single bucket that I can configure right?
You mean you're configuring your bucket with multiple credentials with scoped access in the bucket for each?
If this is what you mean it's a excellent idea, unfortunately our buckets do not support that
c
Its kinda gross but you can configure buckets per project using flytectl. Again not really well documented but
Copy code
flytectl update workflow-execution-config --attrFile ${cfg}
c
Tell me more plz 🙂
c
c
Thanks for the pointer. Does that mean I wouldn't have to share the global bucket config with execution pods?
c
There are two buckets. There is a metadata bucket which I believe is global and then there is the data plane bucket which can be project specific.
c
That's definitely good news if that means the data plane bucket is the only one used by the execution pod, it can user owned
c
S3 perms generally look like this for a tenant service account.
Copy code
{
        # Allow reading and writing to specified S3 buckets.
        Effect = "Allow"
        Action = [
          "s3:AbortMultipartUpload",
          "s3:CreateMultipartUpload",
          "s3:CompleteMultipartUpload",
          "s3:GetObject",
          "s3:HeadObject",
          "s3:ListBucket",
          "s3:ListBucketMultipartUploads",
          "s3:ListParts",
          "s3:PutObject",
          "s3:UploadPart",
          "s3:UploadPartCopy",
        ],
        Resource = [
          "arn:aws:s3:::flyte-data-plane-<project>-<domain>",
          "arn:aws:s3:::flyte-data-plane-<project>-<domain>/*",
          "arn:aws:s3:::flyte-metadata-prod",
          "arn:aws:s3:::flyte-metadata-prod/*",
        ]
      },
c
I see, yet the tenant service account needs access to the global bucket, right?
c
Global metadata yeah
I'm sure that could be changed with some pull request but I think it is a current limitation
c
ok thank you so much for the info. I will dig into the links you provided tomorrow and if you don't mind will follow up with more questions 😉
👍 1
❤️ 1
Morning @clean-glass-36808 I'm want update the workflow execution config and for that I'm trying to get the actual config but both:
Copy code
flytectl get workflow_execution_config -p <project> -d <domain>
flytectl get workflow_execution_config -p <project> -d <domain> --gen
fail with an
attribute not found
error. How am I supposed to do that? Thanks
Copy code
{"json":{"src":"auth_interceptor.go:213"},"level":"debug","msg":"Request failed due to [rpc error: code = NotFound desc = Resource [{Project:test Domain:development Workflow: LaunchPlan: ResourceType:WORKFLOW_EXECUTION_CONFIG}] not found]. If it's an unauthenticated error, we will attempt to establish an authenticated context.","ts":"2025-11-19T10:54:38-05:00"}
Error: attribute not found
{"json":{"src":"main.go:13"},"level":"error","msg":"attribute not found","ts":"2025-11-19T10:54:38-05:00"}
Managed to do it by crafting a file by hand. Do you know what data is stored in the main bucket and what data goes in the project scoped bucket? Thanks
Will ask the question as a top level one btw