3

我必须将我的 MLFlow 工件(使用 Databricks 统一分析)保存到 S3 存储桶,并使用 KMS 密钥进行服务端加密。

我的实例进入 AWS 账户 A,我的 S3 存储桶和我的 KMS 密钥进入账户 B。我无法将我的 KMS 密钥进入我的账户 A。

出于安全原因,我不想使用 DBFS 挂载 S3 存储桶(存储桶可能包含敏感数据,我不想在用户之间共享)。

我必须承担一个 IAM 角色才能访问存储桶,就像我通过 s3a(使用spark.hadoop.fs.s3a.credentialsTypespark.hadoop.fs.s3a.stsAssumeRole.arn参数)访问它一样。

当我使用 s3 创建实验并尝试记录这样的模型时:

import mlflow
import mlflow.sklearn
id_exp = mlflow.create_experiment("/Users/first.last@company.org/Experiment",'s3://s3-bucket-name/')
with mlflow.start_run(experiment_id=id_exp):
  clf_mlf = tree.DecisionTreeClassifier()
  clf_mlf = clf_mlf.fit(X_train, y_train)
  y_pred = clf_mlf.predict(X_test)
  mlflow.sklearn.log_model(clf_mlf, "model", serialization_format='pickle')

我有这个错误:

S3UploadFailedError: Failed to upload /tmp/tmp2yl2olhi/model/conda.yaml to s3-bucket-name//05c17a33a33d46a5ad3cc811a9faf35a/artifacts/model/conda.yaml: An error occurred (KMS.NotFoundException) when calling the PutObject operation: Key 'arn:aws:kms:eu-central-1:account_a_id:key/key_id' does not exist

在访问 S3 之前,我如何告诉 MLFlow 承担角色?

4

0 回答 0