Installation guide
This guide is for the platform team installing Cloud Certainty Memora in their AWS account. The install is one CloudFormation stack (the hub). Every other account whose ElastiCache caches Memora should reach gets a small role stack (the spoke), and every VPC that holds caches gets a connector: the hub stack can create one in its own VPC, and a connector stack adds one to any other VPC, account or Region. With IAM Identity Center or another SAML IdP, the hub takes two steps: deploy the stack, configure the SAML application, then update the stack. For the short version, see Getting started.
Before you start
- Region. Any Region with Amazon ElastiCache, AWS Lambda, Amazon API Gateway (HTTP APIs), Amazon
DynamoDB, AWS Step Functions, Amplify Hosting, Amazon Cognito, AWS License Manager and Amazon ECS on
Fargate. The templates are always loaded from the vendor's public bucket in us-east-1
(CloudFormation accepts a template URL from any Region), and all product code comes from the
container image. The hub's Region doesn't limit which Regions you can work in: list them in
LocalRegionsand in each connection. - Account. Deploy the hub in the account that subscribed on AWS Marketplace: the licence is delivered to that account through AWS License Manager. To run the hub in another account of your organisation, distribute the licence to it with a License Manager grant first.
- Permissions. You need permission to create the resources in the stack: IAM roles (some have fixed names), Lambda, Step Functions, ECS, EC2 security groups, Cognito, API Gateway, Amplify, DynamoDB, S3, SNS, EventBridge, KMS and CloudWatch Logs.
- Network. A VPC with at least one subnet with outbound HTTPS access, for the one-off installer task (see Networking). If your caches are in that VPC, choose the subnets for the hub's connector too. Nothing in your VPC accepts inbound connections.
- Identity. Decide how users will sign in: IAM Identity Center, another SAML 2.0 IdP (Entra ID, Okta and others), an OIDC IdP, or Cognito-managed users. SAML IdPs other than IAM Identity Center, and OIDC, need the Team plan or above.
- Your caches. Decide the access level per account (
Read,OperateorFull, see What Memora may do), note the VPCs, subnets and security groups of your caches, and how each cache authenticates (IAM, an AUTH token or users with passwords, or none): that decides how Memora signs in to its data (Data access).
1. Subscribe
- Open Memora in AWS Marketplace and choose Continue to Subscribe. Choose the plan and the contract length (Team is the base plan; Business and Enterprise are add-ons to it) and accept the offer. AWS License Manager now holds your licence.
- Choose Continue to Configuration, select the fulfilment option and the Region, then open the CloudFormation launch link from the usage instructions.
2. Launch the hub stack
In the CloudFormation console, fill in the parameters (see the reference). Acknowledge "AWS CloudFormation might create IAM resources with custom names" and create the stack. Creation takes about 10 minutes.
The quick-create link, with the release version filled in:
https://console.aws.amazon.com/cloudformation/home#/stacks/quickcreate?templateURL=https://cloudcertainty-memora-us-east-1.s3.us-east-1.amazonaws.com/pro/<version>/main.yaml&stackName=memoraFrom the AWS CLI (--region is the Region you deploy to):
aws cloudformation create-stack --region <your-region> --stack-name memora \
--template-url https://cloudcertainty-memora-us-east-1.s3.us-east-1.amazonaws.com/pro/<version>/main.yaml \
--parameters file://params.json \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAMparams.json lists the parameters as [{"ParameterKey": "VpcId", "ParameterValue": "vpc-..."}, ...].
What happens during creation
The product's code (the Lambda functions, the connector and the web app) ships inside the subscription-protected container image, not as public downloads. Early in stack creation:
- CloudFormation creates a private S3 bucket in your account (output
ArtifactsBucketName; all public access blocked, encrypted, TLS only). - The
ArtifactInstallcustom resource starts one Fargate task from the product image in yourInstallerSubnetIds. The task checks your AWS Marketplace licence in AWS License Manager, verifies every file of the code bundle against the SHA-256 checksums in the image, and copies it into the bucket under the release's version. It runs for about a minute, with a security group without inbound rules. - The Lambda functions (the API, the bulk job worker and, with
ConnectorSubnetIds, the connector's read and write functions), Memora's own bulk jobs workflow (a Step Functions Standard state machine named<NamePrefix>-bulk) and the web app are then created from that bucket.
If the installer task fails, stack creation fails and rolls back. The error message gives the task's
exit code and its log stream (log group /<NamePrefix>/installer); see
Troubleshooting.
3. Connect your identity provider
IdentityProvider | What to do |
|---|---|
IAMIdentityCenter | Follow Identity providers. Create the app with the SamlAcsUrl and SamlAudienceUri outputs, then update the stack with SamlMetadataUrl. |
SAML | Team and above. Do the same in your IdP (Entra ID and Okta are covered in Identity providers). |
OIDC | Team and above. Put the client secret in Secrets Manager, then set OidcIssuer, OidcClientId and OidcClientSecretArn when you create the stack. Register <CognitoDomain>/oauth2/idpresponse as the redirect URI in your IdP. |
CognitoOnly | Nothing more to do. BootstrapAdminEmail receives a temporary password. Every user must register an authenticator app (TOTP MFA is required). |
Until SamlMetadataUrl is set, the portal falls back to Cognito sign-in, which has no users. Nobody
can sign in at that point, so the stack is safe in that state.
4. First sign-in
Open the PortalUrl output and sign in as BootstrapAdminEmail. The first account that signs in
with that (verified) email becomes the bootstrap administrator and stays bound to it (see the
admin guide).
The local connection to the hub's own account exists from the start. It uses the stack's local
role, which may do what LocalAccessLevel allows, in the Regions of LocalRegions. With
ConnectorSubnetIds, the local connector exists from the start too, for the caches of VpcId
in the stack's Region. Administrators see every cache. Other users see nothing until an
administrator grants them access (admin guide).
What Memora may do
The local role and every spoke role are the upper limit of what Memora can do in an account, for everyone, administrators included. Memora then narrows each request to the person's grants with a session policy.
| Access level | Parameter (spoke) | Memora may | Permissions it allows |
|---|---|---|---|
Read | LocalAccessLevel (AccessLevel) | Describe caches, backups, events, parameter groups, users and service updates; read CloudWatch metrics; invoke the read functions of connectors (memora-connector-*-read) | view, read |
Operate (default) | Read plus invoke the write functions of connectors (memora-connector-*-write), take and copy backups, reboot nodes, test failover, change the node type, replicas, shards and serverless limits, change settings and tags, and apply service updates | plus write, operate | |
Full | Operate plus create, restore and delete caches, delete backups, change engines and engine versions, edit parameter groups, and create, change and delete ElastiCache users and user groups (which IAM data access set-up needs) | plus manage |
With Read, nobody can change a cache or its data through Memora, whatever their grants: the role
can't even invoke a connector's write function.
The roles have no IAM, CloudFormation, DynamoDB, S3 or Lambda change permissions. They reach cache
data only by invoking connector functions named memora-connector-*, which hold no state, so Memora
can't change its own stack.
The connector
ElastiCache caches have no public endpoints, so Memora reaches their data through a connector: a
pair of Lambda functions inside the caches' VPC, memora-connector-<name>-read and
memora-connector-<name>-write, each with its own role and security group. They are the only part
of Memora that connects to your caches, and they are invoked only through lambda:InvokeFunction by
Memora's roles under /memora/.
- The read function runs read commands only and signs in to caches as the ElastiCache user
memora-read(or with secrets taggedmemora:access=read). The write function runs every command Memora allows and signs in asmemora-write(or with secrets taggedwrite). A person without thewritepermission gets an AWS session that can invoke only the read function. - They connect only to ElastiCache endpoints, on the address Memora builds from ElastiCache's own description of the cache.
- Their security group has no inbound rules, and outbound rules for TCP 6379 to 6380 (the cache ports) and 443 (Secrets Manager, only needed for caches that sign in with secrets).
- Your caches' security groups must allow inbound TCP 6379 and 6380 from the connector's security
group. Set
CacheSecurityGroupIdand the stack adds that rule for one security group; for others, add it yourself (outputConnectorSecurityGroupId). - IAM data access needs nothing else: the function signs a short-lived IAM token itself. Secrets need a route from the subnets to Secrets Manager: a NAT gateway, or an interface VPC endpoint for Secrets Manager.
The hub stack creates the connector local in VpcId (in the stack's Region) when you set
ConnectorSubnetIds. For caches in any other VPC, account or Region, deploy
a connector stack. Without any connector, Memora
still shows your caches, their metrics, findings and backups, and operates them, but can't read or
change their data.
5. Deploy the spoke role in other accounts
spoke-role.yaml creates one role, /memora/<RoleName>, that only the hub's API role and its bulk
job worker role (stack output SpokeTrustedPrincipal) can assume, only with your external ID, and
only with a user's email as the source identity. IAM is global, so deploy it once per account;
the connection then covers every Region you list. Its template URL is the stack output
SpokeTemplateUrl:
https://cloudcertainty-memora-us-east-1.s3.us-east-1.amazonaws.com/pro/<version>/spoke-role.yaml| Parameter | Default | Meaning |
|---|---|---|
TrustedPrincipal | The hub's SpokeTrustedPrincipal output: two role ARNs (the API and the bulk job worker), comma-separated. Copy the whole value. Required | |
ExternalId | A secret of 16 to 128 characters (letters, digits and +=,.@:/-). Enter the same value when you add the connection in Memora. Required | |
RoleName | memora-spoke | Role name; the role is created under the IAM path /memora/, the only path the hub may assume |
AccessLevel | Operate | Read, Operate or Full, as LocalAccessLevel (What Memora may do) |
The role is the upper limit of what Memora can do in that account; grants narrow it per user or
group but never widen it. The stack's outputs are RoleArn (enter it in the connection) and
AccessLevel (choose the same level for the connection).
A single account
cat > spoke-params.json <<'EOF'
[
{"ParameterKey": "TrustedPrincipal", "ParameterValue": "<SpokeTrustedPrincipal output>"},
{"ParameterKey": "ExternalId", "ParameterValue": "<a secret of at least 16 characters>"},
{"ParameterKey": "AccessLevel", "ParameterValue": "Operate"}
]
EOF
aws cloudformation create-stack --region eu-west-1 --stack-name memora-spoke \
--template-url https://cloudcertainty-memora-us-east-1.s3.us-east-1.amazonaws.com/pro/<version>/spoke-role.yaml \
--parameters file://spoke-params.json --capabilities CAPABILITY_NAMED_IAMEvery account of an AWS Organization (StackSets)
With service-managed StackSets, new accounts in the target OUs get the role automatically. Use one external ID for the whole StackSet, and enter that same external ID for every connection you create for those accounts.
# From the management account or a delegated StackSets administrator.
aws cloudformation create-stack-set --region us-east-1 --stack-set-name memora-spoke \
--template-url https://cloudcertainty-memora-us-east-1.s3.us-east-1.amazonaws.com/pro/<version>/spoke-role.yaml \
--parameters file://spoke-params.json \
--capabilities CAPABILITY_NAMED_IAM \
--permission-model SERVICE_MANAGED \
--auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false
# One Region is enough: IAM is global.
aws cloudformation create-stack-instances --region us-east-1 --stack-set-name memora-spoke \
--deployment-targets OrganizationalUnitIds=ou-abcd-11111111 --regions eu-west-1Service-managed StackSets don't deploy to the management account; use a normal stack there if
Memora should reach it. To change AccessLevel later, update the StackSet, then the access level
of the connections.
Add the connection
In Administration › Connections › Add connection, enter an id (used in links, it can't be
changed later), a name, the AWS account id, the access level, the spoke stack's RoleArn, the
external ID and the Regions to show. Choose Save connection, then Test: Memora assumes the
role and counts the caches in each Region. See the admin guide.
6. Connectors in other VPCs, accounts and Regions
connector.yaml adds a connector to any VPC that holds caches, in the hub account or another one,
in any Region. Deploy one per VPC. Its template URL is the hub's ConnectorTemplateUrl output:
https://cloudcertainty-memora-us-east-1.s3.us-east-1.amazonaws.com/pro/<version>/connector.yamlThe connector's code is not public: at create and update, a small custom resource in the connector
stack copies <version>/connector.zip from the hub's private artifacts bucket into a bucket of the
connector stack's own, so it works in any Region.
- For another account, allow it to copy the code first. Update the hub stack and add the
account id to
ConnectorAccountIds. That lets the account read the connector's code (and only that file) from the hub's artifacts bucket. Connectors in the hub's own account need nothing here. The account also needs a connection. - Get the quick-create link. In Administration › Connectors, expand Deploy a connector,
choose the connection and the Region of the caches, and choose Get the quick-create link.
Open the quick-create page in the CloudFormation console while signed in to that account: the
link fills in
HubArtifactsBucket,HubRegion,VersionandTrustedRoleArn, and the page also lists them to copy. - Fill in the rest (see the table below): a
ConnectorName, the caches'VpcIdandSubnetIds, and optionallyCacheSecurityGroupIdandCreateSecretsEndpoint. Acknowledge the IAM capabilities and create the stack (it creates named IAM roles). - Register it. Back in Administration › Connectors, choose Register connector (or
Register the connector under the deploy steps) and enter an id, a name, the connection, the
Region, the VPC id and the stack's
ReadFunctionArnandWriteFunctionArnoutputs. Choose Save connector, then Test: Memora invokes both functions with the connection's role.
| Parameter | Default | Meaning |
|---|---|---|
ConnectorName | main | 1 to 30 lower-case letters, digits and hyphens. The functions are memora-connector-<name>-read and -write. Unique per account and Region |
VpcId | The VPC whose caches this connector reaches | |
SubnetIds | Subnets for the connector functions: the caches' subnets, or others that can reach them | |
CacheSecurityGroupId | empty | Optional security group of your caches: the stack adds an inbound rule on ports 6379 and 6380 from the connector's security group. Otherwise add that rule yourself (the SecurityGroupId output) |
CreateSecretsEndpoint | false | true creates an interface VPC endpoint for Secrets Manager in the subnets (about 7.30 US dollars a month per subnet). Needed only for caches that sign in with Secrets Manager, in subnets without a NAT gateway |
HubArtifactsBucket | The hub stack's ArtifactsBucketName output | |
HubRegion | The Region of the hub stack | |
Version | The Memora release whose connector to install: the hub's ProductVersion output. Update it after you upgrade the hub (Upgrading) | |
TrustedRoleArn | empty | Optional: the Memora connection role of this account (the hub's local role, or the spoke role), given an explicit permission to invoke the functions. The role's own policy already allows it |
LogRetentionDays | 90 | Retention of the connector's log groups (one line per request, never values) |
Outputs: ReadFunctionArn, WriteFunctionArn, VpcId and SecurityGroupId.
Memora picks the connector for a cache automatically: the one registered for the cache's connection, Region and VPC. A cache's data access can also name a connector explicitly. When no connector can reach a cache, its data tabs say so and name the VPC to deploy one in.
Parameter reference
| Parameter | Default | Description |
|---|---|---|
NamePrefix | memora | 2 to 20 lowercase letters, digits and hyphens, starting with a letter. It prefixes resource and role names, so it must be unique in the account and Region. Don't use aws, amazon or cognito: it forms part of the Cognito domain. |
TagOwner | platform-team | Value of the Owner tag on every taggable resource. |
TagCostCenter | none | Value of the CostCenter tag on every taggable resource. |
TagEnvironment | prod | Value of the Environment tag on every taggable resource. |
IdentityProvider | IAMIdentityCenter | IAMIdentityCenter, SAML, OIDC or CognitoOnly. SAML (other than IAM Identity Center) and OIDC need the Team plan or above. See Identity providers. |
SamlMetadataUrl | empty | The metadata URL of your SAML application (IAMIdentityCenter or SAML only). Leave it empty on the first deployment. |
OidcIssuer | empty | OIDC only, required: the issuer URL. |
OidcClientId | empty | OIDC only, required: the client ID. |
OidcClientSecretArn | empty | OIDC only, required: the ARN of a Secrets Manager secret whose value is the client secret. CloudFormation resolves it at deploy time. |
OidcEmailVerifiedClaim | email_verified | OIDC only: the IdP claim that says the email is verified. Use xms_edov for Microsoft Entra ID. |
BootstrapAdminEmail | The first administrator. With CognitoOnly the user is created and receives a temporary password by email. | |
LocalAccessLevel | Operate | The most Memora may do with ElastiCache in this account, for every user: Read, Operate or Full (What Memora may do). |
LocalRegions | empty | Comma-separated Regions whose caches Memora shows for this account, for example eu-west-1,us-east-1. Empty means the stack's Region only. |
VpcId | The VPC for the one-off installer task, and for the hub's connector when ConnectorSubnetIds is set. | |
InstallerSubnetIds | Subnets for the installer task, in VpcId (a template rule checks it), with outbound HTTPS (see Networking). | |
InstallerSubnetsArePublic | false | true only for subnets that route to an internet gateway; the task then gets a public IP for outbound access. |
ConnectorSubnetIds | empty | Subnets of VpcId for the hub's connector (the read and write functions), comma-separated: the caches' subnets or others that can reach them. Empty creates no connector; deploy connector.yaml later in any VPC. Secrets Manager authentication needs a route to Secrets Manager from these subnets; IAM authentication needs nothing. |
CacheSecurityGroupId | empty | Optional security group of your caches: the stack adds an inbound rule on ports 6379 and 6380 from the connector's security group. Otherwise add that rule yourself (the ConnectorSecurityGroupId output). |
ConnectorAccountIds | empty | Comma-separated accounts where you will deploy connector.yaml. They may read the connector's code (and only that file) from the stack's private artifacts bucket. Connectors in this account need nothing here. |
LogRetentionDays | 90 | Retention of Memora's own CloudWatch log groups, including the audit events written there and the bulk jobs workflow's logs. |
KmsKeyArn | empty | Optional customer managed KMS key (see Encryption). Empty uses AWS owned keys and SSE-S3. |
UpdateChecks | Enabled | Once a day, read the public release manifest from the vendor's bucket and announce a newer release to administrators and on the update SNS topic. Nothing about you, your users or your account is sent. |
UpdateNotificationEmail | empty | Optional email address subscribed to the update topic. |
ArtifactVersionOverride, ImageUriOverride | empty | Advanced (support use only). Leave empty unless Cloud Certainty support asks you to set them. |
Networking
The installer task runs in your VPC for about a minute at install and at each upgrade. It needs outbound HTTPS (443) to:
- Amazon ECR in us-east-1, to pull the image from the AWS Marketplace registry (cross-Region, so this needs internet egress: a NAT gateway or public subnets);
- AWS License Manager in your Region, for the licence check;
- Amazon S3 in your Region, to write the code into the artifacts bucket (a gateway endpoint works);
- CloudWatch Logs in your Region, for its log stream.
Its security group has no inbound rules and one outbound rule, TCP 443.
The connector functions run in the subnets you choose, with no inbound rules (see The connector). With IAM data access they need no route out of the VPC at all; with secrets they need a route to Secrets Manager.
Everything else is outside your VPC: the API and the worker reach ElastiCache, CloudWatch, EC2, STS, Lambda (to invoke the connectors), AWS License Manager and the AWS Price List API over AWS's public endpoints.
Encryption and KMS
Without KmsKeyArn, the DynamoDB tables, the log groups, the update SNS topic, the artifacts bucket
and the bulk jobs workflow use AWS owned keys and SSE-S3.
With KmsKeyArn, your key encrypts all of them, except the connector's code in the artifacts
bucket, which always uses SSE-S3 so that connector stacks in other accounts can copy it. The key
must be a symmetric customer managed key in the stack's Region (give its ARN, not an alias), and its
key policy must:
- let the account's IAM policies grant its use (the default key policy statement for the account root does this). The stack's roles use it only through DynamoDB, CloudWatch Logs, SNS, S3 and Step Functions;
- allow
logs.<region>.amazonaws.comto use it for the stack's log groups, anddelivery.logs.amazonaws.comfor the bulk jobs workflow's log delivery; - allow
sns.amazonaws.comto use it for the update topic.
The identity that creates or updates the stack also needs kms:Decrypt on the key, because Lambda
reads the function code from the encrypted artifacts bucket with the deploying identity's
permissions.
The key protects Memora's own data. Your caches keep their own encryption. Secrets that hold cache credentials may use your own KMS keys: the connector roles may decrypt only through Secrets Manager, so the key policy must let the account's IAM policies grant its use.
Stack outputs
| Output | Use |
|---|---|
PortalUrl | The URL users and admins open. Also the application start URL in your IdP. |
ApiUrl | HTTP API base URL (informational). |
CognitoDomain | Cognito managed login domain. The OIDC redirect URI is <CognitoDomain>/oauth2/idpresponse. |
UserPoolId, UserPoolClientId | Cognito identifiers. |
SamlAcsUrl, SamlAudienceUri | Values for your SAML application. |
SpokeTrustedPrincipal | The hub role ARNs (API and worker, comma-separated) for the spoke template's TrustedPrincipal. |
SpokeTemplateUrl | URL of this release's spoke-role.yaml. |
ConnectorTemplateUrl | URL of this release's connector.yaml. Administration › Connectors gives a quick-create link. |
LocalAccessRoleArn | The role of the local connection. |
ConnectorReadFunctionArn, ConnectorWriteFunctionArn | The hub's connector (with ConnectorSubnetIds). |
ConnectorSecurityGroupId | The hub connector's security group: allow inbound TCP 6379 to 6380 from it in your caches' security groups (with ConnectorSubnetIds). |
BulkStateMachineArn | Memora's own Step Functions workflow that carries out bulk jobs. |
UpdateTopicArn | SNS topic that announces new releases. Subscribe your own endpoints to it. |
TableName | DynamoDB table (retained when the stack is deleted). |
ArtifactsBucketName | Private bucket with the stack's code. Connector stacks copy the connector's code from it. Emptied and deleted with the stack; store nothing else in it. |
ProductVersion | The Memora release the stack runs. |
Updating
Each release is a new template; the hub has no version parameter. To upgrade, update the stack with
the new release's template (Update stack › Replace current template) and keep every other
parameter value, then update each connector stack's Version parameter. See the
upgrading guide.
To change a setting such as LocalAccessLevel, LocalRegions, ConnectorSubnetIds,
ConnectorAccountIds or SamlMetadataUrl, update the stack with the current template and change
only that parameter.
Deleting
Delete the connector stacks in your VPCs.
Delete the hub stack. The DynamoDB table (
<NamePrefix>-table) is retained on purpose, with its settings, grants, data access settings, scripts, command records, analyses, bulk jobs and audit log. Everything else is deleted: the cache table (with the usage counters), the Cognito user pool (Cognito-only users are lost), the artifacts bucket, the hub's connector, the bulk jobs workflow and the log groups. A new stack with the sameNamePrefixcan't be created while the retained table exists.To delete the table when you no longer need it, turn off its deletion protection, then delete it. Your caches and their data are never touched by deleting Memora. The ElastiCache users
memora-readandmemora-write, and any secrets you created for Memora, stay until you delete them.Delete the spoke stacks or the StackSets in the other accounts.
Delete the SAML or OIDC application in your identity provider.
Troubleshooting
Installer exit codes
When stack creation or an update fails at ArtifactInstall, the status reason gives the installer's
exit code and log stream (log group /<NamePrefix>/installer).
| Exit code | Meaning | What to do |
|---|---|---|
1 | Another error | Read the log stream; contact support with it |
2 | The image has no valid code bundle | Contact support |
3 | The account has no Memora licence | Subscribe on AWS Marketplace, or deploy in the subscribing account (see Before you start) |
4 | The upload to the artifacts bucket failed | Check SCPs, the S3 endpoint policy and, with KmsKeyArn, the key policy |
5 | AWS License Manager stayed unavailable for the whole retry budget | Retry the stack operation later |
None, with CannotPullContainerError or ResourceInitializationError | The task could not start | The subnets can't reach ECR in us-east-1, S3 or CloudWatch Logs. "The installer task did not finish in time" needs the same network checks |
Other problems
| Symptom | Check |
|---|---|
| Every page says a licence is required | Administration › Licence and about shows what License Manager returned. The subscription may have expired, or the stack runs in an account without the licence. Choose Check licence now after renewing. |
A connection test fails at AssumeRole | The spoke's TrustedPrincipal must be the hub's whole SpokeTrustedPrincipal value (both role ARNs), the external IDs must match, and the role must be under /memora/. An SCP can also deny sts:AssumeRole, sts:SetSourceIdentity or sts:TagSession. |
| Change buttons are disabled for everyone on an account | The connection's access level is Read (or Operate for create, delete, engine and parameter changes). Update the stack (or the spoke stack), then the connection. |
| "No connector can reach this cache" | No connector is registered for the cache's VPC. Deploy connector.yaml in that VPC and register it under Administration › Connectors, or name a connector in the cache's data access. |
| The connector stack fails to copy its code | The connector's account isn't in the hub's ConnectorAccountIds, or HubArtifactsBucket, HubRegion or Version don't match the hub's outputs. |
| A connector test fails | The function ARNs must be in the connection's account and one of its Regions and named memora-connector-<name>-read and -write, and the connection's role must be at least Read (Operate for the write function). |
| The data tabs say the connector could not open a connection | The cache's security group must allow inbound TCP 6379 and 6380 from the connector's security group (ConnectorSecurityGroupId or the connector stack's SecurityGroupId), and the connector's subnets must route to the cache. |
| The cache refused the sign-in | With IAM, check that memora-read and memora-write exist and are in the cache's user group (run the set-up again on the Data access tab). With secrets, check the secret's value and that the user is in the cache's user group. |
| The connector could not read the secret | The secret must be in the cache's account and Region, tagged memora:access = read or write, and reachable from the connector's subnets (a NAT gateway or CreateSecretsEndpoint). A secret encrypted with your own KMS key needs a key policy that lets IAM policies grant its use. |
| "Set up IAM data access" is disabled | The cache needs Valkey 7.2 or later or Redis OSS 7.0 or later, encryption in transit and a user group, and the connection needs Full. The tab lists what is missing. |
| A user gets "too many grants" | The user's grants make a session policy larger than AWS allows. Use group grants and wildcard patterns (for example orders-*) instead of many single names. |
ip_not_allowed | Administration › Settings, network access. The API sees the client's public IP. |
| A user is refused because their email isn't trusted | See Identity providers: the email must be asserted by SAML, verified by OIDC, or marked verified in Cognito. |
| SAML error after sign-in | The ACS URL and audience match the outputs; the email attribute is sent; the user is assigned to the app. |
Something unclear or missing? Email [email protected].