実現したいこと
AWS Cognitoで認証されたユーザにS3の画像のアップロード, 閲覧, 及び削除権限を与えたい。
現状
以下のプログラムを作成しましたが、アクセス権限がないと怒られます。
Javascript
1AWS.config.region = region; 2AWS.config.update({ 3 credentials: new AWS.CognitoIdentityCredentials({ 4 RoleArn: "arn:aws:iam::[Account ID]:role/[Role name]", 5 IdentityPoolId: [Cognito IdentityPoolId] 6 }) 7}); 8var bucket = new AWS.S3({ 9 params: { 10 Bucket: [Bucket name] 11 } 12}); 13var params = { 14 Key: [File name], 15 ContentType: [File type], 16 Body: [File] 17}; 18bucket.putObject(params, function(err, data) { 19 if (err) console.log(err); 20 else console.log(data); 21});
エラー内容は以下の通りです。
1回目の実行では、
Missing credential in config
というエラーが出て、2回目以降では、
Access Denied
というエラーが出る挙動も何か関係しているのでしょうか?
原因の可能性としては、
- IAMロールの設定が間違っている
- コードに誤りがある
のどちらかにあると思うのですが、ご教授いただけませんでしょうか。。。
作業内容
IAMのロールを以下のように設定しました。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPublicCognitoIdentity", "Effect": "Allow", "Action": [ "cognito-identity:*", "mobileanalytics:PutEvents", "cognito-sync:*" ], "Resource": "*" }, { "Sid": "AllowPublicS3Bucket", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::[Bucket name]" ], "Condition": { "StringLike": { "s3:prefix": [ "cognito/[Cognito App name]/" ] } } }, { "Sid": "AllowPublicS3Object", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::[Bucket name]/cognito/[Cognito App name]/${cognito-identity.amazonaws.com:sub}", "arn:aws:s3:::[Bucket name]/cognito/[Cognito App name]/${cognito-identity.amazonaws.com:sub}/*" ] } ] }
参考にしたページ
Amazon S3: Amazon Cognito ユーザーにバケット内のオブジェクトへのアクセスを許可する
サーバーレスでJavaScript だけで画像ファイルをアップロードする方法
回答1件
あなたの回答
tips
プレビュー