无法获取 aws:PrincipalOrgID 以创建订阅过滤器

问题描述 投票:0回答:4

我有一个启用了组织的 AWS 账户。我想确保我的子账户中的某些日志进入我的日志账户中的 Kinesis 流。我的想法是,如果将来我在 Organizations 中创建一个新的子帐户,日志应该转到 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"
            }
        }
    }
}

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

aws logs put-destination-policy \
    --destination-name mytestLogDestination \
    --access-policy file://destination_policy.json

这已成功添加目标策略。我可以通过运行命令来确认这一点:

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

错误信息是:

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

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

amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs
4个回答
6
投票

截至 2019 年 8 月 2 日

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

暂时将此标记为答案。

更新:2021 年 1 月 6 日

根据 AWS 的新版本,现在支持此功能。 AWS 文档供参考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateDestination.html


1
投票

真烦人,我浪费了很多时间来测试不同的方法来尝试让它运行。很高兴我终于找到了你的答案! 我想他们没有向您提供有关支持日期的任何进一步信息吗?我假设没有任何条件适用于这些政策,因为我尝试了 PrincipleArn,但我遇到了同样的问题。


1
投票

我只能让它在

aws:SourceArn
条件下工作,这是相当令人沮丧的。

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudwatch.amazonaws.com",
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "<topic arn>",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": [
            "arn:aws:cloudwatch:<region>:<account a>:alarm:*",
            "arn:aws:cloudwatch:<region>:<account b>:alarm:*",
            "arn:aws:cloudwatch:<region>:<account c>:alarm:*"
          ]
        }
      }
    }
  ]
}

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.