粗粒度的數據安全的最佳實踐在磚
2017年8月23日 在Beplay体育安卓版本平台的博客
在磚,我們與數百家公司合作,把流血的邊緣在各自的行業。我們想分享模式來保護數據,以便您的組織可以利用最佳實踐而不是重建輪當你板磚的統一的分析平台Beplay体育安卓版本。這篇文章主要是針對那些在他們的組織管理數據。這意味著控製對某些數據的訪問和維護哪些用戶可以訪問哪些數據。
介紹和背景
之前的細節操作上你會做什麼,讓我們確保我們有正確的詞彙,以確保你可以轉身製定這個迅速在你的組織中。
DBFS
的磚文件係統(DBFS)是提供給每一位客戶,由S3支持的文件係統。可伸縮的遠遠超過HDFS,適用於所有集群節點和提供了一個簡單的分布式文件係統接口S3 bucket。
dbutils
dbutils是一個簡單的工具來執行一些磚磚內部相關操作筆記本在Python中或在Scala中。他們提供了大量的S3 bucket命令來幫助您瀏覽;然而,最相關的fs
模塊。
運行下麵的代碼將別名S3 bucket作為掛載點。dbutils.fs。山(“s3a: / / data-science-prototype-bucket”、“/ mnt /原型”)
這是可用在所有集群節點的路徑/ / mnt /原型
。或者說,dbfs: / / mnt /原型
這意味著我們可以寫出DataFrame這條路(和任何目錄下),就像我們寫HDFS,但DBFS將寫入到S3 bucket。
df.write.parquet (“/ mnt /原型/比爾/ recommendation-engine-v1 /”)
簡而言之,DBFS讓S3似乎更像一個文件係統,掛載點做出具體S3 bucket的部分文件係統訪問。這隻是一個別名或快捷方式,允許一個S3物理路徑重路由到另一個邏輯路徑。自然,用戶必須能夠訪問目的地S3 bucket為了訪問數據。
接下來的幾節將介紹不同的方法我們可以安全地訪問S3 bucket。
我的角色和鑰匙
在AWS上有兩種不同的方法,您可以編寫數據上傳到S3。你可以做到的我的角色或者一個訪問密鑰。功能,我的角色和鑰匙可以交替使用。你可以使用這些數據磚集群或結合DBFS使用它們。
當你安裝一個桶一個S3路徑使用DBFS如果路徑是與我有關的角色,然後所有節點和用戶在您的集群作為我的一部分作用會讀和寫訪問,安裝路徑。例如,
dbutils.fs。山(“s3a: / / data-science-prototype-bucket”、“/ mnt /原型”)
隻能讀一個機器和一個我的角色有權訪問特定的桶。
相比之下,當你安裝一個水桶和一個AWS鍵和一個s3路徑,當我們看到以下代碼片段,
dbutils.fs.mount (“s3a: / /關鍵:(電子郵件保護)/”、“/ mnt /原型”)
那麼這個掛載點可以在組織層麵基於訪問控製策略的關鍵。這意味著任何集群能夠讀取(和潛在的寫)數據的掛載點。
粗粒度的控製數據訪問
現在,我們介紹了各種定義的術語,讓我們探索我們可以如何保護我們的數據。所有這些表現在行政級別的訪問控製措施。也就是說,個人用戶不應該設置這些,管理員應該這麼做。
請注意:因為鑰匙可以被複製或妥協,他們不是最安全的方式來訪問數據源。一般來說,你應該支持我角色的鑰匙。
最安全:明確分離的訪問
最安全的設置中可以進行磚是定義我的角色當你創建集群。我的角色,添加授予訪問權限,如讀和寫,S3 bucket。使用集群訪問控製,可以控製哪些用戶可以訪問哪些數據,通過這些我的角色。
S3 bucket是左邊,我們有兩種類型的集群,集群共享自動定量對開發工作有讀寫權限原型設計S3 bucket(和掛載點)和生產集群能讀和寫的生產桶(B)。
它應該自不待言,但下麵的代碼,運行在自動定量或共享磚Serverless集群,
df.write.parquet (“/ mnt /生產/一些/位置”)
會失敗,因為我的角色相關的集群不包括訪問權鬥B。
這是一個常見的模式對於工程組織想要限製在集群級別的訪問希望確保生產數據並不是與原型混合數據。政策對這些我的角色可能是一個例子。
{“版本”:“2012-10-17”,“聲明”:【{“效應”:“允許”,“行動”:【“s3: ListBucket”),“資源”:【“攻擊:aws: s3:::桶/ *”]},{“效應”:“允許”,“行動”:【“s3: propertynames”,“s3: GetObject”,“s3: DeleteObject”),“資源”:【“攻擊:aws: s3:::桶/ *”]}]}
安全:一個協作訪問beplay娱乐ios
另一個相似但略有更不安全的模式更適合數據科學團隊,跨集群合作工作。在這種情況下,一些數據隻讀從所有集群,例如,對於訓練和測試不同的數據科學模型但寫信給那個位置應該是一個享有特權的行動。在此體係結構中,我們將掛載兩個桶的鑰匙。生產桶安裝隻讀權限。當使用DBFS,這些鍵會隱藏(不像使用原始S3)。或者,您也可以指定隻讀訪問我的角色。然而,這不會山,默認情況下,可以在所有集群。你要一定要開始一個集群和一個我的角色。
這意味著任何集群上下麵的代碼就可以了。
spark.read.parquet (“/ mnt /讀/刺激/一些/數據”)
然而,這段代碼會失敗在任何集群。
df.write.parquet (“/ mnt /讀/刺激/一些/數據”)
這是因為S3鍵沒有適當的權限。在此結構中,你會注意到,我們可以以多種方式相同的S3 bucket山;我們甚至可以掛載不同的前綴(目錄)到不同的位置。
寫數據的唯一方法生產桶是使用適當的我的角色和寫的具體位置,因為我們在以下代碼片段。
df.write.parquet (“/ mnt /生產/一些/數據/位置”)
這種模式可以幫助管理員確保生產數據不是由用戶同時還意外地覆蓋使終端用戶能夠使用它更一般。
至少安全:隻有鑰匙
最後訪問模式訪問S3 bucket是隻使用AWS訪問鍵。因為鑰匙可以很容易地複製或破壞,我們不推薦這種磚的數據訪問模式。
結論
在這篇文章中,我們概述了安全的一些最佳實踐和控製訪問您的數據對磚的統一的分析平台Beplay体育安卓版本。DBFS,我們可以掛載相同的桶多個目錄使用AWS密鑰以及我的角色。我們可以使用這些機製優勢,做一些數據通常用於閱讀但不能寫作。
下一篇文章將介紹如何解決細粒度的訪問控製磚企業安全(db)。