aws-connection.td 5.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. # Tests for AWS connections.
  10. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  11. ALTER SYSTEM SET enable_connection_validation_syntax = true;
  12. # Test assume role connections.
  13. > CREATE CONNECTION aws_assume_role
  14. TO AWS (ASSUME ROLE ARN 'assume-role', ASSUME ROLE SESSION NAME 'session-name');
  15. $ set-from-sql var=conn-id
  16. SELECT id FROM mz_connections WHERE name = 'aws_assume_role';
  17. > SELECT * FROM mz_internal.mz_aws_connections WHERE id = '${conn-id}';
  18. id endpoint region access_key_id access_key_id_secret_id secret_access_key_secret_id session_token session_token_secret_id assume_role_arn assume_role_session_name principal external_id example_trust_policy
  19. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  20. "${conn-id}" <null> <null> <null> <null> <null> <null> <null> assume-role session-name arn:aws:iam::123456789000:role/MaterializeConnection "mz_eb5cb59b-e2fe-41f3-87ca-d2176a495345_${conn-id}" "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Condition\":{\"StringEquals\":{\"sts:ExternalId\":\"mz_eb5cb59b-e2fe-41f3-87ca-d2176a495345_${conn-id}\"}},\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::123456789000:role/MaterializeConnection\"}}],\"Version\":\"2012-10-17\"}"
  21. # Test access credentials connections.
  22. > CREATE SECRET aws_secret_access_key as '...';
  23. > CREATE CONNECTION aws_credentials
  24. TO AWS (ACCESS KEY ID = 'access_key', SECRET ACCESS KEY = SECRET aws_secret_access_key);
  25. $ set-from-sql var=conn-id
  26. SELECT id FROM mz_connections WHERE name = 'aws_credentials';
  27. $ set-from-sql var=secret-key-secret-id
  28. SELECT id FROM mz_secrets WHERE name = 'aws_secret_access_key';
  29. > SELECT * FROM mz_internal.mz_aws_connections WHERE id = '${conn-id}';
  30. id endpoint region access_key_id access_key_id_secret_id secret_access_key_secret_id session_token session_token_secret_id assume_role_arn assume_role_session_name principal external_id example_trust_policy
  31. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  32. \${conn-id} <null> <null> access_key <null> ${secret-key-secret-id} <null> <null> <null> <null> <null> <null> <null>
  33. # Test access credentials connections where the access key ID is also a secret.
  34. > CREATE SECRET aws_access_key_id as '...';
  35. > CREATE CONNECTION aws_credentials_with_secret
  36. TO AWS (ACCESS KEY ID = SECRET aws_access_key_id, SECRET ACCESS KEY = SECRET aws_secret_access_key);
  37. $ set-from-sql var=conn-id
  38. SELECT id FROM mz_connections WHERE name = 'aws_credentials_with_secret';
  39. $ set-from-sql var=access-key-secret-id
  40. SELECT id FROM mz_secrets WHERE name = 'aws_access_key_id';
  41. > SELECT * FROM mz_internal.mz_aws_connections WHERE id = '${conn-id}';
  42. id endpoint region access_key_id access_key_id_secret_id secret_access_key_secret_id session_token session_token_secret_id assume_role_arn assume_role_session_name principal external_id example_trust_policy
  43. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  44. \${conn-id} <null> <null> <null> ${access-key-secret-id} ${secret-key-secret-id} <null> <null> <null> <null> <null> <null> <null>
  45. # Tests for validating connections are in test/aws/.
  46. # Test invalid statements.
  47. ! CREATE CONNECTION conn
  48. TO AWS (ACCESS KEY ID = 'access_key');
  49. contains:must specify both ACCESS KEY ID and SECRET ACCESS KEY with optional SESSION TOKEN
  50. ! CREATE CONNECTION conn
  51. TO AWS (SECRET ACCESS KEY = SECRET aws_secret_access_key);
  52. contains:must specify both ACCESS KEY ID and SECRET ACCESS KEY with optional SESSION TOKEN
  53. ! CREATE CONNECTION conn
  54. TO AWS (SESSION TOKEN = 'token');
  55. contains:must specify both ACCESS KEY ID and SECRET ACCESS KEY with optional SESSION TOKEN
  56. ! CREATE CONNECTION conn
  57. TO AWS (ASSUME ROLE SESSION NAME 'session-name');
  58. contains:must specify ASSUME ROLE ARN with optional ASSUME ROLE SESSION NAME
  59. ! CREATE CONNECTION conn
  60. TO AWS (ACCESS KEY ID = 'access_key', SECRET ACCESS KEY = SECRET aws_secret_access_key, ASSUME ROLE ARN 'arn-name');
  61. contains:cannot specify both ACCESS KEY ID and ASSUME ROLE ARN
  62. ! CREATE CONNECTION conn
  63. TO AWS (REGION 'us-east');
  64. contains:must specify either ASSUME ROLE ARN or ACCESS KEY ID and SECRET ACCESS KEY
  65. # Tests for invalid IAM configurations are in test/aws/.