无法使用 aws:PrincipalOrgID 创建订阅过滤器

kri*_*004 4 amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs

我有一个启用了 Organizations 的 AWS 账户。我想确保来自我的子帐户的某些日志转到我的 Kinesis 流的日志记录帐户中。这个想法是,将来如果我在组织中创建一个新的子帐户,日志应该转到 Kinesis。

为此,我使用aws logs put-destination命令在我的日志记录帐户中创建了一个 Kinesis 日志目标。我向其添加了目的地策略。我使用的政策是:

{
    "Version": "2012-10-17",
    "Statement": {
        "Sid": "PutSubscriptionFilter",
        "Effect": "Allow",
        "Principal": {
            "AWS": ["*"]
        },
        "Action": "logs:PutSubscriptionFilter",
        "Resource": "arn:aws:logs:us-east-1:123456789012:destination:mytestLogDestination",
        "Condition": {
            "StringEquals": {
                "aws:PrincipalOrgID": "o-abcde12345"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我用来添加目标策略的命令是:

aws logs put-destination-policy \
    --destination-name mytestLogDestination \
    --access-policy file://destination_policy.json
Run Code Online (Sandbox Code Playgroud)

这成功添加了目标策略。我可以通过运行以下命令确认这一点:aws logs describe-destinations --destination-name-prefix mytestLogDestination。当我尝试使用以下命令在我的一个成员帐户中创建新的订阅过滤器时,它出错了。我试过的命令是:

aws logs put-subscription-filter \
    --log-group-name "/aws/lambda/GetOrgIdFunction" \
    --filter-name randomsubscriptionfilter --filter-pattern "" \
    --destination-arn arn:aws:logs:us-east-1:123456789012:destination:mytestLogDestination
Run Code Online (Sandbox Code Playgroud)

错误信息是:

调用 PutSubscriptionFilter 操作时发生错误 (AccessDeniedException):帐户 ID 为 210987654321 的用户无权执行:logs:PutSubscriptionFilter on resource: arn:aws:logs:us-east-1:123456789012:destination:mytestLogDestination

当我删除条件并将委托人限制为我的帐户 (210987654321) 时,它工作正常。是否可以使此设置正常工作,或者 AWS 目前不支持它?

kri*_*004 5

截至 2019 年 8 月 2 日

在与 AWS Support 交谈后,这是 CloudWatch Logs 的限制,因为他们尚不支持 PrincipalOrgID。在创建日志目标策略时,我们必须分别添加每个帐户。

暂时将此标记为答案。

  • 2021 年 3 月:CloudWatch 警报也(并且仍然)存在问题。 (2认同)