質問・問題
S3 のバケットポリシーで Auto Scaling で自動起動した EC2 インスタンスから以外はオブジェクトの操作を許可しない、というような指定はできますか?
回答・解決方法
はい、可能です。EC2 に付与されているロール の UserID を利用して絞る方法がございます。はじめに以下のコマンドで EC2 に付与されるロールのロール ID を取得してください。
aws iam get-role --role-name [ロール名]
ロール ID は、以下のような形式の値になっております。
"RoleId": "AROAXXXXXXXXXXXXXXXXB"
該当の EC2 インスタンスから、aws sts get-caller-identity でも EC2 に付与されているロール ID を確認します。結果の UserId にロール ID が入っているのをご確認いただけます。
以下の「:」以下は、インスタンス ID となっておりますので、バケットポリシーの aws:userId で絞る際にインスタンス ID を * とする形です。
"UserId": "AROAXXXXXXXXXXXXXXXXB:i-XXXXXXXXXXXXXXXXX"
バケットポリシーの Resource と Condition は、以下のように記載いたします。
"Resource": "arn:aws:s3:::[Bucket Name]/*",
"Condition": {
"StringNotLike": {
"aws:userId": "AROAXXXXXXXXXXXXXXXXB:*"
}
}
【参考記事】
get-role — AWS CLI 2.7.7 Command Reference
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/get-role.html
get-caller-identity — AWS CLI 2.7.7 Command Reference
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/get-caller-identity.html