使用角色从另一个帐户访问AWS S3存储桶

Dea*_*lls 10 amazon-s3 amazon-ec2 amazon-web-services

首先,我的问题与问题非常相似,但因为我找不到"我也是!" 链接,自1月1日以来一直未得到答复,我想我会问这里.如果这是错误的,请告诉我.

好的,所以这是我的问题.我有两个AWS账户,我们称之为Prod和Audit.在Prod中,我有许多EC2实例,都有自己定义的特定IAM角色.在Audit中,我有很多S3存储桶.

我需要做的是,仅使用IAM角色,使用Prod帐户中的特定IAM角色,从特定计算机访问审计帐户中的S3存储桶.

我已经看到许多答案谈论组策略,资源策略和让IAM用户担任角色等,但正如我所说,我在EC2实例上使用IAM角色,没有组,用户等.

我不想在任何实例的任何地方拥有凭证,无论是AWS Best Practices.

这可能吗?是否有其他安全的方法可以做到这一点,而不涉及用户或凭据?任何和所有的帮助非常感谢,谢谢!

注意:

我试图允许访问Audit S3存储桶的Prod EC2实例上运行的应用程序是Logstash.我已经确认在将日志推送到Prod S3存储桶时设置工作,而不是审计.我也试过使用S3 Bucket Policy也没有成功.

我添加的S3 Bucket Policy如下:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "CrossAccountPolicy",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::<Prod Account ID>:root"
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::logstash.prod.logs",
            "arn:aws:s3:::logstash.prod.logs/*"
        ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

附加到Prod EC2实例的IAM角色的内联策略:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::<Audit Account ID>:role/ProdLogstashPush"
  }
}
Run Code Online (Sandbox Code Playgroud)

附加到审计帐户中的IAM角色的策略:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::logstash.prod.logs/*",
            "arn:aws:s3:::logstash.prod.logs"
        ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我目前正在尝试流利/ td-agent,因为我认为它允许使用sts:AssumeRole,理论上它允许这种设置工作.

院长

Jam*_*mes 4

是的,这是可能的。我相信您可以使用角色或 S3 存储桶策略来完成此操作。有关参考,请参阅IAM 角色与基于资源的策略有何不同,其中使用类似的 S3 场景作为示例。

使用角色

  1. 在审核账户中,设置跨账户角色

    a.) 添加授予对 S3 存储桶适当读/写访问权限的策略。

    b.) 添加指定 Prod 帐户的信任策略。

  2. 在产品账户中,创建或修改您的 EC2 角色(实例配置文件)

    a.) 允许您的 EC2 实例为审核账户的共享角色调用 AssumeRole

    b.) 允许您的 EC2 实例写入 S3(特定审核存储桶或任何存储桶)

  3. 在您的应用程序中,调用 sts:AssumeRole 来获取临时凭证以写入审核帐户的 S3 存储桶。各种 AWS 开发工具包都有相当简单但略有不同的方法来从角色创建新的临时凭证。

使用 S3 存储桶策略

您还可以通过审核帐户的 S3 存储桶上的资源策略来执行此操作,授予对产品帐户的访问权限,但不在产品帐户中指定特定用户。 授予跨账户上传对象的权限,同时确保存储桶所有者具有完全控制权 有一个类似示例的存储桶策略示例。此方法的优点是您的 Prod 帐户角色能够直接写入存储桶,而无需先从 sts:AssumeRole 获取临时凭证。有两件事要做:

  1. 在审核帐户中,设置 S3 存储桶策略以允许 Prod 帐户访问。您上面的 S3 存储桶策略对我来说看起来不错。

  2. 在 Prod 账户中,允许 EC2 实例配置文件角色写入 S3。

您可以尝试使用 AmazonS3FullAccess 托管策略进行调试,但您可能希望最终指定策略中的资源。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)