ラボ対策用の個人的な備忘録ページです。マネジメントコンソールで操作していきます。
全5記事ぐらいを予定して今回は次の通り。
- S3バケットをSSM-S3暗号化等の条件で作成する。
- S3バケットにライフサイクルルールなどを設定する。

では早速!
S3バケットを作成
今回は次の条件でS3バケットを作成します。
- 暗号化(SSE-S3)を有効
- バージョニングを有効
早速、S3サービスよりバケットを作成します。
ここでは名前は適当に付けてます。ラボ試験で指定がある場合は従いましょう。

※所有者やアクセス権はデフォルトのまま進めます。
バケットのバージョニングを有効にします。

さらに下の方に「デフォルトの暗号化」がありますが、2023年よりデフォルトで暗号化になったようです。しかし、ラボ試験は追従していない可能性が高いため(デフォルトは暗号化なし)、その時は明示的に暗号化「SSE-S3」を選択します。

- 非現行バージョン:容量を消費します。通常は長期間利用されないものはGlacier等に移動させるか削除する。
- 暗号化キー:簡単なのはS3の暗号キーを使うSSE-S3。KMSで管理された鍵を指定することも可能だがコストは発生する。
特に問題なくバケットの作成が出来ました。

以下は参考までに同名ファイルをアップロードして「バージョンの表示」を有効にした様子です。

このように非現行バージョンのファイルは見えなくなっているだけで普通に見えます(バージョニングされているため)。
- オブジェクトの削除:削除マークが設定された論理削除であるため「バージョンの表示」を有効にすれば見れますし取得も出来ます。ただし、バージョン指定の削除は完全削除となります。
S3バケットを設定
バケット作成後に次の内容を設定してみます。
- オブジェクト削除時にSNSに通知。
- 非現行バージョンのオブジェクトを10日後に削除。
オブジェクト削除時にSNSに通知
バケットの「プロパティ」→「イベント通知」より作成を進めます。

イベントタイプとして「すべてのオブジェクト削除イベント」にチェックを入れます。

続いて送信先として
- Lambda関数
- SNSトピック
- SQSキュー
が選択可能ですが、今回は「SNSトピック」を選択します。

しかし、作成を完了しようとした際に以下のエラーが発生しました。
Unable to validate the following destination configurations

どうやらSNSトピックに対するS3通知のアクセス権が無いようです。さすがにラボ試験で、ここまでの対処は必要ないと思いますが、該当SNSトピックのアクセスポリシーに以下を追記しました。
{
"Sid": "S3-policy",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:ap-northeast-1:アカウント:トピック名",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:s3:::バケット名"
}
}
}
以上でオブジェクト削除時にSNS通知される設定が完了しました。
- EventBridgeの利用:現在はEventBridgeでS3イベントをキャッチすることも出来ます。EventBridgeを使えばフィルタリング出来たり他のAWSサービスに投げることも可能です。
非現行バージョンのオブジェクトを10日後に削除
バケットの「管理」タブより「ライフサイクルルール」を設定することが出来ます。
- 非現行バージョンを削除
- 非現行バージョンや現行バージョンをGlacierに移動
- 削除マークされたオブジェクトの完全削除
等の設定が出来ます。
早速、ライフサイクルルールを作成していきます。

今回は適当なルール名を設定し、スコープは「バケット内のすべてのオブジェクトに適用」とします。もし、任意階層のオブジェクトにだけルールを適用したい場合は、この辺りを調整しましょう。
ライフサイクルルールのアクションは「オブジェクトの非現行バージョンを完全に削除」にチェックを入れます。

続けて、「オブジェクトが現行バージョンでなくなってからの日数」は「10」を入力します。

完了です。
マネジメントコンソールであれば、このように簡単な操作で進めることが出来ました。ラボ試験で出された場合に同等レベルの内容であれば容易に対応できそうな気はします。

(ラボ試験ってそんな甘くない気もするけど・・・)
まとめ
今回はラボ試験対策としてS3バケットを暗号化及びバージョニング有で作成しました。作成後にイベントに応じたSNS通知やライフサイクルルール(非現行バージョンの一定期間後の削除)を設定してみました。
特に難しい部分(SNSトピックの権限は別として)は無かったかと感じます。
ラボ試験にもし出題されても落ち着いて回答したいですね。

最後までご覧いただきありがとうございました。
コメント