简而言之:
在创建外部舞台时,Snowflake提供加密选项。以下是选项(来自https://docs.snowflake.com/en/sql-reference/sql/create-stage.html)
[ ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '<string>' ] |
[ TYPE = 'AWS_SSE_S3' ] |
[ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] |
[ TYPE = NONE ] ) ]
虽然我们知道AWS_CSE用于客户端加密(其中,在雪花外部阶段分别由客户使用客户拥有的主密钥对数据进行加密/解密),AWS_SSE_S3和AWS_SSE_KMS选项的用途是什么?
详细信息:
在我们的方案中,我们有一个S3存储桶(OUR_S3_BUCKET),其存储桶级别的加密设置为SSE-KMS,创建了一个传入目录并上传了文件covid_data.csv。
S3://OUR_S3_BUCKET/incomig/covid_data.csv.
要访问此文件,我们通过引用S3存储桶创建了存储集成,并在Snowflake中创建了三个外部阶段。
EXTERNAL STAGE 1 (without encryption):
CREATE OR REPLACE STAGE TEST_STG_NOENC
URL='S3://OUR_S3_BUCKET/incomig/'
STORAGE_INTEGRATION = INBOUND_S3;
EXTERNAL STAGE 2 (with AWS_SSE_S3):
CREATE OR REPLACE STAGE TEST_STG_SSE_S3
URL='S3://OUR_S3_BUCKET/incomig/'
STORAGE_INTEGRATION = INBOUND_S3
ENCRYPTION = ( TYPE = 'AWS_SSE_S3');
EXTERNAL STAGE 3 (with AWS_SSE_MKS):
CREATE OR REPLACE STAGE TEST_STG_SSE_KMS
URL='S3://OUR_S3_BUCKET/incomig/'
STORAGE_INTEGRATION = INBOUND_S3
ENCRYPTION = ( TYPE = 'AWS_SSE_KMS' KMS_KEY_ID = 'arn:aws:kms:region:account_no:key/KMS_KEY_ID');
我们可以通过从所有三个外部阶段中进行选择来访问covid_data.csv数据。
select t.$1, t.$2, t.$3
from @<<All 3 external stages>> (file_format => OUR_CSV_FILE_FORMAT ) t;
即使我们的S3存储桶是使用SSE_KMS加密的,我们也可以使用不带加密选项的阶段(TEST_STG_NOENC)访问文件。
在这种情况下,AWS_SSE_S3和AWS_SSE_KMS加密选项的用途是什么?