本文說明如何在 Unity 目錄中建立記憶體認證,以連線到 AWS S3。 Azure Databricks 中的 S3 支援僅限於唯讀。
記憶體認證包含具有雲端記憶體存取權的長期雲端認證。 當您在 Unity 目錄中建立 外部位置 以控管外部記憶體的存取權時,會參考記憶體認證和雲端記憶體路徑。
如需記憶體認證和外部位置的詳細資訊,請參閱 使用 Unity 目錄連線到雲端物件記憶體。
如需 Unity 目錄所支援之其他雲端記憶體選項的詳細資訊,請參閱 Unity 目錄支援的雲端記憶體選項。
備註
可能會套用跨雲端資料傳輸費用。 當您使用無伺服器計算時,會根據 Databricks 數據傳輸和連線原則來計費。
建立記憶體認證
若要建立記憶體認證以存取 S3 貯體,您可以建立 AWS IAM 角色,以授權存取 S3 貯體路徑,並在記憶體認證定義中參考該 IAM 角色。
需求
在 Azure Databricks 中:
- Azure Databricks 工作區已啟用 Unity Catalog。
-
CREATE STORAGE CREDENTIAL在附加至工作區的 Unity Catalog 中繼資料存放庫上的權限。 帳戶管理員和中繼存放區管理員預設具有此權限。
在您的 AWS 帳戶中:
符合下列需求的 S3 儲存桶:
- 請勿在 S3 貯體名稱中使用點表示法(例如
incorrect.bucket.name.notation), 雖然 AWS 允許儲存桶名稱中使用點,但 Azure Databricks 不支援具有點分隔符的 S3 桶。 包含點的桶可能會導致與 Delta Sharing 等功能的相容性問題,因為 SSL 憑證驗證失敗。 如需詳細資訊,請參閱 AWS 貯體命名最佳做法。 - 桶子不能附加上 S3 存取控制清單。
- 請勿在 S3 貯體名稱中使用點表示法(例如
建立 IAM 角色的能力。
步驟 1:建立 IAM 角色
在 AWS 中,建立一個 IAM 角色,讓使用者能夠存取您希望他們訪問的 S3 桶。 此 IAM 角色必須定義在與 S3 儲存桶相同的帳戶中。
小提示
如果您已建立提供此存取權的 IAM 角色,您可以略過此步驟並直接移至 步驟 2:為 Azure Databricks 提供 IAM 角色詳細數據。
建立一個允許存取 S3 桶的 IAM 角色。
角色建立是兩個步驟的過程。 在此步驟中,您將建立角色,並新增 暫時 的信任關係策略和佔位外部 ID,然後在 Azure Databricks 中建立儲存憑證之後加以修改。
建立角色之後,您必須修改信任原則,因為您的角色必須是自行假設(也就是說,它必須將自己設定為信任對象)。 因此,角色必須先存在,才能新增自我假設聲明。 如需自我假設角色的相關信息,請參閱此 Amazon 部落格文章。
這很重要
Databricks 會根據非自我假設的 IAM 角色,封鎖新的和現有的記憶體認證。 如需詳細資訊,請參閱 自我假設角色強制執行原則。
若要建立政策,您必須使用佔位符外部 ID。
使用 自定義信任原則建立IAM角色。
在 [ 自定義信任原則 ] 字段中,貼上下列原則 JSON。
此政策建立跨帳戶信任關係,以便 Unity Catalog 可以代表 Databricks 使用者取得角色,存取儲存區中的資料。 這是由區段中的 ARN
Principal所指定。 它是參考 Databricks 所建立角色的靜態值。政策會將外部標識碼
0000設定為占位符。 您會在稍後的步驟中,將此更新為記憶體認證的外部標識碼。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::414351767826:role/unity-catalog-prod-UCAzureMainRole-1AJ6UQSSB8F0Q"] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "0000" } } } ] }略過許可權原則設定。 您將在稍後的步驟中返回新增。
儲存 IAM 角色。
在與 S3 儲存桶同一帳戶中建立以下 IAM 政策,並替換以下值:
-
<BUCKET>: S3 儲存桶的名稱。 -
<KMS-KEY>:選擇性。 如果已啟用加密,請提供加密 S3 貯體內容的 KMS 金鑰名稱。 如果已停用加密,請移除 IAM 原則的整個 KMS 區段。 -
<AWS-ACCOUNT-ID>:AWS 帳戶的帳戶標識碼(而非您的 Databricks 帳戶)。 -
<AWS-IAM-ROLE-NAME>:您在上一個步驟中建立的 AWS IAM 角色名稱。
此 IAM 原則會賦予讀取和寫入權限。 您也可以建立只授予閱讀權限的原則。 不過,這可能是不必要的,因為您可以將記憶體認證標示為唯讀,而且會忽略此 IAM 角色授與的任何寫入存取權。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": ["arn:aws:s3:::<BUCKET>/*", "arn:aws:s3:::<BUCKET>"], "Effect": "Allow" }, { "Action": ["kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*"], "Resource": ["arn:aws:kms:<KMS-KEY>"], "Effect": "Allow" }, { "Action": ["sts:AssumeRole"], "Resource": ["arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"], "Effect": "Allow" } ] }備註
如果您需要更嚴格的 Unity 目錄 IAM 原則,請連絡 Azure Databricks 帳戶小組以取得協助。
-
在與 S3 存放桶相同的帳戶中設定檔案事件的 IAM 原則。
備註
此步驟是選擇性的,但強烈建議使用。 如果您未授與 Azure Databricks 代表您設定檔案事件的存取權,則必須針對每個位置手動配置檔案事件。 如果您未這麼做,您對於 Databricks 未來可能會發行的重要功能存取權有限。 如需檔案事件的詳細資訊,請參閱 (建議) 啟用外部位置的檔案事件。
IAM 原則會授與 Azure Databricks 許可權,以更新儲存桶的事件通知設定、建立 SNS 主題、建立 SQS 佇列,以及將 SQS 佇列訂閱至 SNS 主題。 這些是使用檔案事件之功能的必要資源。 將
<BUCKET>替換為 S3 儲存桶的名稱。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManagedFileEventsSetupStatement", "Effect": "Allow", "Action": [ "s3:GetBucketNotification", "s3:PutBucketNotification", "sns:ListSubscriptionsByTopic", "sns:GetTopicAttributes", "sns:SetTopicAttributes", "sns:CreateTopic", "sns:TagResource", "sns:Publish", "sns:Subscribe", "sqs:CreateQueue", "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage", "sqs:GetQueueUrl", "sqs:GetQueueAttributes", "sqs:SetQueueAttributes", "sqs:TagQueue", "sqs:ChangeMessageVisibility", "sqs:PurgeQueue" ], "Resource": ["arn:aws:s3:::<BUCKET>", "arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"] }, { "Sid": "ManagedFileEventsListStatement", "Effect": "Allow", "Action": ["sqs:ListQueues", "sqs:ListQueueTags", "sns:ListTopics"], "Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"] }, { "Sid": "ManagedFileEventsTeardownStatement", "Effect": "Allow", "Action": ["sns:Unsubscribe", "sns:DeleteTopic", "sqs:DeleteQueue"], "Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"] } ] }將 IAM 原則附加至 IAM 角色。
在角色的 許可權 標籤中,附加您剛才建立的 IAM 政策。
步驟 2:為 Azure Databricks 提供 IAM 角色詳細數據
在 Azure Databricks 中,登入連結至 Unity Catalog 中繼資料庫的工作區。
您必須擁有
CREATE STORAGE CREDENTIAL許可權。 中繼存放區管理員和帳戶管理員角色都包含此許可權。按兩下
目錄。
點選 外部資料 > 按鈕,進入 憑證 標籤,選擇 建立憑證。
選取 AWS IAM 角色的認證類型。
輸入認證的名稱、授權 Unity Catalog 存取雲端租用戶上儲存位置的 IAM 角色 ARN,以及可選批注。
(選擇性)如果您希望使用者具有使用此記憶體認證之外部位置的唯讀存取權,請在 [進階選項] 中選取 [只讀]。 如需詳細資訊,請參閱 將記憶體認證標示為唯讀。
備註
由於 Azure Databricks 僅提供使用記憶體認證的 S3 貯體唯讀存取權,因此不需要設定此選項。
點擊 建立。
在 儲存憑證建立 對話框中,複製 外部 ID。
按一下完成。
(選擇性)將記憶體認證系結至特定工作區。
根據預設,任何特殊許可權使用者都可以在任何連結至中繼存放區的工作區上使用記憶體認證。 如果您想要只允許從特定工作區存取,請移至 [ 工作區] 索引 標籤並指派工作區。 請參閱 (選擇性) 將記憶體認證指派給特定工作區。
您也可以使用 Databricks Terraform 提供者 和 databricks_storage_credential來建立記憶體認證。
步驟 3:更新 IAM 角色信任關係原則
在 AWS 中,修改信任關係原則以新增記憶體認證的外部標識碼,並讓它成為自我假設。
返回已儲存的 IAM 角色,並移至 [ 信任關係] 索引標籤 。
編輯信任關係原則,如下所示:
將下列 ARN 新增至 「Allow」 語句。 將
<YOUR-AWS-ACCOUNT-ID>和<THIS-ROLE-NAME>替換為您的實際帳戶標識碼和 IAM 角色值。"arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"在語句
"sts:AssumeRole"中,將佔位符外部識別碼更新為您在上一個步驟中複製的儲存憑證的外部識別碼。"sts:ExternalId": "<STORAGE-CREDENTIAL-EXTERNAL-ID>"您的政策現在應該如下所示,已更新的替換文字將使用您儲存憑證的外部 ID、帳戶 ID 和 IAM 角色值:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::414351767826:role/unity-catalog-prod-UCAzureMainRole-1AJ6UQSSB8F0Q", "arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<STORAGE-CREDENTIAL-EXTERNAL-ID>" } } } ] }
步驟 4:驗證記憶體認證
在步驟 3:更新 IAM 角色信任關係政策中對 IAM 角色信任政策進行變更之後,請確認您的 IAM 角色已正確設定作為儲存憑證。
備註
若要驗證設定,您必須是記憶體認證擁有者、中繼存放區系統管理員,或您具有 CREATE EXTERNAL LOCATION 記憶體認證的許可權。
在 Azure Databricks 中,登入至與 Metastore 相連的工作區。
按兩下
目錄。
點選 外部資料 > 按鈕,然後前往 憑證 標籤。
或者,您可以按一下位於目錄窗格頂端的
,然後選取 認證。
選取您要驗證的記憶體認證。
按兩下
。如果有任何檢查失敗,請返回 步驟 3:更新 IAM 角色信任關係原則 ,並檢閱 IAM 角色的信任原則以正確設定它們。
驗證記憶體認證時,您可以使用它來 建立外部位置。
自我設定角色執行政策
在 2023 年 6 月 30 日,AWS 更新了其 IAM 角色信任原則,要求 IAM 角色必須明確地信任自身的 STS:AssumeRole 呼叫。 因此,Databricks 要求記憶體認證的 AWS IAM 角色必須自我假設。 如需詳細資訊,請參閱此 社群部落格文章。
在 2025 年 1 月 20 日,Databricks 開始封鎖使用具有非自我假設 IAM 角色的現有記憶體認證。 這項禁令可能會中斷使用非自我假設認證執行的工作負載和作業。
若要檢查記憶體認證的 AWS IAM 角色是否為自我假設,請遵循 步驟 4:驗證記憶體認證中的指示。 如果 自我假設角色 檢查失敗,請重新檢視 步驟 3:更新 IAM 角色信任關係原則,並將 IAM 角色的信任原則重新設定為信任本身。
如果您在想要檢查的中繼存放區中有多個記憶體認證,請使用下列筆記本來驗證中繼存放區中所有記憶體認證的自我假設功能:
自我假設記憶體認證驗證筆記本
(選擇性)將記憶體認證指派給特定工作區
根據預設,記憶體認證可從中繼存放區中的所有工作區存取。 這表示如果使用者已獲授與該儲存憑證的許可權(例如 CREATE EXTERNAL LOCATION),他們可以從附加至中繼存放區的任何工作區運用該許可權。 如果您使用工作區來隔離用戶數據存取,您可能只想要允許從特定工作區存取記憶體認證。 這項功能稱為工作區系結或記憶體認證隔離。 如需指示,請參閱 (選擇性)將記憶體認證指派給特定工作區。
局限性
後續步驟
檢視、更新、刪除及授與其他使用者使用記憶體認證的許可權。 請參閱 管理記憶體認證。
使用記憶體認證定義外部位置。 如需相關資訊,請參閱建立外部位置以將雲端儲存連線到 Azure Databricks。