我按照下面的教程使用CDK创建Lambda部署管道。当我试着把所有的东西都放在同一个账户里时,它会很好地运作。https://docs.aws.amazon.com/cdk/latest/guide/codePipeline_example.html
但我的场景与示例略有不同,因为它涉及两个AWS帐户,而不是一个。我在OPS帐户中维护应用程序源代码和管道,这个管道将把Lambda应用程序部署到UAT帐户。
OPS帐户(12345678)-CodeCommit repo和CodePipeline UAT帐户(87654321)-Lambda应用程序
根据aws后续aws文档(跨帐户操作部分),我对源代码做了以下更改。https://docs.aws.amazon.com/cdk/api/latest/docs/aws-codepipeline-actions-readme.html
>
lambda堆栈公开部署操作角色,如下所示
导出类LambdaStack扩展了cdk.stack{public readonly deployactionrole:iam.role;
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
...
this.deployActionRole = new iam.Role(this, 'ActionRole', {
assumedBy: new iam.AccountPrincipal('12345678'), //pipeline account
// the role has to have a physical name set
roleName: 'DeployActionRole',
});
}
}
在管道堆栈中,
new codePipeline.Pipeline(this, 'MicroServicePipeline', {
pipelineName: 'MicroServicePipeline',
stages: [
{
stageName: 'Deploy',
actions: [
new codePipelineAction.CloudFormationCreateUpdateStackAction({
role: props.deployActionRole,
....
}
}
]
}
const app = new cdk.App();
const opsEnv: cdk.Environment = {account: '12345678', region: 'ap-southeast-2'};
const uatEnv: cdk.Environment = {account: '87654321', region: 'ap-southeast-2'};
const lambdaStack = new LambdaStack(app, 'LambdaStack', {env: uatEnv});
const lambdaCode = lambdaStack.lambdaCode;
const deployActionRole = lambdaStack.deployActionRole;
new MicroServicePipelineStack(app, 'MicroServicePipelineStack', {
env: opsEnv,
stackName: 'MicroServicePipelineStack',
lambdaCode,
deployActionRole
});
app.synth();
[profile uatadmin]
role_arn=arn:aws:iam::87654321:role/PigletUatAdminRole
source_profile=opsadmin
region=ap-southeast-2
当我运行cdk diff或deploy时,
➜ infra git:(master) ✗ cdk diff MicroServicePipelineStack --profile uatadmin
Including dependency stacks: LambdaStack
Stack LambdaStack
Need to perform AWS calls for account 87654321, but no credentials have been configured.
我在这里做错了什么?是我的CDK代码还是我配置AWS配置文件的方式?
谢谢,卡孙
问题是您的AWS CLI配置。不能在本地使用CDK CLI通过一个CLI命令在两个单独的帐户中部署资源。最近有一篇关于如何根据堆栈环境参数告诉CDK使用哪些凭据的博客文章:https://aws.amazon.com/blogs/devops/cdk-credential-plugin/
我们使用它的方式是用多个CLI命令指定所需的配置文件将堆栈部署到单独的帐户中。所有需要交换的参数(如lambdaCode的位置)都是通过环境变量传递的。
我有一个lambda,它使用来自另一个AWS帐户的Athena的数据。因此,我有一个角色,我的lambda假定该角色具有跨帐户访问权限。我在lambda中使用了STS客户端。有时lambda运行得非常好,有时它会出现故障,给我这个错误。 “errorMessage”:“调用StartQueryExecution操作时发生错误(ExpiredTokenException):请求中包含的安全令牌已过期
我已经使用Azure虚拟机好几个星期了:(Windows 10,Visual Studio Developer虚拟机),但几个小时都无法登录。 机器报告为正在运行,RDP找到机器并显示登录框,但登录失败:(您的凭据不起作用) 可以重新启动VM,但会发生相同的错误。启动诊断显示Windows 10“beach cave”映像 尝试重置密码会在事件日志中显示错误: 无法重置密码至少一个资源部署操作失败
帐户A是我创建Kinesis流的应用程序帐户,我想在帐户B中创建Firehose来读取帐户A的Kinesis流。这可能吗?我尝试按照(https://medium.com/upday-devs/configure-kcl-to-read-from-a-dariffent-aws-account-16000b26e7ff)的步骤,在帐户A中创建了一个外部访问角色(例如'ARN:aws:iam::11
我有两个AWS账户。帐户1有一个CloudSearch域,我需要从帐户2中的Lambda函数查询该域。我遵循了一个教程,在Account1中创建一个允许跨帐户访问的角色。 因此,在帐户1中,我有一个角色,如下所示: 此角色有一个受信任的实体,即帐户2,我可以在IAM控制台中该角色的受信任实体部分下看到正确的帐户ID。 在帐户2中,我创建了一个Lambda函数,其执行角色如下所示: 我的Lambda
我正在尝试使用django-storages为带有服务帐户json文件的google云存储桶授予权限。但是,只有当我向所有具有对象视图权限的用户授予访问权限时,才能访问桶中的项目。我如何限制桶的公共访问。
我有一个关于在Lambda函数中运行的跨帐户IAM问题。(我知道人们可能会使用STS,但这个软件包真的不值得保护,我不想通过链接帐户) 账户“一”。 账户“B” Lambda是只读的,但是我相信boto3不会将凭据写入~/. aws,如果我使用boto3.client(不是会话)。不过我也把AWS_CONFIG_FILE设为 /tmp以防万一。它仍然失败。我怀疑我的提议是不可能的,因为LAMBDA