要解决AWS CDK Pipeline中不允许跨账户传递角色的问题,您可以使用AWS Organizations来实现跨账户访问。以下是一个示例解决方法的代码示例:
from aws_cdk import (
core,
aws_codepipeline as codepipeline,
aws_codepipeline_actions as codepipeline_actions,
aws_iam as iam
)
class MyPipelineStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
# 创建 CodePipeline
pipeline = codepipeline.Pipeline(self, "MyPipeline")
# 创建所需的 IAM 角色
pipeline_role = iam.Role(self, "PipelineRole",
assumed_by=iam.ServicePrincipal('codepipeline.amazonaws.com')
)
# 添加阶段和操作到 CodePipeline
source_output = codepipeline.Artifact()
source_action = codepipeline_actions.GitHubSourceAction(
action_name="Source",
output=source_output,
owner="your-github-owner",
repo="your-github-repo",
branch="your-github-branch",
oauth_token=core.SecretValue.secrets_manager("github-token"),
trigger=codepipeline_actions.GitHubTrigger.WEBHOOK
)
pipeline.add_stage(stage_name="Source", actions=[source_action])
deploy_action = codepipeline_actions.CloudFormationCreateUpdateStackAction(
action_name="Deploy",
template_path=core.ArtifactPath("path_to_your_template.yml"),
stack_name="your-stack-name",
admin_permissions=True,
role=pipeline_role
)
pipeline.add_stage(stage_name="Deploy", actions=[deploy_action])
在上面的示例中,我们首先创建了一个名为PipelineRole
的 IAM 角色,该角色将用于 CodePipeline。然后,我们将该角色分配给CloudFormationCreateUpdateStackAction
操作中的role
参数,以允许该操作在部署阶段中执行跨账户的 CloudFormation 堆栈创建/更新。
请注意,此示例中的代码是使用 AWS CDK for Python(即 AWS CDK Python 构造库)编写的。您需要使用适用于您选择的编程语言的相应 AWS CDK 构造库来实现相同的解决方案。