in src/integ_test_resources/ios/sdk/integration/cdk/cdk_integration_tests_ios/iot_stack.py [0:0]
def setup_custom_authorizer(self):
# These values are used in the custom authorizer setup, and exported to Parameter Store
# for use by integration tests
custom_authorizer_name = "iot_custom_authorizer"
self._parameters_to_save["custom_authorizer_name"] = custom_authorizer_name
# Note: "key" is a bit overloaded here. In the context of the custom authorizer, "key name"
# refers to the HTTP header field that the custom authorizer looks for a token value in.
#
# In the case of the custom authorizer key provider, the "key" is the KMS asymmetric CMK
# used to sign the token value passed in the `token_key_name` header. In order to keep the
# terminology consistent between client integ tests that are expecting to pass something for
# a "key name" field, we'll let the ambiguity stand.
token_key_name = "iot_custom_authorizer_token"
self._parameters_to_save["custom_authorizer_token_key_name"] = token_key_name
token_value = "allow"
self._parameters_to_save["custom_authorizer_token_value"] = token_value
iot_custom_authorizer_key_resource = self.create_custom_authorizer_signing_key_generic(
"1",
"Manages an asymmetric CMK and token signature for iot custom authorizer.",
token_value,
)
custom_authorizer_token_signature = iot_custom_authorizer_key_resource.get_att(
"custom_authorizer_token_signature"
).to_string()
self._parameters_to_save[
"custom_authorizer_token_signature"
] = custom_authorizer_token_signature
authorizer_function_arn = self.setup_custom_authorizer_function(
"1",
"custom_resources/iot_custom_authorizer_function",
"iot_custom_authorizer.handler",
"Sample custom authorizer that allows or denies based on 'token' value",
{},
self.region,
)
create_authorizer_policy = aws_iam.PolicyStatement(
effect=aws_iam.Effect.ALLOW,
actions=["iot:CreateAuthorizer", "iot:UpdateAuthorizer", "iot:DeleteAuthorizer"],
resources=["*"],
)
provider_lambda = aws_lambda.SingletonFunction(
self,
"iot_custom_authorizer_provider_lambda",
uuid=self.custom_auth_user_pass_uuid,
runtime=aws_lambda.Runtime.PYTHON_3_7,
code=aws_lambda.Code.asset("custom_resources/iot_custom_authorizer_provider"),
handler="iot_custom_authorizer_provider.on_event",
description="Sets up an IoT custom authorizer",
current_version_options=aws_lambda.VersionOptions(
removal_policy=core.RemovalPolicy.DESTROY
),
initial_policy=[create_authorizer_policy],
)
provider = custom_resources.Provider(
self, "iot_custom_authorizer_provider", on_event_handler=provider_lambda
)
public_key = iot_custom_authorizer_key_resource.get_att(
"custom_authorizer_public_key"
).to_string()
core.CustomResource(
self,
"iot_custom_authorizer",
resource_type="Custom::IoTCustomAuthorizer",
service_token=provider.service_token,
properties={
"authorizer_function_arn": authorizer_function_arn,
"authorizer_name": custom_authorizer_name,
"public_key": public_key,
"token_key_name": token_key_name,
},
)