繁体   English   中英

允许从特定帐户的所有EC2实例访问S3存储桶

[英]Allow access to S3 Bucket from all EC2 instances of specific Account

有什么方法可以允许由特定AWS账户创建的所有实例访问S3存储桶?

我想提供对于客户端下载到其实例而言应该非常简单的数据。 理想情况下,可通过AWS ParallelClusterpost_install脚本选项自动进行。

但是,这似乎需要大量设置,如AWS在本教程中所述:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-instance-access-bucket/

这对我来说是不可行的。 客户端不必创建IAM角色。

目前,我想到的最好的办法是允许S3存储桶访问特定的AWS账户,然后使用访问密钥:

export AWS_ACCESS_KEY_ID=<key-id>
export AWS_SECRETE_ACCESS_KEY=<secret-key>

aws s3 cp s3://<bucket> . --recursive

不幸的是,这也不理想,因为我想提供现成的AWS Parallelcluster post_install脚本。 这些脚本应在群集启动时自动下载所需的数据。

有什么方法可以允许由特定AWS账户创建的所有实例访问S3存储桶?

是。 这是一个两步过程。 综上所述:
1)在您这一边,存储桶必须信任将要访问它的其他帐户的帐户ID,并且您必须确定允许哪些呼叫。
2)在将要访问存储桶的其他帐户上,必须授权这些实例使用IAM策略在您的存储桶上运行AWS API调用。

更详细地:

第1步:让我们解决这个问题并将其分解。 在您的存储桶上,您需要配置存储桶策略,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "111",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::ACCOUNT_ID_TO_TRUST:root"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME_HERE/*"
        }
    ]
}

您可以在AWS文档中找到更多存储桶策略示例。

警告1: “ arn:aws:iam :: ACCOUNT_ID:root”将信任所有有权连接到另一个AWS账户上您的存储桶的内容。 对于您要做什么,这不应该是一个问题,但最好是您完全了解此政策如何防止任何事故。

警告2:不要授予s3:* -您需要将范围缩小的权限,如行动s3:GetObject等等有一个网站,以帮助您生成这些政策在这里 s3:*将包含delete权限,如果使用不当,可能会导致令人讨厌的意外。

现在,一旦完成,就可以完成出色的工作-这就是您要做的事情。

步骤2:其他想要读取数据的帐户将必须为其启动的ec2实例分配一个实例角色,并且该角色将需要附加一个策略以授予对存储桶的访问权限。 然后,这些实例可以在您的存储桶上运行AWS CLI命令,前提是您的存储桶策略在您这边授权了该调用,而实例策略在他们这边授权了该调用。 需要附加到实例角色的策略应如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME_HERE/*"
    }
  ]
}

请记住,仅因为此策略授予s3:*并不意味着它们可以对您的存储桶执行任何操作,除非您的存储桶策略中包含s3:* 此策略的操作将仅限于您在存储桶策略中对权限进行范围限定的任何操作。

这对我来说是不可行的。 客户端不必创建IAM角色。

如果他们拥有一个AWS账户,则只要您定义一个信任他们账户的存储桶策略,其余的就取决于他们如何选择存储桶。 他们可以创建ec2实例角色并将其授予您的存储桶或IAM用户的权限,并授予其对您的存储桶的访问权限。 没关系

目前,我想到的最好的办法是允许S3存储桶访问特定的AWS账户,然后使用访问密钥:

如果代码将在ec2实例上运行,则不宜使用访问密钥,而应使用ec2实例角色。

理想情况下,在实例启动时通过CloudFormation自动执行。

我认为您的意思是通过实例userdata ,您可以通过CloudFormation进行定义。

您说“客户端不必创建IAM角色”。 这是完全正确的。

我假设正在创建供客户端使用的实例。 如果是这样,那么应该创建一个可以访问所需存储桶的IAM角色。

然后,在为客户端创建Amazon EC2实例时,将IAM角色关联到该实例。 然后,您的客户端将能够使用AWS命令行界面(CLI)访问S3存储桶(列出,上传,下载或您赋予IAM角色的任何权限)。

如果要在首次创建实例时自动下载数据,则可以添加将在实例启动时执行的用户数据脚本 这样可以将文件从S3下载到实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM