如果CloudTrail日志跨账号存储,如何授权才能基于CloudTrail事件分析自动生成Policy?

0

【以下的问题经过翻译处理】 我有一个启用了CloudTrail的AWS账户(账户A),并将管理事件记录到另一个专用日志账户(账户B)的S3存储桶“logs”中。

日志记录部分运作正常,但是在账户A中,我尝试使用IAM Console中的'Generate policy based on CloudTrail events'功能失败了。(在Users>Permissions选项卡下面)

这应该读取给定用户/区域/天数的CloudTrail日志,识别用户执行的所有操作,然后生成一个IAM Policy仅允许这些操作,这对于设置最小特权策略非常有用。

当我第一次运行生成器时,它创建了一个在同一账户(账户A)中的新的服务角色:AccessAnalyzerMonitorServiceRole_ABCDEFGHI。

当我选择要分析的CloudTrail跟踪时,它(正确地)识别出跟踪日志存储在另一个账户的S3存储桶中,并显示此警告消息:

Important: Verify cross-account access is configured for the selected trail The selected trail logs events in an S3 bucket in another account. The role you choose or create must have read access to the bucket in that account to generate a policy. Learn more.

在这个阶段尝试执行创建,过一会儿会显示失败,如果鼠标停在控制台中的“失败”状态上,就会看到以下消息:

Incorrect permissions assigned to access CloudTrail S3 bucket. Please fix before trying again.

这有一定道理,但是我现在实际是卡在了授权给自动创建的这个AccessAnalyzerMonitorServiceRole_ABCDEFGH角色S3桶的只读权限上!

我对AWS还不熟,所以也许做得没有章法或者明显漏掉了什么。我试着给账户A中的这个自动化创建的角色添加授权,我是在账户B的S3的logs这个桶的'Bucket Policy'上添加的。我在已经存在的Bucket Policy上附加了下面这段规则(只是CloudTrail logs桶的标准策略,就是想让账户A的CloudTrail能往里写log),但是我运行Policy Generator的时候报了同样的错误。

{
    "Sid": "IAMPolicyGeneratorRead",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::1234567890:role/service-role/AccessAnalyzerMonitorServiceRole_ABCDEFGHI"
    },
    "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:ListBucket"
    ],
    "Resource": [
        "arn:aws:s3:::aws-cloudtrail-logs-ABCDEFGHI",
        "arn:aws:s3:::aws-cloudtrail-logs-ABCDEFGHI/*"
    ]
}

有什么建议吗?能让这个运行起来。

profile picture
专家
已提问 10 个月前41 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好,

根据返回的消息,可以看出Account B中附加到S3日志桶的S3存储桶策略不允许Account A中IAM Access Analyzer的Service-linked角色读取存储在S3日志桶中的日志文件。如果使用AWS KMS Key来加密Cloudtrail日志文件[详见附录链接1],附加的Key策略不允许Account A中的Service-linked角色解密加密的日志文件。

正如在此AWS链接[详见附录链接2]中所指出的,您需要确保Account B中的S3日志桶已经附加了以下存储桶策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PolicyGenerationBucketPolicy",
      "Effect": "Allow",
      "Principal": {
        "AWS": ""
      },
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::<Log_Bucket_name>",
        "arn:aws:s3:::<Log_Bucket_name>/AWSLogs/organization-id/${aws:PrincipalAccount}/"
      ],
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "organization-id"
        },
        "StringLike": {
          "aws:PrincipalArn": "arn:aws:iam::${aws:PrincipalAccount}:role/service-role/AccessAnalyzerMonitorServiceRole*"
        }
      }
    }
  ]
}

如果在将Cloudtrail日志文件存储到S3日志桶之前使用AWS KMS加密了Cloudtrail日志文件,则还需要更新附加的KMS Key策略,以允许Service-linked角色解密加密的日志文件:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": ""
      },
      "Action": "kms:Decrypt",
      "Resource": "",
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:aws:cloudtrail:arn": "CROSS_ACCOUNT_ORG_TRAIL_FULL_ARN",
          "aws:PrincipalOrgID": "organization-id"
        },
        "StringLike": {
          "kms:ViaService": "s3..amazonaws.com",
          "aws:PrincipalArn": "arn:aws:iam::${aws:PrincipalAccount}:role/service-role/AccessAnalyzerMonitorServiceRole"
        }
      }
    }
  ]
}

此外,如果在账户B中对S3桶设置了ACLs来做访问控制,你会需要改变桶的Object Ownership设置。选择以下两个选项中的一个来设置Object Ownership:

  • Bucket owner enforced(推荐)
  • Bucket owner preferred

附录链接: [1] Encrypting CloudTrail log files with AWS KMS–managed keys (SSE-KMS) - https://docs.aws.amazon.com/awscloudtrail/latest/userguide/encrypting-cloudtrail-log-files-with-aws-kms.html

[2] IAM Access Analyzer policy generation - Generate a policy using AWS CloudTrail data in another account - https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html#access-analyzer-policy-generation-cross-account

希望这能帮到你!

profile picture
专家
已回答 10 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则