4

ユーザーが自分の資格のあるフォルダーにのみアクセスできるIAMポリシーを実装しようとしています。このコードはAmazonのドキュメントから入手しました

ユーザーが企業バケットのホームディレクトリにあるオブジェクトのみを一覧表示できるようにする

この例は、ボブにホームディレクトリを与える前の例に基づいています。ボブがホームディレクトリ内のオブジェクトを一覧表示できるようにするには、ListBucketにアクセスする必要があります。ただし、結果には、バケット内のすべてではなく、ホームディレクトリ内のオブジェクトのみが含まれるようにする必要があります。その方法で彼のアクセスを制限するには、s3:prefixというポリシー条件キーを使用し、値をhome /bob/に設定します。これは、プレフィックスがhome /bob/のオブジェクトのみがListBucket応答で返されることを意味します。

{
  "Statement":[{
    "Effect":"Allow",
    "Action":"s3:ListBucket",
    "Resource":"arn:aws:s3:::my_corporate_bucket",
    "Condition":{
      "StringLike":{
      "s3:prefix":"home/bob/*"
    }
  }]
}

これは私にはうまくいきません。コードを実行すると、すべてのフォルダーとサブフォルダーが表示されます。私の変更したコードは次のようになります。

{
  "Statement":[{
    "Effect":"Allow",
    "Action":"s3:ListBucket",
    "Resource":"arn:aws:s3:::Test-test",
    "Condition":{
      "StringLike":{
      "s3:prefix":"Test/*"
    }
  }]
}

上記のポリシーに関連付けられているユーザーのクレデンシャルを使用してc#でコードを実行すると、「テスト」の下にあるフォルダーだけでなく、すべてのフォルダーが取得されます...助けていただければ幸いです。

4

2 に答える 2

7

私はついにそれを働かせました。AWS管理コンソールにバグがあると思いますが、少なくともそのようです。問題は、私のポリシーはずっと正しかったのですが、AWS マネジメント コンソールと CloudBERry のようなソフトウェアを介してアクセスすると、動作が異なることです。私が変更しなければならなかったことの 1 つは、オブジェクトとバケットの ACL 設定でした。これも、AWS コンソールが適切に機能していれば、以前に行われたはずです。とにかく、ここに私のポリシーがあります:

{
  "Statement": [

    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "arn:aws:s3:::*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:ListBucketVersions"
      ],
      "Resource": "arn:aws:s3:::pa-test",
      "Condition": {
        "StringLike": {
          "s3:prefix": "test/*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::pa-test/test/*",
      "Condition": {}
    }
  ]
}

1) 問題は、AWS コンソールを介してこの IAM ユーザーの管理コンソールにアクセスすると、バケットをクリックするとアクセスが拒否されることですが、Cloudberry を介してログインするとフォルダーが表示されます。2) バケットの ACL 設定とバケットのオブジェクト (フォルダー) を変更する必要がありました: 所有者: フル コントロール 認証済みユーザー: 読み取り専用

私のフォルダの場合: 所有者: フル コントロール

問題は、AWS コンソールでフォルダー (オブジェクト) の ACL 設定を設定できないことです。ファイル(オブジェクト)に設定できます。たとえば、バケット内のフォルダー (オブジェクト) を右クリックして [プロパティ] をクリックしても、権限タブは表示されません。ただし、バケットまたはファイル (たとえば、test.html) を右クリックして [プロパティ] をクリックすると、アクセス許可タブが表示されます。他の誰かがこの問題に気づいたかどうかはわかりません。とにかく、それは私のスクリプトであり、現在は機能しています。

于 2012-05-17T04:33:57.543 に答える
2

listBucketに期待する結果は、そのようには発生しません。ポリシーでは、バケットポリシーに従って、オブジェクトの許可と拒否にのみアクセスできるためです。ListBucketはすべてのオブジェクトを一覧表示しますが、アクセスできるのはプレフィックスフォルダーとそのコンテンツのみです。

フォルダのみを一覧表示する場合は、IAMポリシーを読み取り、プレフィックス文字列を取得してからそのプレフィックスを使用して一覧表示するようにコーディングする必要があります。そうすると、目的のフォルダのみが取得されます。これまで、Amazons3ではそのようなオプションが提供されていなかったためです。

于 2012-05-11T05:54:52.390 に答える