AWS Bucket Policy - 何时使用

AWS Bucket Policy - 何时使用

我正在尝试创建一个存储桶策略,该策略将授予来自 ec2 或 ecs 实例的访问权限,以便授予它们将对象放在特定存储桶上的权限。

我有几个基本问​​题:

1) 如果您只想授予从 ec2 到同一帐户内存储桶的访问权限,那么存储桶策略是否正确? 文档似乎多次提到跨帐户访问。

2) 为了实现这一目标,应该遵循什么原则?例如,我可以设置一个原则,简单地说“授予此 aws 帐户中任何资源的访问权限”吗?

3) 我通过在原则中指定 ec2 实例的 IAM 角色来实现这一点(见下文)。但这是首选方法吗?

{
"Version": "2012-10-17",
"Id": "Policy1563569774763",
"Statement": [
    {
        "Sid": "Stmt1563569772515",
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "arn:aws:iam::XXXX:role/S3_Read_All"
            ]
        },
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::some-test-bucket-12345/*"
    }
]

}

提前谢谢您!我很难理解这一点。

答案1

你的直觉是对的。如果你只想授予对同一账户中存储桶的访问权限,那么可能更简单的是使用 IAM 策略。您可以将此类政策附加到角色,然后它会附加到 EC2 实例。

需要注意的一点是,考虑第一个链接中的政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::bucket-name"]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": ["arn:aws:s3:::bucket-name/*"]
        }
    ]
}

第一条语句“ListObjectsInBucket”将资源设置为存储桶。ARN 为arn:aws:s3:::bucket-name(没有*there)。第二条语句将 arn 设置为arn:aws:s3:::bucket-name/*。there/*表示“存储桶 bucket-name 中的所有对象”。一些 IAM 操作适用于存储桶,其他操作适用于对象。

您还可以使用前缀,例如arn:aws:s3:::bucket-name/prefix*,这将允许访问名称以“前缀”开头的所有对象。请记住,S3 中对象的名称是全名,包括路径标记(“/”),因此是“/path/to/object”,而不仅仅是“object”。S3 中没有目录。

另一件事是,当您将角色附加到 EC2 实例时,您会为有权访问该实例的任何人提供与该角色相同的权限。因此,请确保任何可以登录 EC2 实例的用户也应该有权访问 S3 存储桶。

请记住,对象(用户、ec2 实例、lambda 函数等)对存储桶的访问级别由结合 IAM 策略和存储桶策略而产生的策略集决定。并且拒绝语句具有优先权。当对象和存储桶都在同一个帐户中时,您只需使用其中之一,并且 IAM 策略可能是自然选择。在跨帐户访问中,存储桶策略基本上用于授予其他帐户对存储桶的访问权限。另一个帐户中也设置了 IAM 策略。

相关内容