AWS IAMの一時クレデンシャルを無効化する
AWS IAM では
- IAM ロールに対しては sts:AssumeRole
- IAM ユーザーに対しては sts:GetSessionToken
で一時クレデンシャルを作成できます。
何らかの理由により、有効期間内の一時クレデンシャルをサーバーサイド(AWS)で無効化したい場合、以下のアプローチがあります。
- 過去に作成されたトークンを無効化する IAM ポリシーを追加
- 操作を拒否するIAMポリシーを追加
- IAM ユーザー/ロールを削除
後ろに行くほどより強力です。
ポイントは、IAM ポリシーが評価されるのは一時クレデンシャル作成時ではなくリクエスト時ということです。
順に解説します。
1. 過去に発行されたトークンを無効化する IAM ポリシーを追加
特定の日時より前に作成されたクレデンシャルを無効化します。
永続的なクレデンシャルや指定した日付よりも後に作成されたクレデンシャルで作成されたリクエストには影響を与えません。
IAM ロールに対して操作
コンソールから 無効化したい IAM ロールの詳細画面の"Revoke sessions" タブに移動します。
赤ボタンの "Revoke active sessions"をクリックすると、現在時刻より過去に作成された一時クレデンシャルを無効化する インラインの IAM ポリシー(AWSRevokeOlderSessions
)が追加されます。
ポリシーの中身を確認します。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "DateLessThan": { "aws:TokenIssueTime": "2014-05-07T23:47:00Z" } } } }
aws:TokenIssueTime
で指定する日時(UTC)は自動補完されます。
Deny された古い一時クレデンシャルでリクエストすると、以下のように拒否されます。
$ aws s3 ls An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
IAM ユーザーに対して操作
IAM ユーザーには "Revoke active sessions" タブが存在しません。
上記ポリシーをインラインで追加してください。
2. 操作を拒否するIAMポリシーを追加
一時クレデンシャルによるリクエストによらず、関係する IAM ユーザー・ロールからのリクエストを拒否したい(拒否してもよい)場合、以下のポリシーをインラインで追加してください。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*" } }
もともと紐付いているポリシーを残したまま、任意のアクションが拒否されます。
3. IAM ユーザー/ロールを削除
リクエストを拒否するのが最優先事項であり、IAM ポリシーのような複雑な操作はやりたくなく、関係する IAM ユーザー・ロールからは今後リクエストできなくても構わない場合、IAM ユーザー・ロールそのものを削除するのが確実です。
落ち着いた後で、IAM ユーザー・ロールを再作成しましょう。