タグ付けされた質問 Amazon Simple Storage Service (S3)
コンテンツの言語: 日本語
並べ替え 最新
プライベートEC2からエンドポイント型S3への接続テスト
EC2インスタンスをパブリックサブネットに立てパブリック経由よりプライベートサブネットにあるEC2インスタンスに接続しています。
プライベートEC2インスタンスからエンドポイント型のS3に問題なく接続出来ているか確認したいです。
接続確認できる方法ありますでしょうか。
OSはwindows2019になります。
XamarinのAndroid・iOS開発で、AmazonS3Client.GetPreSignedURL()をコールしてみましたが、
応答が返ってこない状況です。
AmazonS3Client.GetPreSignedURL()は、XamarinのAndroid・iOS開発で、使用可能でしょうか?
S3に、ファイルA、ファイルBの2つのファイル両方が、同日中に、アップロードされたことを契機に、Lambdaを実行したいと考えています。
特定の1ファイルがアップロードされた場合のLambda実行は下記のイベントパターンで、実装できました。
※片方だけだった場合には発火されない仕様としたいです。
※S3へのファイルアップロードは日に1回、それぞれ別のタイミングでアップロードされます。
下記 "key" を 複数指定すればよいのかとも考えましたが、うまくいっておりません。
実現可否、可能なら方法についてご回答いただけますと幸いです。
Amazon EventBridgeイベントパターン
```
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["s3-trigger-test"]
},
"object": {
"key": [{
"prefix": "trigger/test.txt"
}]
}
}
}
```
以上です、よろしくお願いいたします。
### アクセスポイントの設定時にエラーが発生し、解決方法がわからないため質問させて頂きます。
### ■状況
・S3バケットに保存したファイルをインターネットアクセスを許可し、URLアクセス
⇒アクセス可能
・上記バケットに対しアクセスポイントを設定し、アクセスポイントのURLを利用して同じファイルに対してアクセス
⇒下記エラー表示
<Code>InvalidRequest</Code>
<Message>The authorization mechanism you have provided is not supported. Please use Signature Version 4.</Message>
初歩的な設定漏れな気がしますが原因がわからず、アドバイアス頂けると幸いです。
特定のタグ情報(キーと値)が付与されたリソース(EC2インスタンス、S3バケット)の操作が可能となる制御をポリシーで実装したいと考えております。
「ec2:ResourceTag」や「s3:ResourceTag」を使用することで実現できると想定しており、以下のポリシーを適用したところ、マネジメントコンソール上から全てのEC2インスタンス、S3バケットが表示されない状態となってしまいます。
エラーメッセージは「インスタンスデータ You are not authorized to perform this operation. の取得中にエラーが発生しました。」と表示されます。
IAMポリシーにて特定のタグ情報が付与されたリソースのみ操作可能とする制御の実現可否及び実現可能な場合、ポリシーの例をご教示頂けませんでしょうか。
なお、ポリシーは可能な限り簡素化して作成したく、Actionを細かく設定することは避けたいと考えております。
■適用したポリシー
{
"Version": "2012-10-17",
"Statement": \[
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/tag-key": "tag-value"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/tag-key": "tag-value"
}
}
}
]
}
お世話になります。
起動テンプレートで以下のようなユーザーデータを持つテンプレートを作成しました。
```
aws s3 cp s3://<mybucket>/ /etc/ --recursive
echo 'finished!'
```
しかし、ログには
```
+ aws s3 cp s3://<mybucket>/ /etc/ --recursive
download failed: s3://<mybucket>/<file> to ../../../<file> Unable to locate credentials
```
と出て終了してしまっていました。
そのインスタンスにSSH接続して同じコマンドを叩くとダウンロードは正常にできるので
IAMロールは問題ないと思うのですが、解決策をご存じでしたら教えていただけますでしょうか。
オンプレのデータセンターとDirect Connectで接続された、インターネットアクセス”不可”なAWS環境があります。
S3での静的ウェブサイトのホスティングを利用して、インターネットからはアクセス不可、VPCからはアクセス可という静的なWebサイトを作りたいです。
実際に個人でDirect Connectを設定するのは不可能なので、VPC内にEC2インスタンスを立てて、EC2からcurlコマンドでS3のURLにアクセス可、PCのブラウザからはS3のURLにアクセス不可、ということで確認したいと思っています。
試したこととしては、VPCエンドポイントを設定すると、VPCからS3へのアクセスがインターネット経由(IGW経由)ではなく、AWS内の通信になるようでしたので、設定してルーティングテーブルも確認したのですが、EC2・ブラウザともに403 Forbiddenになるか、両方アクセス可能になるかのどちらかの結果で、期待した動作になりませんでした。
ブロックパブリックアクセスの設定も含め、どのような設定をすると上記目的が満たせるのか、教えていただけないでしょうか。
はじめまして。
aws初心者のため、基本的なことを聞いてしまってたら申し訳ございません。
現在、PHPのCURL関数を用いた任意のバケットの中のオブジェクトの内容を取得する方法を検討しております。
当方環境がSDKの導入ができないため、CURL関数を用いてRestAPIにリクエストを送ることを試しております。
IAMからアクセスキーとシークレットを発行して試したところ、
バケットの一覧は取得できたのですが、バケットの内容の取得を試みた場合、
_The request signature we calculated does not match the signature you provided. Check your key and signing method._
とのエラーが出てしまい、内容取得ができませんでした。
バケット一覧が取得できたため、バケット単位の認証設定などが影響しているかと思い、パブリックアクセス可にして試してみたのですが、上記エラーはかわりありませんでした。
コードは以下の通りで試してみております。
不足点等あれば、ご指摘いただけますとありがたいです。
情報の取得のやり方など、ご教示いただけますと幸いにございます。
何卒よろしくお願いいたします。
```
$secretAccessKey = 'シークレットアクセスキー';
$accessKeyId = 'アクセスキーID';
// ----- Signature -----
// HTTP-Verb
$httpVerb = 'GET' . "\n";
// Content-MD5
$contentMd5 = "\n";
// Content-Type
$contentType = "\n";
// Date
$datetime = new DateTime('now', new DateTimeZone('UTC'));
$date = $datetime->format(DateTime::RFC1123) . "\n";
// CanonicalizedAmzHeaders
$canonicalizedAmzHeaders = '';
// CanonicalizedResource
$canonicalizedResource = '/バケット名';
// StringToSign
$stringToSign = $httpVerb . $contentMd5 . $contentType . $date . $canonicalizedAmzHeaders . $canonicalizedResource;
var_dump($stringToSign);
// Signature
$hash = hash_hmac('sha1', $stringToSign, $secretAccessKey, true);
$signature = base64_encode($hash);
var_dump($signature);
// ----- Authorization Header -----
// Authorization
$authorization = 'AWS' . ' ' . $accessKeyId . ':' . $signature;
// ----- HTTP Request -----
// Gets list of buckets.
$ch = curl_init('http://バケット名.s3.us-east-1.amazonaws.com');
$headers = array(
'Authorization: ' . $authorization,
'Date: ' . $date,
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$body = curl_exec($ch);
curl_close($ch);
```
Amazon Aurora PostgreSQL またはAmazon RDS for PostgreSQLの利用を考えております。
リージョンAに、1つ以上のインスタンスを構築し、常時稼働させたうえで、
BCPに備えて、リージョンBへのリカバリプランを想定しております。
リージョンBインスタンスは、BCP対応ということもあり、インスタンス稼働時間は
構築時と、年1度程度の確認・訓練時の稼働のみを想定したい。
現状、RDSの詳細機能を把握してない、実装検討段階ということもあり、
具体的なシナリオについてご教示お願いしたいです。
現状、想定している実装は下記の通りですが、このシナリオがそもそも成り立つのかどうか、
および、ほかに最適なシナリオがあれば教えてください。
1. リージョンAインスタンスにて、日次スナップショット取得
2. スナップショットをリージョンBにコピー
3. リージョンBに配置されたスナップショットから、リージョンBにインスタンス作成
接続元はEC2を想定しておりますが、そちらのBCP構成は別途検討します。
お世話になっております。
サーバーアクセスログ取得で、署名バージョンを確認したところ署名バージョンの箇所で「-」と記載されていました。
調べたところ、署名バージョンの箇所での「-」は認証されていないリクエストの場合に表示されるとのことでした。https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/LogFormat.html
こちらも2019年6月23日以降、署名バージョン2と同様にs3へのリスクエストが失敗し、使用できなくなってしまうのでしょうか。
処理は下記の通りです。
サーバが返した情報($resultArray)をそのまま使ってFormDataを作り、ajaxでPOST通信しております。
$params = array(
'access_key' => AWSAccessKeyId,
'secret_key' => AWSSecretAccessKey,
'bucket_name' => バケット名,
'region' => リージョン名,
'allowed_file_size' => $maxSize, // eg: 1073741824 (1 GB)
);
$dates = array(
'short' => gmdate('Ymd'),
'iso' => gmdate('Ymd\THis\Z'),
'expiry' => 3600,
);
// ポリシー作成
$policy = base64_encode(json_encode(array(
'expiration' => gmdate('Y-m-d\TG:i:s\Z', strtotime(300)),
'conditions' => array(
array('bucket' => $params\['bucket_name']),
array('starts-with', '$key', $imageDir.'/'),
array('starts-with', '$Content-Type', ''),
array('success_action_status' => $status),
array('x-amz-credential' => implode('/', array($params\['access_key'], $dates\['short'] , $params\['region'], 's3', 'aws4_request'))),
array('x-amz-algorithm' => 'AWS4-HMAC-SHA256'),
array('content-length-range', 0, $params\['allowed_file_size']),
array('x-amz-date' => $dates\['iso']),
array('x-amz-expires' => '' . $dates\['expiry'] . ''),
),
)));
//署名計算
$signature = hash_hmac('sha256', $dates\['short'], 'AWS4' . $params\['secret_key'], true);
$signature = hash_hmac('sha256', $params\['region'], $signature, true);
$signature = hash_hmac('sha256', 's3', $signature, true);
$signature = hash_hmac('sha256', 'aws4_request', $signature, true);
$signature = hash_hmac('sha256', $policy, $signature);
//リクエストに追加する
$resultArray = array(
'url' => 'https://' . $params\['bucket_name'] . '.s3-'. $params\['region'] .'.amazonaws.com/',
'form' => array (
'key' => $imageDir."/".$imageFileName,
'success_action_status' => '200',
'policy' => $policy,
'Content-Type' => '',
'x-amz-algorithm' => 'AWS4-HMAC-SHA256',
'x-amz-credential' => implode('/', array($params\['access_key'], $dates\['short'], $params\['region'], 's3', 'aws4_request')),
'x-amz-date' => $dates\['iso'],
'X-amz-expires' => $dates\['expiry'],
'X-amz-signature' => $signature
)
);
return $resultArray;
お世話になっております。
下記の通り、Amazon S3で署名バージョン2が2019年6月23日に使用できなくなる件の改修方法について
質問させていただきます。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingAWSSDK.html#UsingAWSSDK-sig2-deprecation
現在業務では、AWSPHPSDKv2 を使用しており、バージョンアップは難しいため、
PHP SDK v2 用の Amazon S3 サービスクライアントを構築する場合は、signature パラメータを v4 に設定する設定を取り入れようとしております。
ただ、サーバ側からではなく、クライアント側から直接下記のようにS3へファイルをアップロードする処理があります。
1.画面から対象のZIPファイルを選択し、選択されたZIPファイルの情報をサーバに送る
2.サーバがクライアントの認証及びS3へアクセスするためのトークンを発行する
3.サーバからもらったポリシーとシグニチャと一緒に選択されたZIPファイルをS3に送る
上記の処理のうち、2でS3へアクセスするためのトークンを発行しているのですが、
署名バージョンを指定する設定が既存の処理に既に組み込まれており、署名バージョン4を明記する
ためにどこを改修を行えばよいかがわかりません。
下記にトークン作成処理を記述します。
$expiration = gmdate ( "Y-m-d\TH:i:s\Z", strtotime ( 20 ) ); // Policy Limit
$acl = 'private'; // set acl (private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control)
$status = '200'; // return this status code when upload success.
$maxSize = 1024;
$policy = <<<EOS
{
"expiration": "$expiration",
"conditions": \[
{"bucket": "接続先バケット名"},
\["starts-with", "\$key", "$imageDir/"],
{"acl": "$acl"},
{"success_action_status": "$status"},
\["starts-with", "\$Content-Type", ""],
\["content-length-range", 0, $maxSize]
]
}
EOS;
$signature = hash_hmac ( "sha1", base64_encode ( $policy ), AWSセレクトキー, true );←ここで署名を作成している
$resultArray = array(
'url' => 'https://' . 接続先バケット名 . '.s3.amazonaws.com/',
'form' => array (
'key' => ファイルディレクトリパス,
'AWSAccessKeyId' => AWSキー,
'acl' => $acl,
'success_action_status' => $status,
'policy' => base64_encode ( $policy ),
'signature' => base64_encode ( $signature ),
'Content-Type' => 'application/zip'
)
);
署名バージョン4を使用するように明記するにはどのように設定すればよいのか、アドバイスの程お願いいたします。
参考URL:https://qiita.com/supertaihei02/items/a4f663d837e51f2f72b0
誤って改行コードを含むファイルをPHPよりアップロードしてしまったのですが、
削除することができません。
何か方法はありますでしょうか。
オブジェクトのURL
「https://s3-ap-northeast-1.amazonaws.com/bucket/path/30.jpg%0A%0A」
(最後にLFが2つ入っています。)
・ブラウザ(S3)からの削除
⇢ 「成功」と出ますがファイルは残ってしまいます。
・aws s3 rmで削除
⇢ 「delete path」が返ってきますがファイルは残ったままです。
・WinSCPによる削除
⇢ 何も返ってきません
・WinSCPによるリネーム
⇢ 「Missing required header for this request: x-amz-content-sha256」となります。
宜しくお願いします。