轉移到生產環境 AWS CloudFormation - Amazon Verified Permissions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

轉移到生產環境 AWS CloudFormation

API-連結的原則存放區是一種快速建立API閘道API授權模型的方法。它們被設計為作為應用程序授權組件的測試環境。建立測試原則存放區之後,請花時間精簡政策、結構描述和 Lambda 授權者。

您可以調整您的架構API,需要對原則存放區結構描述和原則進行同等調整。API-連結的原則存放區不會自動從API架構更新其結構描述 — 已驗證的權限只會API在您建立原則存放區時輪詢。如果您的API變更充分,您可能必須使用新的原則存放區重複此程序。

當您的應用程式和授權模型已準備好部署到生產環境時,請整合您與自動化程序一起開發的API連結原則存放區。最佳作法是,建議您將原則存放區結構描述和原則匯出至可部署到其他 AWS 帳戶 和的 AWS CloudFormation 範本 AWS 區域。

API連結政策存放區程序的結果為初始政策存放區和 Lambda 授權者。Lambda 授權者具有數個相依資源。已驗證的權限會在自動產 CloudFormation 生的堆疊中部署這些資源。若要部署到生產環境,您必須將原則存放區和 Lambda 授權者資源收集到範本中。API連結的原則存放區是由下列資源所組成:

  1. AWS::: VerifiedPermissionsPolicyStore: 將您的模式複製到SchemaDefinition對象。將字"元轉義為\"

  2. AWS::: VerifiedPermissionsIdentitySource: 從測試策略存儲中復制輸出GetIdentitySource 中的值,並根據需要進行修改。

  3. 一或多個:: AWS: PolicyVerifiedPermissions:將您的政策聲明複製到Definition物件中。將字"元轉義為\"

  4. AWS:: Lambda:: 函數,AWS::: 角色,IAM::: 政策,AWS::IAM: 授權者,:AWS: LambdaApiGateway:: 權限AWS:從建立政策存放區時部署的已驗證權限堆疊的「本」索引標籤複製範本。

以下範本是原則存放區的範例。您可以將 Lambda 授權者資源從現有堆疊附加到此範本。

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "MyExamplePolicyStore": { "Type": "AWS::VerifiedPermissions::PolicyStore", "Properties": { "ValidationSettings": { "Mode": "STRICT" }, "Description": "ApiGateway: PetStore/test", "Schema": { "CedarJson": "{\"PetStore\":{\"actions\":{\"get /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /pets/{petId}\":{\"appliesTo\":{\"context\":{\"type\":\"Record\",\"attributes\":{}},\"resourceTypes\":[\"Application\"],\"principalTypes\":[\"User\"]}},\"post /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}}},\"entityTypes\":{\"Application\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}},\"User\":{\"memberOfTypes\":[\"UserGroup\"],\"shape\":{\"attributes\":{},\"type\":\"Record\"}},\"UserGroup\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}}}}}" } } }, "MyExamplePolicy": { "Type": "AWS::VerifiedPermissions::Policy", "Properties": { "Definition": { "Static": { "Description": "Policy defining permissions for testgroup cognito group", "Statement": "permit(\nprincipal in PetStore::UserGroup::\"us-east-1_EXAMPLE|testgroup\",\naction in [\n PetStore::Action::\"get /\",\n PetStore::Action::\"post /pets\",\n PetStore::Action::\"get /pets\",\n PetStore::Action::\"get /pets/{petId}\"\n],\nresource);" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" } }, "DependsOn": [ "MyExamplePolicyStore" ] }, "MyExampleIdentitySource": { "Type": "AWS::VerifiedPermissions::IdentitySource", "Properties": { "Configuration": { "CognitoUserPoolConfiguration": { "ClientIds": [ "1example23456789" ], "GroupConfiguration": { "GroupEntityType": "PetStore::UserGroup" }, "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" }, "PrincipalEntityType": "PetStore::User" }, "DependsOn": [ "MyExamplePolicyStore" ] } } }