如何获取用户添加S3权限的规范ID

时间:2017-07-18 14:46:48

标签: amazon-web-services amazon-s3

我想为特定用户添加S3权限。 AWS控制台正在向我询问用户的Canonical ID。 我使用AWS CLI命令aws iam list-users来检索用户列表,但没有“Canonical ID”字段,并且无法识别“User ID”,这给我一个“Invalid ID”消息。我也尝试过使用ARN,但它没有用。

11 个答案:

答案 0 :(得分:13)

要向存储桶上的IAM用户授予权限,您需要创建存储桶策略 - 这是一个JSON文档。 ACL中的“访问其他AWS账户”选项用于授予对其他(完全独立的)根AWS账户的访问权限,而不是授予您自己的root账户中IAM用户的访问权限。

创建/编辑政策

要访问存储桶策略,请浏览到S3 Web控制台中的存储桶。在那里,您将看到概述/属性/权限/管理选项卡。在权限下,有一个名为“Bucket Policy”的子选项卡。在Bucket Policy页面的底部有一个指向“Policy Generator”的链接,它将为您生成JSON。 (或直接链接是http://awspolicygen.s3.amazonaws.com/policygen.html

识别IAM用户以分配权利

要识别您要授予其权限的IAM用户,您将使用ARN(亚马逊资源名称)。 IAM用户的ARN格式如下:“arn:aws:iam :: {Account-ID}:user / {Username}”(注意花括号不是格式的一部分)。 IAM ARN的示例如下所示: arn:aws:iam :: 100123456789:user / Daniel

要获取您的数字帐户ID,请以root用户身份登录并单击页面右上角的用户名,然后选择“我的帐户”(将您带到https://console.aws.amazon.com/billing/home?#/account)。帐户ID列在页面顶部的“帐户设置”下。

将用户ARN插入策略生成器的“Principal”字段,并从下拉列表中选择要授予用户的操作。

指定在

上授予权限的内容

要为存储桶中的存储桶或一组文件(对象)授予权限,您需要在“Amazon资源名称”字段中输入标识存储桶的ARN或存储桶中的某些对象子集(例如,如果我有一个名为 daniels-stuff 的存储桶以及该存储区中名为 images 的文件夹,我想授予其访问权限,那么我可以提供一个ARN,例如 arn :AWS:S3 :::丹尼尔斯-东西/图像/ *

在输入必要信息后点击“添加声明”,然后点击“生成政策”。请注意,您可以将多个语句(访问权限分配)放入一个策略中。

更多信息

最后,对https://brandonwamboldt.ca/understanding-s3-permissions-1662/的s3存储桶策略有一个很好的入门,其中包含一些示例策略。

祝你好运(虽然我认为你现在可能已经解决了你的问题,其他人可能会觉得这很有用)。

答案 1 :(得分:9)

您可以使用两种解决方案授予此用户访问Amazon S3存储桶和内容的权限

  1. IAM User Policies

    {
      "Version": "2012-10-17",
      "Id": "9758b97b-6fe0-4ba3-b5bd-3d0fe8896a83",
      "Statement": [
       {
        "Sid": "AllowMyUser",
        "Effect": "Allow",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YOUR bucket name /*"
       }
      ]
    }
    
  2. Bucket Policy

    {
      "Version": "2012-10-17",
      "Id": "9758b97b-6fe0-4ba3-b5bd-3d0fe8896a83",
      "Statement": [{
        "Sid": "AllowMyUser",
        "Effect": "Allow",
        "Principal": {
            "AWS": "YOUR IAM User AWSId"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YOUR bucket name /*"
     }]
    }
    
  3. AWS CLI iam user返回可在S3中使用API documentation个状态的UserId

      

    例如,您可以创建名为David的IAM用户。您的公司使用Amazon S3,每个员工都有一个带文件夹的存储桶;存储桶具有基于资源的策略(存储桶策略),允许用户仅访问存储桶中自己的文件夹。假设名为David的员工离开您的公司并删除相应的IAM用户。但后来另一位名叫David的员工开始创建一个名为David的新IAM用户。如果存储桶策略指定名为David的IAM用户,则该策略最终可能会授予新David访问前David所留下的Amazon S3存储桶中的信息。

    https://docs.aws.amazon.com/IAM/latest/APIReference/API_User.html

答案 2 :(得分:3)

用户的规范ID最容易通过调用来查找,因为要查找其ID的用户是aws s3api list-buckets:

aws --profile PROD s3api list-buckets
{
    "Owner": {
        "DisplayName": "a-display-name",
        "ID": "a-64?-char-hex-string"  <<-- this HERE is the canonical user ID
    },
    "Buckets": [
        {
            "CreationDate": "2018-03-28T21:50:56.000Z",
            "Name": "bucket-1"
        },
        {
            "CreationDate": "2018-03-22T14:08:48.000Z",
            "Name": "bucket-2"
        }
    ]
}

使用此ID,您可以调用s3api来授予访问权限 - 例如,提供读取权限 - 如下所示:

aws --profile OTHER s3api put-object-acl \
    --bucket bucket-3 \
    --key path/to/file \
    --grant-read id="the-64-char-hex"

答案 3 :(得分:3)

要获取规范ID,最简单的方法之一是使用CLI并运行aws s3api list-buckets命令。您将在输出中获得ID。

还有其他获取规范ID的方法,并且在aws文档中有明确说明:https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html

列表桶AWS文档:https://docs.aws.amazon.com/cli/latest/reference/s3api/list-buckets.html

答案 4 :(得分:1)

1。使用以下JSON创建新策略

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:scoped_model/scoped_model.dart';

class UserModel extends Model {
  bool _isLoading = true;

  bool get isLoading => _isLoading;

  String _name;

  String get name => _name;

  String _avatarUrl;

  String get avatarUrl => _avatarUrl;

  Timestamp _creationDate;

  Timestamp get creationDate => _creationDate;

  List _myGroups;

  List get myGroups => _myGroups;

  // Get the ID of the currently logged in user
  Future<String> loadUserId() async {
    FirebaseUser user = await FirebaseAuth.instance.currentUser();
    return user != null ? user.uid.toString() : null;
  }

  // Load user data
  Future loadData() async {

    // Set model to loading
    _isLoading = true;

    // Notify listeners
    notifyListeners();

    DocumentReference reference =
        Firestore.instance.collection('users').document(await loadUserId());
    DocumentSnapshot snapshot = await reference.get();

    _name = await snapshot['nickname'];
    _avatarUrl = await snapshot['avatarUrl'];
    _creationDate = await snapshot['timestamp'];
    _myGroups = await snapshot['myGroups'];

    // Set loading to false = data is loaded
    _isLoading = false;

    // Notify listeners. Data is ready
    notifyListeners();

  }
}

** 2。将策略分配给用户或用户组

注意:

我一直遇到{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<your_bucket_name_here>" }, { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:DeleteObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<your_bucket_name_here>/*" } ] } 错误,因为我缺少上面的JSON数组中的前2个对象。您必须授予用户权限:

  • 查看您所有的水桶
  • 列出特定存储桶并获取其位置

在完全没有机会对存储桶内容执行任何操作之前。

答案 5 :(得分:1)

如何在AWS中查看规范ID。

在顶部,单击您的用户帐户下拉框。 单击我的安全证书。 在控制台中单击帐户标识符 请不要分享您的凭据信息。 To view the Canonical ID in AWS

Pala(VR.PL)

答案 6 :(得分:0)

请确保在行末使用*来授予所有权限!

arn:aws:s3:::daniels-stuff/images/*

答案 7 :(得分:0)

您还可以从CLI命令获取IAM用户的规范ID:

列出所有存储桶和您的iam Canonical ID:

aws s3api list-buckets

如果您只想获取您的规范ID:

aws s3api list-buckets | grep ID

请记住,以上命令是通过CLI完成的,您应该已经在CLI中进行了设置。

答案 8 :(得分:0)

要找到帐户的规范ID,请执行以下步骤:

  1. 单击位于顶部菜单栏中的用户名。
  2. 将出现一个下拉列表。选择我的安全凭证
  3. 有规范的用户ID

答案 9 :(得分:0)

将此粘贴​​到终端机

aws s3api list-buckets --query "Owner.ID"

答案 10 :(得分:-3)

如果您不是ROOT用户,还有另一种方法可以找到您的规范名称

您需要使用CLI(使用访问密钥和密钥)进行日志记录,然后输入

aws iam list-users

它将显示以下信息

{
    "Users": [
        {
            "UserName": "yoda",
            "PasswordLastUsed": "2018-02-24T17:47:15Z",
            "CreateDate": "2018-02-11T02:23:11Z",
            "UserId": "AIDASDY9WSX6QD",    <== Canonical Name
            "Path": "/",
            "Arn": "arn:aws:iam::7783412456453:user/yoda"
        }
    ]

注意:编辑了用户ID和ARN原件: - )

我希望这会有所帮助

理学