You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CDK跨账户访问KMS加密Secrets Manager密钥的实现咨询

问题1:跨账户访问方案可行性

该跨账户访问方案完全可行,属于AWS官方推荐的跨账户共享敏感数据的标准实现方式。你提供的Python运行时代码无需修改即可使用:代码中已经指定了Secret的完整ARN以及密钥所在的us-east-1区域,无论Lambda部署在哪个账户、哪个区域,只要权限配置正确就能正常拉取密钥。


问题2:CDK配置及权限配置指引

注意:你的CodePipeline流水线不需要获取KMS或Secrets Manager的访问权限,因为密钥是Lambda运行时主动拉取的,部署阶段流水线仅负责下发代码,不会接触该密钥,仅需要完成以下两处配置即可。

第一步:Account-1侧资源权限配置(控制台/CDK均可操作)

你需要修改Account-1中已有KMS密钥和Secret的资源策略,开放权限给其他部署Lambda的账户:

  1. 修改客户托管KMS密钥KMS-Account-1的资源策略,添加以下语句,允许其他Lambda所属账户的IAM实体继承解密权限:
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "arn:aws:iam::<Account-2的ID>:root",
                "arn:aws:iam::<Account-3的ID>:root"
            ]
        },
        "Action": "kms:Decrypt",
        "Resource": "*"
    }
    
  2. 修改目标Secret的资源策略,添加以下语句,允许其他Lambda所属账户的IAM实体拉取密钥值:
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "arn:aws:iam::<Account-2的ID>:root",
                "arn:aws:iam::<Account-3的ID>:root"
            ]
        },
        "Action": "secretsmanager:GetSecretValue",
        "Resource": "<该Secret的完整ARN>"
    }
    

第二步:CDK多环境部署逻辑修改

你只需要在定义Lambda的公共构造/Stack中,统一给Lambda执行角色添加访问权限即可,无需修改流水线逻辑,所有环境部署时会自动同步权限配置,Python CDK示例代码如下:

from aws_cdk import aws_lambda as _lambda
from aws_cdk import aws_iam as iam

# 替换为你实际的资源参数
ACCOUNT_1_ID = "你的Account-1的12位账户ID"
KMS_ACCOUNT1_ARN = f"arn:aws:kms:us-east-1:{ACCOUNT_1_ID}:key/<KMS-Account-1的密钥ID>"
TARGET_SECRET_ARN = f"arn:aws:secretsmanager:us-east-1:{ACCOUNT_1_ID}:secret:name/of/the/secret"

# 你的Lambda定义逻辑
lambda_func = _lambda.Function(
    self, "YourLambda",
    runtime=_lambda.Runtime.PYTHON_3_10,
    handler="index.handler",
    code=_lambda.Code.from_asset("lambda_code")
)

# 给Lambda执行角色添加跨账户访问权限
lambda_func.add_to_role_policy(iam.PolicyStatement(
    effect=iam.Effect.ALLOW,
    actions=["secretsmanager:GetSecretValue"],
    resources=[TARGET_SECRET_ARN]
))

lambda_func.add_to_role_policy(iam.PolicyStatement(
    effect=iam.Effect.ALLOW,
    actions=["kms:Decrypt"],
    resources=[KMS_ACCOUNT1_ARN]
))

额外注意点

  • 如果Lambda部署在VPC内且没有公网出口,需要在Lambda所在VPC中为us-east-1区域的Secrets Manager和KMS配置Interface VPC Endpoint,否则会出现访问超时问题。
  • 跨区域调用会产生少量跨区域数据传输费用,访问量级不大的情况下成本可忽略。

内容的提问来源于stack exchange,提问作者KnowSQL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:24:05