|
222 | 222 | "import json\n",
|
223 | 223 | "import cachetools.func\n",
|
224 | 224 | "\n",
|
225 |
| - "sm_client = boto3.client('secretsmanager')\n", |
226 |
| - " \n", |
227 |
| - "def sm_auth_provider(self, secret_id, version_id=None, version_stage='AWSCURRENT'):\n", |
228 |
| - " @cachetools.func.ttl_cache(maxsize=128, ttl=24 * 60 * 60) #24h\n", |
229 |
| - " def get_sm_user_credentials(secret_id, version_id, version_stage):\n", |
230 |
| - " secret = sm_client.get_secret_value(secret_id, version_id)\n", |
231 |
| - " return json.loads(secret['SecretString'])\n", |
232 |
| - " creds = get_sm_user_credentials(secret_id, version_id, version_stage)\n", |
233 |
| - " return creds['username'], creds['password']\n", |
| 225 | + "class SecretsManagerProvider(redis.CredentialProvider):\n", |
| 226 | + " def __init__(self, secret_id, version_id=None, version_stage='AWSCURRENT'):\n", |
| 227 | + " self.sm_client = boto3.client('secretsmanager')\n", |
| 228 | + " self.secret_id = secret_id\n", |
| 229 | + " self.version_id = version_id\n", |
| 230 | + " self.version_stage = version_stage\n", |
234 | 231 | "\n",
|
235 |
| - "secret_id = \"EXAMPLE1-90ab-cdef-fedc-ba987SECRET1\"\n", |
236 |
| - "creds_provider = redis.CredentialProvider(supplier=sm_auth_provider, secret_id=secret_id)\n", |
| 232 | + " def get_credentials(self) -> Union[Tuple[str], Tuple[str, str]]:\n", |
| 233 | + " @cachetools.func.ttl_cache(maxsize=128, ttl=24 * 60 * 60) #24h\n", |
| 234 | + " def get_sm_user_credentials(secret_id, version_id, version_stage):\n", |
| 235 | + " secret = self.sm_client.get_secret_value(secret_id, version_id)\n", |
| 236 | + " return json.loads(secret['SecretString'])\n", |
| 237 | + " creds = get_sm_user_credentials(self.secret_id, self.version_id, self.version_stage)\n", |
| 238 | + " return creds['username'], creds['password']\n", |
| 239 | + "\n", |
| 240 | + "my_secret_id = \"EXAMPLE1-90ab-cdef-fedc-ba987SECRET1\"\n", |
| 241 | + "creds_provider = SecretsManagerProvider(secret_id=my_secret_id)\n", |
237 | 242 | "user_connection = redis.Redis(host=\"localhost\", port=6379, credential_provider=creds_provider)\n",
|
238 | 243 | "user_connection.ping()"
|
239 | 244 | ]
|
|
266 | 271 | "import boto3\n",
|
267 | 272 | "import cachetools.func\n",
|
268 | 273 | "\n",
|
269 |
| - "ec_client = boto3.client('elasticache')\n", |
| 274 | + "class ElastiCacheIAMProvider(redis.CredentialProvider):\n", |
| 275 | + " def __init__(self, user, endpoint, port=6379, region=\"us-east-1\"):\n", |
| 276 | + " self.ec_client = boto3.client('elasticache')\n", |
| 277 | + " self.user = user\n", |
| 278 | + " self.endpoint = endpoint\n", |
| 279 | + " self.port = port\n", |
| 280 | + " self.region = region\n", |
270 | 281 | "\n",
|
271 |
| - "def iam_auth_provider(self, user, endpoint, port=6379, region=\"us-east-1\"):\n", |
272 |
| - " @cachetools.func.ttl_cache(maxsize=128, ttl=15 * 60) # 15m\n", |
273 |
| - " def get_iam_auth_token(user, endpoint, port, region):\n", |
274 |
| - " return ec_client.generate_iam_auth_token(user, endpoint, port, region)\n", |
275 |
| - " iam_auth_token = get_iam_auth_token(endpoint, port, user, region)\n", |
276 |
| - " return iam_auth_token\n", |
| 282 | + " def get_credentials(self) -> Union[Tuple[str], Tuple[str, str]]:\n", |
| 283 | + " @cachetools.func.ttl_cache(maxsize=128, ttl=15 * 60) # 15m\n", |
| 284 | + " def get_iam_auth_token(user, endpoint, port, region):\n", |
| 285 | + " return self.ec_client.generate_iam_auth_token(user, endpoint, port, region)\n", |
| 286 | + " iam_auth_token = get_iam_auth_token(self.endpoint, self.port, self.user, self.region)\n", |
| 287 | + " return iam_auth_token\n", |
277 | 288 | "\n",
|
278 | 289 | "username = \"barshaul\"\n",
|
279 | 290 | "endpoint = \"test-001.use1.cache.amazonaws.com\"\n",
|
280 |
| - "creds_provider = redis.CredentialProvider(supplier=iam_auth_provider, user=username,\n", |
281 |
| - " endpoint=endpoint)\n", |
| 291 | + "creds_provider = ElastiCacheIAMProvider(user=username, endpoint=endpoint)\n", |
282 | 292 | "user_connection = redis.Redis(host=endpoint, port=6379, credential_provider=creds_provider)\n",
|
283 | 293 | "user_connection.ping()"
|
284 | 294 | ]
|
|
0 commit comments