无法让 aws:PrincipalOrgID 与创建订阅过滤器一起工作

Unable to get aws:PrincipalOrgID to work with creating subscription filter

我有一个启用了 Organizations 的 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

错误信息是:

An error occurred (AccessDeniedException) when calling the PutSubscriptionFilter operation: User with accountId: 210987654321 is not authorized to perform: logs:PutSubscriptionFilter on resource: arn:aws:logs:us-east-1:123456789012:destination:mytestLogDestination

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

截至 2019 年 8 月 2 日

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

暂时将此标记为答案。

更新:2021 年 1 月 6 日

根据a new AWS release, this is now supported. AWS documentation for reference: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateDestination.html

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

我只能让它在 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:*"
          ]
        }
      }
    }
  ]
}