View a markdown version of this page

通过以下方式进入生产阶段 AWS CloudFormation - Amazon Verified Permissions

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过以下方式进入生产阶段 AWS CloudFormation

与 API 关联的策略存储库是一种快速构建 API 授权模型的方法。 API Gateway 它们旨在用作应用程序授权组件的测试环境。创建测试策略存储后,请花时间完善策略、架构和 Lambda 授权方。

您可能会调整 API 的架构,要求对策略存储架构和策略进行同等调整。与 API 关联的策略存储不会自动从 API 架构更新其架构,经过验证的权限仅在您创建策略存储时对 API 进行轮询。如果您的 API 更改得足够多,则可能需要使用新的策略存储库重复此过程。

当您的应用程序和授权模型准备好部署到生产环境时,请将您开发的 API 关联策略存储与自动化流程集成。作为最佳实践,我们建议您将策略存储架构和策略导出到可以部署到其他 AWS 账户 和的 AWS CloudFormation 模板中 AWS 区域。

与 API 关联的策略存储过程的结果是初始策略存储和 Lambda 授权者。Lambda 授权方有多个依赖资源。已验证权限将这些资源部署到自动 CloudFormation 生成的堆栈中。要部署到生产环境,您必须将策略存储和 Lambda 授权方资源收集到模板中。与 API 关联的策略存储库由以下资源组成:

  1. AWS::VerifiedPermissions::PolicyStore:将您的架构复制到SchemaDefinition对象。将"角色转义为\".

  2. AWS::VerifiedPermissions::IdentitySource:从测试策略存储库的输出GetIdentitySource 中复制值,并根据需要进行修改。

  3. 其中一项或多AWS::VerifiedPermissions::Policy项:将您的策略声明复制到Definition对象。将"角色转义为\".

  4. AWS:: Lambda:: Function,::: Role,AWS::: Policy,IAM::: Authori AWS zer,:IAM:: Authoriz er,AWS ApiGatewayAWS::Lambda::Permission

以下模板是示例策略存储。您可以将现有堆栈中的 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" ] } } }