• AWS入门实践-S3 精细化权限控制


    Amazon S3的精细访问控制使你能够精确地管理对S3资源的访问权限。这是通过一系列的权限管理工具和选项来实现的,包括身份与访问管理(IAM)策略、存储桶策略、访问控制列表(ACL)和预签名URL。

     

    一、身份与访问管理(IAM)策略

     

    IAM策略使你能够授予用户、组或角色对S3资源的访问权限。这些策略是JSON格式的文档,定义了一系列的权限和条件。

    • 示例:假设你有一个名为“ProjectData”的存储桶,你希望仅允许特定的IAM用户“DataAnalyst”访问该存储桶中的所有对象。你可以创建一个IAM策略,授予“DataAnalyst”对“ProjectData”存储桶的“s3:GetObject”权限。

     

    以下是允许IAM用户"DataAnalyst"访问"ProjectData"存储桶中所有对象的IAM策略JSON内容:

    1. {
    2. "Version": "2012-10-17",
    3. "Statement": [
    4. {
    5. "Effect": "Allow",
    6. "Action": "s3:GetObject",
    7. "Resource": "arn:aws:s3:::ProjectData/*",
    8. "Principal": {
    9. "AWS": "arn:aws:iam:::user/DataAnalyst"
    10. }
    11. }
    12. ]
    13. }

    解释:

    • Version: 策略语言的版本,使用2012-10-17
    • Statement: 一个或多个语句块的列表。
    • Effect: 语句的结果,允许或拒绝。在这种情况下,我们允许。
    • Action: 要允许或拒绝的操作。在这种情况下,我们允许s3:GetObject操作,即从存储桶中获取对象。
    • Resource: 要应用语句的资源。在这种情况下,它是ProjectData存储桶中的所有对象(arn:aws:s3:::ProjectData/*)。
    • Principal: 要授予权限的IAM用户或角色。在这种情况下,它是IAM用户DataAnalyst(arn:aws:iam:::user/DataAnalyst)。请将替换为您的AWS账户ID。

    这个策略授予IAM用户"DataAnalyst"从"ProjectData"存储桶中获取任何对象的权限。请注意,您需要将替换为您自己的AWS账户ID。

    二、存储桶策略

     

    存储桶策略是附加到存储桶上的权限策略,允许你控制对存储桶及其内部对象的访问。与IAM策略类似,存储桶策略也是JSON格式的文档。

    • 示例:假设你希望公开存储桶“PublicImages”中的所有图片,使得任何人都可以查看这些图片。你可以向该存储桶添加一个存储桶策略,授予匿名用户(即公共访问)“s3:GetObject”权限。

     

    以下是允许公共访问"PublicImages"存储桶中所有对象的存储桶策略JSON内容:

    1. {
    2. "Version": "2012-10-17",
    3. "Statement": [
    4. {
    5. "Effect": "Allow",
    6. "Principal": "*",
    7. "Action": "s3:GetObject",
    8. "Resource": "arn:aws:s3:::PublicImages/*"
    9. }
    10. ]
    11. }

    解释:

    • Version: 策略语言的版本,使用2012-10-17
    • Statement: 一个或多个语句块的列表。
    • Effect: 语句的结果,允许或拒绝。在这种情况下,我们允许。
    • Principal: 要授予权限的用户或角色。在这种情况下,使用*通配符表示任何人(公共访问)。
    • Action: 要允许或拒绝的操作。在这种情况下,我们允许s3:GetObject操作,即从存储桶中获取对象。
    • Resource: 要应用语句的资源。在这种情况下,它是PublicImages存储桶中的所有对象(arn:aws:s3:::PublicImages/*)。

    这个存储桶策略授予任何人(公共访问)从"PublicImages"存储桶中获取任何对象的权限。这使得存储桶中的所有图片对公众可见。请注意,在生产环境中,您应该仅在必要时才授予公共访问权限,并确保不会意外公开敏感数据。

    三、访问控制列表(ACL)

     

    ACL是一种较为传统的权限控制方式,允许你管理对存储桶和对象的访问。每个存储桶和对象都有一个ACL,你可以指定谁可以读取或写入这个存储桶或对象。

    • 示例:如果你想让特定的AWS账户能够上传(写入)文件到你的“UploadBucket”存储桶,你可以通过配置该存储桶的ACL来实现,为那个账户赋予写入权限。

     

    要授予特定 AWS 账户对 "UploadBucket" 存储桶的写入权限,你可以使用以下 ACL 配置:

    1. {
    2. "Owner": {
    3. "ID": "YOUR_AWS_ACCOUNT_ID"
    4. },
    5. "Grants": [
    6. {
    7. "Grantee": {
    8. "Type": "CanonicalUser",
    9. "ID": "YOUR_AWS_ACCOUNT_ID"
    10. },
    11. "Permission": "FULL_CONTROL"
    12. },
    13. {
    14. "Grantee": {
    15. "Type": "CanonicalUser",
    16. "ID": "ACCOUNT_ID_TO_GRANT_WRITE_ACCESS"
    17. },
    18. "Permission": "WRITE"
    19. }
    20. ]
    21. }

    解释:

    • Owner: 存储桶所有者的 AWS 账户 ID。
    • Grants: 一个授权列表,指定谁对该存储桶拥有什么权限。
    • Grantee: 被授予权限的实体,可以是 AWS 账户或预定义的 Amazon S3 组。
    • Type: 实体类型,在这里是 CanonicalUser,表示 AWS 账户。
    • ID: AWS 账户 ID。
    • Permission: 授予的权限。FULL_CONTROL 表示对存储桶拥有完全控制权限,WRITE 表示对存储桶拥有写入权限。

    在这个示例中,第一个 Grant 条目授予存储桶所有者完全控制权限。第二个 Grant 条目授予指定的 AWS 账户 ID 对 "UploadBucket" 存储桶的写入权限。

    四、预签名URL

    预签名URL是一种授权临时访问S3对象的方法。通过为请求签名并指定有效期限,你可以生成一个URL,任何人都可以在有效期内使用该URL访问特定的S3对象。

    执行此命令后,它将输出一个长的预签名URL,类似于:

    https://your-bucket-name.s3.your-aws-region.amazonaws.com/path/to/video.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=YOUR_AWS_ACCESS_KEY_ID%2F20230501%2Fyour-aws-region%2Fs3%2Faws4_request&X-Amz-Date=20230501T000000Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=CALCULATED_SIGNATURE
    

    您可以将此预签名URL提供给用户,用户在1小时的有效期内可以使用该URL下载或观看私有视频文件,无需进一步的身份验证。

    请注意,生成预签名URL需要您拥有足够的权限来访问该对象。此外,出于安全考虑,预签名URL应该被视为敏感信息,并且仅在必要时才提供给用户。

    • 示例:假设你正在开发一个应用程序,需要向用户提供一个私有视频文件的临时访问。你可以为该视频文件生成一个有效期为1小时的预签名URL,并将URL提供给用户,用户在有效期内可以通过该URL下载或观看视频。
    • 要为私有视频文件生成一个有效期为1小时的预签名URL,可以使用AWS CLI的aws s3 presign命令。以下是命令示例:

      aws s3 presign s3://your-bucket-name/path/to/video.mp4 --expires-in 3600 --region your-aws-region
      

      解释:

    • aws s3 presign:AWS CLI命令,用于为S3对象生成预签名URL。
    • s3://your-bucket-name/path/to/video.mp4:要生成预签名URL的私有视频文件对象的S3路径。
    • --expires-in 3600:指定预签名URL的有效期为3600秒,即1小时。
    • --region your-aws-region:指定您的AWS区域,例如us-west-2

    精细访问控制为S3用户提供了灵活且强大的权限管理工具,使你能够根据自己的需求和安全策略精确地控制对S3资源的访问。通过合理配置IAM策略、存储桶策略、ACL和预签名URL,你可以确保数据的安全性,同时允许必要的数据共享和协作。

  • 相关阅读:
    Android控件拖拽后页面刷新回来原始位置问题
    Ubuntu20详细安装步骤
    相控阵天线(四):阵列天线波束赋形(遗传算法、粒子群算法、进化差分算法)
    《Linux篇》01.Linux简介安装与常用命令
    TransFuse跑自己的数据集
    VUE-cesium(综合demo-01配置基础项)
    人工智能和AR/VR:AI在AR和VR中扮演什么角色?行业应用有哪些?
    关于linux系统can收发,以及jetson系列can收发的说明,以及SN65HVD230 CAN board和MCP2515和TJA1050的区别是什么?
    ftp命令大全详解
    树状数组——数组两种初始化方式+单点增加+查询前缀和+插入
  • 原文地址:https://blog.csdn.net/weixin_39108752/article/details/137392631