私はAWSで実際に失敗しています。 IAMユーザーがファイルを完全に公開するだけでなく、S3バケットからファイルをダウンロードできるようにしたいのですが、アクセスが拒否されます。誰かがオフになっているものを見つけることができれば、私は興奮します。
これまでに行ったこと:
aws s3 cp --profile my-user s3://my-bucket/thing.Zip .
_バケットポリシー:
_{
"Id": "Policy1384791162970",
"Statement": [
{
"Sid": "Stmt1384791151633",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/my-user"
}
}
]
}
_
結果はA client error (AccessDenied) occurred: Access Denied
ですが、同じコマンドとデフォルト(ルートアカウント?)のアクセスキーを使用してダウンロードできます。
ユーザーポリシーも追加してみました。なぜ必要なのかはわかりませんが、傷つけないと思い、ユーザーに添付しました。
_{
"Statement": [
{
"Sid": "Stmt1384889624746",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
_
同じ結果。
私もこれに苦労していましたが、ここで答えを見つけました https://stackoverflow.com/a/17162973/1750869 この問題の解決に役立ちました。以下の回答を再投稿します。
すべての人にアクセス許可を開く必要はありません。 IAMユーザーを使用して、あるアカウントのバケットから別のアカウントにバケットをコピーするには、ソースと宛先で以下のバケットポリシーを使用します
コピー元のバケット– SourceBucket
コピー先のバケット– DestinationBucket
ソースAWSアカウントID-XXXX–XXXX-XXXX
ソースIAMユーザー-src–iam-user
以下のポリシーは、– IAMユーザー-XXXX–XXXX-XXXX:src–iam-userがSourceBucket/*のs3:ListBucketおよびs3:GetObject特権とDestinationBucket/*のs3:ListBucketおよびs3:PutObject特権を持っていることを意味します
SourceBucketでは、ポリシーは次のようになります。
{
"Id": "Policy1357935677554",
"Statement": [
{
"Sid": "Stmt1357935647218",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::SourceBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
},
{
"Sid": "Stmt1357935676138",
"Action": ["s3:GetObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3::: SourceBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}
]
}
DestinationBucketでは、ポリシーは次のようになります。
{
"Id": "Policy1357935677554",
"Statement": [
{
"Sid": "Stmt1357935647218",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3::: DestinationBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
},
{
"Sid": "Stmt1357935676138",
"Action": ["s3:PutObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3::: DestinationBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}
]
}
実行するコマンドはs3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1
同じ問題に直面したとき、AWSではサーバー側の暗号化を有効にする必要があることがわかりました。したがって、次のコマンドは私にとってうまくいきました:
aws s3 cp test.txt s3://my-s3-bucket --sse AES256
Jamesが述べた「Any authentication AWS user」オプションはお勧めしません。
そうすることで、任意のAWSアカウント(IAMユーザーだけでなく)がそのバケットのリスト/削除/変更-aclsを行えるようにするバケットレベルのACLが追加されます。
つまり、awsアカウントを持っている人は誰でも読み書きできます。
私はなんとかしてポリシーを書くことなくこれを修正しました-S3コンソール(web ui)からバケットを選択し、許可タブで "Any Authenticated AWS User"を選択してすべてのボックスにチケットを発行しました。
PDATE:コメントで指摘されているように、「Any Authenticated AWS User」は、アカウントのユーザーだけではなく、すべてのAWS認証ユーザーです。注意して使用してください
IAMポリシーが正しく設定されている場合でも、認証情報のMFA(Multi-Factor Authentication)要件により、An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
のようなエラーが発生する可能性があります。すでにAWSコンソールにログインしている場合、認証情報は正常に機能しているように見え、aws cliからのアクセス許可拒否のエラーメッセージは特に役に立ちません。
Aws cliを使用してMFAを設定する方法については、すでにいくつかの良い説明があります。
基本的に、あなたはあなたのMFAデバイスのアドレスに到達する必要があり、そして一時的なトークンを得るためにあなたのデバイスからのコードでそれを送る必要があります。
私は単にwebUIをオンにしてバケットをクリックし、権限に移動してから、ポリシーに移動しました。私がそれを開いたとき、私は単に削除をクリックしました。これも構成だったと思うので、これを行いました。
メインのs3ページに戻り、バケットをクリックして削除しようとしたところ、うまくいきました。
私がaws-cliでそれをやったときでも
$ aws s3 rb s3://bucket-name --force
とにかく、それは私のために働いたものです。権限に関するポリシーにより、バケットを削除できません。
実行しようとしただけでこのエラーが発生した場合:
aws s3 cp s3://[bucketName]/[fileName] .
権限のないフォルダ内。ばかげていますが、次に進む前に、自分がいるフォルダの所有者であることを確認してください!
この問題は、無効なリソースまたはオブジェクト名を挿入したときに発生します。boto3で同じ問題が発生しました(私の場合は無効なバケット名です)。