【发布时间】:2021-08-26 05:21:55
【问题描述】:
我使用ENV=<enviornment name> cdk synth --profile <PROFILE_NAME> --all 针对不同的环境运行 CDK - 现在我想在我的 CDK 应用程序中创建 SSM 秘密参数。这应该只在脚手架期间发生,但需要 boto3,因为没有 CloudFormation 等效项。如何将 CDK 身份验证与 boto3 一起重用?我在 Python 中使用 CDK 和 boto3 进行开发,并使用 MFA。有什么想法吗?
#1 试用 - 使用缓存凭据
不工作,因为 CDK 没有缓存凭据 :(
我遇到了一些使用 boto3 检索缓存凭据的方法。我仍然需要与 CDK 一起使用的配置文件,因为没有我收到错误消息 botocore.exceptions.NoCredentialsError: Unable to locate credentials。有人知道如何获取代码中使用的 AWS CDK 配置文件吗?也许是解决问题的第一步。
# By default the cache path is ~/.aws/boto/cache
cli_cache = os.path.join(os.path.expanduser("~"), ".aws/cli/cache")
# Construct botocore session with cache
session = botocore.session.get_session()
session.get_component("credential_provider").get_provider(
"assume-role"
).cache = credentials.JSONFileCache(cli_cache)
# Create boto3 client from session
return boto3.Session(botocore_session=session)
【问题讨论】:
-
这是一个不好的做法,你不应该在合成过程中进行任何网络调用。 aws.amazon.com/blogs/devops/… 为什么不使用
ssm.StringParameter构造,或者更好的是secretsmanager.Secret? -
既然您已经知道上下文,为什么不将配置文件作为上下文参数传递,这是获取动态参数访问 CDK CLI 的简单且推荐的方法。参考docs.aws.amazon.com/cdk/latest/guide/context.html
-
@gshpychka 在合成器之后我该怎么做 - 有没有我没看到的生命周期钩子?
-
@TechFree 也考虑过这一点,但是 a) 我已经将配置文件汇集到 CDK 并且不知道如何执行此操作,b) 这样我将不得不第二次进入 MFA .
-
你不能,你可以将它作为合成器的一部分,就像任何其他 CDK 组件一样。