我必须将我的 MLFlow 工件(使用 Databricks 统一分析)保存到 S3 存储桶,并使用 KMS 密钥进行服务端加密。
我的实例进入 AWS 账户 A,我的 S3 存储桶和我的 KMS 密钥进入账户 B。我无法将我的 KMS 密钥进入我的账户 A。
出于安全原因,我不想使用 DBFS 挂载 S3 存储桶(存储桶可能包含敏感数据,我不想在用户之间共享)。
我必须承担一个 IAM 角色才能访问存储桶,就像我通过 s3a(使用spark.hadoop.fs.s3a.credentialsType
和spark.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 承担角色?