本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Step Functions 數中的靜態資料加密
閱讀部落格
閱讀有關使用客戶管理金鑰加強資料安全性的客戶管理 AWS KMS
AWS Step Functions 一律使用透明的伺服器端加密來加密靜態資料。預設情況下,靜態資料加密可減少保護敏感資料所涉及的營運額外負荷和複雜性。您可以建置符合嚴格加密合規性和法規需求的安全敏感應用程式。
雖然您無法停用此層加密或選取替代加密類型,但是您可以在建立狀態機器和活動資源時選擇客戶管理的金鑰,在現有 AWS 擁有的加密金鑰上新增第二層加密:
-
客戶受管金鑰 — Step Functions 支援使用您建立、擁有和管理的對稱客戶管理金鑰,以針對現有 AWS 擁有的加密新增第二層加密。您可以完全控制此層加密,因此能執行以下任務:
-
建立和維護金鑰政策
-
建立和維護IAM政策和補助金
-
啟用和停用金鑰政策
-
輪換金鑰密碼編譯資料
-
新增標籤
-
建立金鑰別名
-
安排金鑰供刪除
如需詳細資訊,請參閱AWS Key Management Service 開發人員指南中的客戶管理金鑰。
-
您可以使用客戶管理的 AWS Step Functions 狀態機器和活動金鑰來加密資料。您可以在建立或更新狀態機器時以及建立活動時,設定對稱 AWS KMS 金鑰和資料金鑰重複使用期間。執行歷史記錄和狀態機器定義將使用應用於狀態機的密鑰進行加密。活動輸入將使用應用於活動的密鑰進行加密。
使用客戶管理的 AWS KMS 金鑰,您可以保護包含受保護醫療資訊 (PHI) 的客戶資料,防止未經授權的存取。Step Functions 與整合 CloudTrail,因此您可以在事件歷史記錄中檢視和稽核主 CloudTrail 控台中最近的事件。
如需詳細資訊 AWS KMS,請參閱「什麼是 AWS Key Management Service?」
注意
Step Functions 會自動使用 AWS 擁有的金鑰免費啟用靜態加密。但是,使用客戶管理的金鑰時會 AWS KMS 收取費用。如需定價的詳細資訊,請參閱 AWS Key Management Service 定價。
使用客戶管理的金鑰加密
Step Functions 會使用客戶管理的 AWS KMS 金鑰解密有效負載資料,然後再將其傳送至其他服務以執行任務。資料在傳輸過程中會使用傳輸層安全性 (TLS) 加密。
從整合式服務傳回資料時,Step Functions 會使用您的客戶管理 AWS KMS 金鑰加密資料。您可以使用相同的金鑰,在許多 AWS 服務之間一致地套用加密。
您可以將客戶管理的金鑰與下列資源搭配使用:
-
狀態機器-標準和快速工作流程類型
-
活動
您可以輸入金鑰 ID 來指定資料KMS金鑰,Step Functions 用來加密您的資料。
-
KMSkey ID — AWS KMS 客戶管理金鑰的金鑰識別碼,形式為金鑰 ID、金鑰ARN、別名或別名ARN。
使用客戶管理的金鑰建立狀態機
先決條件:您的使用者或角色必須具有DescribeKey
和的 AWS KMS 權限,才能使用客戶管理的 AWS KMS 金鑰建立狀態機器GenerateDataKey
。
您可以透過或透過 AWS CloudFormation 資源佈建基礎結構API,在 AWS 主控台中執行下列步驟。(示CloudFormation 例將在本指南後面介紹。)
步驟 1:建立 AWS KMS 金鑰
您可以使用 AWS KMS 主控台或 AWS KMS APIs建立對稱的客戶管理金鑰。
建立對稱客戶受管金鑰
請依照《AWS Key Management Service 開發人員指南》中建立對稱客戶受管金鑰的步驟進行。
注意
可選:建立金鑰時,您可以選擇金鑰管理員。選取的使用者或角色將獲得管理金鑰的存取權,例如透過啟用或停用金鑰API。您也可以選擇「金鑰使用者」。這些使用者或角色將被授與在密碼編譯作業中使用 AWS KMS 金鑰的能力。
步驟 2:設定 AWS KMS 金鑰政策
金鑰政策會控制客戶受管金鑰的存取權限。每個客戶受管金鑰都必須只有一個金鑰政策,其中包含決定誰可以使用金鑰及其使用方式的陳述式。在建立客戶受管金鑰時,可以指定金鑰政策。如需詳細資訊,請參閱AWS Key Management Service 開發人員指南中的管理客戶受管理金鑰的存取。
以下是來自主控台的 AWS KMS 金鑰原則範例,沒有金鑰管理員或金鑰使用者:
{ "Version": "2012-10-17", "Id": "key-consolepolicy-1", "Statement": [ { "Sid": "Enable IAM User Permissions for the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" } ] }
請參閱開AWS Key Management Service 發人員指南,瞭解如何在政策中指定權限以及對金鑰存取進行疑難排解
步驟 3:(選擇性) 新增金鑰原則以加密 CloudWatch 記錄
Step Functions 集成 CloudWatch 了用於日誌記錄和監控。您可以選擇加密傳送至 CloudWatch 記錄的資料。若要使用加密記錄,您必須在狀態機器金鑰原則中提供對記錄傳遞服務的存取權,才能 AWS KMS 執行動作。您可以使用狀態機器金鑰加密記錄群組,也可以為記錄群組特別選擇另一個金鑰 (例如,「記錄群組金鑰」)。
若要啟用狀態機器的加密 CloudWatch 記錄整合,您必須將下列項目新增至您的 AWS KMS 金鑰原則:
{ "Id": "key-consolepolicy-logging", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable log service for a single log group", "Effect": "Allow", "Principal": { "Service": "logs.
region
.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region
:account-id
:log-group:log-group-name
" } } } ] }
注意
此Condition
區段會將 AWS KMS 金鑰限制為單一記錄群組ARN。
您也必須啟用記錄服務傳遞,才能與下列金鑰原則整合:
{ "Sid": "Enable log service delivery for integrations", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "kms:Decrypt*", "Resource": "*" }
注意
請參閱CloudWatch 記錄文件,進一步了解如何設定記錄群組 AWS KMS 金鑰的權限。
步驟 4:建立狀態機
建立金鑰並設定原則之後,您可以使用它們金鑰來建立新的狀態機器。
建立狀態機時,請選擇 [其他組態],然後選擇使用客戶管理的金鑰加密。然後,您可以選取金鑰,並將資料金鑰重複使用期間設定為 1 分鐘至 15 分鐘。
或者,您可以設定記錄層級並選擇使用 AWS KMS 金鑰加密日誌群組來啟用記錄。
注意
您只能在 Step Functions 主控台中的新記錄群組上啟用加密。若要瞭解如何將 AWS KMS 金鑰與現有的記錄群組產生關聯,請參閱將 AWS KMS 金鑰與記錄群組產生關聯。
步驟 5:調用使用密 AWS KMS 鑰加密的狀態機
您可以像往常一樣調用加密的狀態機器,並且您的數據將使用客戶託管的密鑰進行加密。
若要使用客戶管理的金鑰開始標準工作流程和非同步 Express 工作流程的執行,您的執行角色需要kms:Decrypt
和kms:GenerateDataKey
權限。同步快速執行的執行角色需要kms:Decrypt
。當您在主控台中建立狀態機並選擇建立新角色時,系統會自動為您包含這些權限。
使用客戶管理的金鑰建立活動
使用客戶管理的金鑰建立 Step Functions 活動類似於使用客戶管理的金鑰建立狀態機器。使用客戶管理的 AWS KMS 金鑰建立活動之前,您的使用者或角色只需要具有的 AWS KMS 權限DescribeKey
。在建立活動期間,您可以選擇金鑰並設定加密組態參數。
請注意,Step Functions 活動資源保持不變。您無法更新現有活動ARN的活動;您必須建立新的活動資源。encryptionConfiguration
活動API端點的呼叫者必須擁有使用 AWS KMS 金鑰成功建立活動的kms:DescribeKey
權限。
在 Activity Task 上啟用客戶受管金鑰加密時,狀態機器執行角色將需要活動金鑰kms:GenerateDataKey
和kms:Decrypt
權限。如果您是從 Step Functions 主控台建立此狀態機器,則 auto 角色建立功能會新增這些權限。
使用條件縮小 AWS KMS 權限原則的範圍
您可以在金鑰政策和IAM政策中使用加密內容,conditions
以控制對稱客戶管理金鑰的存取。若要限制代表特定角色從 Step Functions 要求使用 AWS KMS 金鑰,您可以使用kms:ViaService
條件。
使用加密內容設定範圍
加密內容是一組選用的金鑰值對,包含資料的其他相關內容資訊。
AWS KMS 使用加密內容作為其他驗證資料,以支援已驗證的加密。當您在加密資料的要求中包含加密內容時,會將加密內容 AWS KMS 繫結至加密的資料。若要解密資料,您必須在請求中包含相同的加密內容。
Step Functions 在密 AWS KMS 碼編譯作業中提供加密內容,其中金鑰aws:states:stateMachineArn
適用aws:states:activityArn
於狀態機器或活動,而值為資源 Amazon 資源名稱 (ARN)。
"encryptionContext": {"aws:states:stateMachineArn": "arn:aws:states:region
:123456789012:stateMachine:state_machine_name
"}
"encryptionContext": {"aws:states:activityArn": "arn:aws:states:region
:123456789012:activity:activity_name
"}
下列範例顯示如何將執行角色 AWS KMS 金鑰的使用限制在具有kms:EncryptionContext
和aws:states:stateMachineArn
內容金鑰的特定狀態機器:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow KMS Permissions for StepFunctionsWorkflowExecutions", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:aa-example-1:1234567890:key/a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa" ], "Condition": { "StringEquals": { "kms:EncryptionContext:aws:states:stateMachineArn": "arn:aws:states:aa-example-1:1234567890:stateMachine:MyStateMachine" } } } ] }
使用公里設定範圍:ViaService
kms:ViaService
條件索引鍵會限制對來自指定 AWS 服務的要求使用 AWS Key Management Service 金鑰。
下列範例原則會使用kms:ViaService
條件,只有當請求源自ca-central-1
區域中的 Step Functions 時,才允許 AWS KMS 金鑰用於特定動作,並代表 ExampleRole
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow access for Key Administrators in a region", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1234567890:role/ExampleRole" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "states.ca-central-1.amazonaws.com" } } } ] }
注意
此kms:ViaService
條件僅適用於API呼叫者需要 AWS KMS 權限時 (例如CreateStateMachine
CreateActivity
GetActivityTask
、、等)。將kms:ViaService
條件新增至執行角色可防止新的執行啟動,或導致執行中的執行失敗。
API呼叫者所需的權限
若要呼叫傳回加密資料的 Step Fun API ctions 動作,呼叫者需要 AWS KMS
權限。或者,某些API動作有一個 option (METADATA_ONLY
) 僅返回元數據,從而消除了對 AWS KMS 權限的要求。如需相關資訊,請參API閱 Step Functions。
若要在使用客戶管理金鑰加密時順利完成執行,必須授kms:GenerateDataKey
與執行角色以及狀態機器所使用 AWS KMS 金鑰的kms:Decrypt
權限。
下表顯示提供 Step Functions 狀態機器API呼叫者所需的 AWS KMS 權限。您可以在金鑰原則或角色原IAM則中提供權限。
APIs使用狀態機的 AWS KMS 密鑰 | 呼叫者需要 |
CreateStateMachine | 公里:DescribeKey,公里:GenerateDataKey |
UpdateStateMachine | 公里:DescribeKey,公里:GenerateDataKey |
DescribeStateMachine | kms:解密 |
DescribeStateMachineForExecution | kms:解密 |
StartExecution | -- |
StartSyncExecution | kms:解密 |
SendTaskSuccess | -- |
SendTaskFailure | -- |
StopExecution | -- |
RedriveExecution | -- |
DescribeExecution | kms:解密 |
GetExecutionHistory | kms:解密 |
下表顯示提供 Step Functions 活動API呼叫者所需的 AWS KMS 權限。您可以在金鑰原則或角色原IAM則中提供權限。
APIs使用活動的 AWS KMS 密鑰 | 呼叫者需要 |
CreateActivity | 公里:DescribeKey |
GetActivityTask | kms:解密 |
何時向呼叫者或執行角色授予權限?
當IAM角色或使用者呼叫「Step Functions」時API,「Step Functions」服務 AWS KMS 會代表API呼叫者呼叫。在這種情況下,您必須向API呼叫者授予 AWS KMS 權限。當執行角色 AWS KMS 直接呼叫時,您必須授與執行角色的 AWS KMS 權限。
AWS CloudFormation 用於加密配置的資源
AWS CloudFormation Step Functions 的資源類型可以使用加密配置佈建狀態機器和活動資源。
依預設,Step Functions 會提供透明的伺服器端加密。AWS::StepFunctions::Activity
並接AWS::StepFunctions::StateMachine
受可選EncryptionConfiguration
屬性,該屬性可以為伺服器端加密配置客戶管理的 AWS KMS 金鑰。
先決條件:您的使用者或角色必須具有DescribeKey
和的 AWS KMS 權限,才能使用客戶管理的 AWS KMS 金鑰建立狀態機器GenerateDataKey
。
更新不 StateMachine 需要中斷。活動資源的更新需要:取代。
若要在 AWS CloudFormation 範本中宣告EncryptionConfiguration
屬性,請使用下列語法:
JSON
{ "KmsKeyId" : String, "KmsDataKeyReusePeriodSeconds" : Integer, "Type" : String }
YAML
KmsKeyId: String KmsDataKeyReusePeriodSeconds: Integer Type: String
屬性
-
類型-狀態機器或活動的加密選項。允許值:
CUSTOMER_MANAGED_KMS_KEY
|AWS_OWNED_KEY
-
KmsKeyId-加密資料金鑰之對稱加密金鑰ARN的別名ARN、別名、 AWS KMS 金鑰 ID 或金鑰。若要在不同 AWS 帳戶中指定 AWS KMS 金鑰,客戶必須使用金鑰ARN或別名ARN。如需相關資訊 kmsKeyId,請參閱KeyId在 AWS KMS 文件中。
-
KmsDataKeyReusePeriodSeconds-重複使用資料金鑰的最長持續時間。SFN當週期到期時,Step Functions 將調用
GenerateDataKey
。只有當「類型」為時,才能設定此設定CUSTOMER_MANAGED_KMS_KEY
。該值的範圍可以從 60 到 900 秒之間。預設為 300 秒。
AWS CloudFormation 例子
範例: StateMachine 使用客戶管理金鑰
AWSTemplateFormatVersion: '2010-09-09' Description: An example template for a Step Functions State Machine. Resources: MyStateMachine: Type: AWS::StepFunctions::StateMachine Properties: StateMachineName: HelloWorld-StateMachine Definition: StartAt: PassState States: PassState: Type: Pass End: true RoleArn: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/example" EncryptionConfiguration: KmsKeyId: !Ref MyKmsKey KmsDataKeyReusePeriodSeconds: 100 Type: CUSTOMER_MANAGED_KMS_KEY MyKmsKey: Type: AWS::KMS::Key Properties: Description: Symmetric KMS key used for encryption/decryption
範例:使用客戶管理金鑰進行活動
AWSTemplateFormatVersion: '2010-09-09' Description: An example template for a Step Functions Activity. Resources: Activity: Type: AWS::StepFunctions::Activity Properties: Name: ActivityWithKmsEncryption EncryptionConfiguration: KmsKeyId: !Ref MyKmsKey KmsDataKeyReusePeriodSeconds: 100 Type: CUSTOMER_MANAGED_KMS_KEY MyKmsKey: Type: AWS::KMS::Key Properties: Description: Symmetric KMS key used for encryption/decryption
更新活動的加密需要建立新資源
活動配置是不可變的,並且資源名稱必須是唯一的。若要設定用於加密的客戶管理金鑰,您必須建立新的活動。如果您嘗試針對現有活動變更CFN範本中的組態,則會收到ActivityAlreadyExists
例外狀況。
若要更新您的活動以包含客戶管理的金鑰,請在CFN範本中設定新的活動名稱。以下範例顯示使用客戶管理的金鑰組態建立新活動的範例:
現有活動定義
AWSTemplateFormatVersion: '2010-09-09'
Description: An example template for a new Step Functions Activity.
Resources:
Activity:
Type: AWS::StepFunctions::Activity
Properties:
Name: ActivityName
EncryptionConfiguration:
Type: AWS_OWNED_KEY
新活動定義
AWSTemplateFormatVersion: '2010-09-09' Description: An example template for a Step Functions Activity. Resources: Activity: Type: AWS::StepFunctions::Activity Properties: Name: ActivityWithKmsEncryption EncryptionConfiguration: KmsKeyId: !Ref MyKmsKey KmsDataKeyReusePeriodSeconds: 100 Type: CUSTOMER_MANAGED_KMS_KEY MyKmsKey: Type: AWS::KMS::Key Properties: Description: Symmetric KMS key used for encryption/decryption
監控您的加密金鑰使用
當您使用 AWS KMS 客戶管理的金鑰來加密您的 Step Functions 資源時,您可以使用 CloudTrail來追蹤 Step Functions 傳送的要求 AWS KMS。
您也可以在稽核記錄和記錄中使用加密內容,以識別客戶受管金鑰的使用方式。加密內容也會出現在由產生的記錄檔中AWS CloudTrail。
下列範例為 Step Functions 呼叫的 AWS KMS 作業 Decrypt
DescribeKey
,GenerateDataKey
以存取由客戶管理金鑰加密之資料的 CloudTrail 事件、及監控事件:
FAQs
如果我的密鑰被標記為刪除或刪除,會發生什麼情況 AWS KMS?
如果密鑰被刪除或標記為刪除 AWS KMS,則任何相關的正在運行的執行都將失敗。除非您移除或變更與工作流程相關聯的金鑰,否則無法啟動新的執行。刪除 AWS KMS 金鑰後,與工作流程執行相關聯的所有加密資料將保持加密狀態,且無法再解密,因此資料無法復原。
如果在中禁用 AWS KMS 密鑰會發生什麼情況 AWS KMS?
如果在中停用某個 AWS KMS 金鑰 AWS KMS,則任何相關執行的執行都會失敗。無法啟動新的執行。您無法再解密使用該停用金鑰加密的資料,直到重新啟用該 AWS KMS 金鑰為止。
發送到的執行狀態更改事件會發生什麼情況 EventBridge?
對於使用客戶管理的 AWS KMS 金鑰加密的工作流程的執行狀態變更事件,將不會包含執行輸入、輸出、錯誤和原因。
進一步了解
如需靜態資料加密的相關資訊,請參閱AWS Key Management Service 開發人員指南 AWS Key Management Service中的AWS Key Management Service 概念和安全性最佳做法。