EC2インスタンスプロファイルによってAssumeRoleされた認証情報の有効期限は短くできるのでしょうか
2021/08/20
「EC2インスタンスプロファイルによってAssumeRoleされた認証情報の有効期限を短くする」方法がわからなかったので、CLIで無理やり実験してみました。
目次
結論
EC2インスタンスプロファイルに頼るのではなく、sts:AssumeRoleをCLIやSDKで実行して有効期限を指定してあげたほうがいいですね。
IAMロール
S3:ListAllMyBucketsのみ許可したIAMロールを作ってEC2インスタンスに設定しました。
あとセッションマネージャー使いたいのでAWS管理ポリシーのAmazonSSMManagedInstanceCoreはアタッチしてます。
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" } ] } |
EC2メタデータから取得
|
1 2 |
$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/S3LSforEC2 |
EC2インスタンスにセッションマネージャーで接続して、メタデータから認証情報を取得しました。
|
1 2 3 4 |
export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY= export AWS_SESSION_TOKEN= |
取得した認証情報をローカルのmacOSのターミナルで環境変数に設定しました。
|
1 2 3 4 5 6 7 |
$ aws sts get-caller-identity { "UserId": "AROARFDUEEVTDCNWI5K3W:i-092e5563d3b1e27a9", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/S3LSforEC2/i-092e5563d3b1e27a9" } |
sts get-caller-identityコマンドで確認してみるとIAMロールにたいしてEC2インスタンスプロファイルが取得したセッションの認証になっていることがわかりました。
|
1 2 |
$ aws s3 ls |
s3 lsコマンドで該当のバケット一覧を確認しました。
EC2からIAMロールをデタッチしてみる
CloudShellから以下 CLIでAssociationIdを確認しました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ aws ec2 describe-iam-instance-profile-associations { "IamInstanceProfileAssociations": [ { "AssociationId": "iip-assoc-0daa74c36a84893ac", "InstanceId": "i-092e5563d3b1e27a9", "IamInstanceProfile": { "Arn": "arn:aws:iam::123456789012:instance-profile/S3LSforEC2", "Id": "AIPARFDUEEVTKCUPD6M4M" }, "State": "associated" } ] } |
そのままCloudShellからIAMロールのEC2との関連付けをデタッチしてみました。
|
1 2 3 |
$ aws ec2 disassociate-iam-instance-profile \ --association-id iip-assoc-0daa74c36a84893ac |
EC2との関連付けをデタッチしたあとに認証はまだ有効なのか?
有効です。
そのまま10分ぐらい経過しても aws s3 lsでバケット一覧は取得できました。
関連付けがなくなるだけで認証情報が無効化されたわけではないのですね。
セッション無効化しないといけないのか?
マネジメントコンソールの[アクティブなセッション無効化]を実行すると以下のインラインポリシーがアタッチされます。
[policy creation time]には無効化を実行した時間が入ります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "*" ], "Resource": [ "*" ], "Condition": { "DateLessThan": { "aws:TokenIssueTime": "[policy creation time]" } } } ] } |
無効化してからmacOSのターミナルで試してみます。
|
1 2 3 |
$ aws s3 ls An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied |
aws:TokenIssueTimeが指定時間よりも過去になる条件が追加されたので拒否されました。
そりゃそうですね。
まとめ
- 無効化するためには、条件つきのインラインポリシーを追加する。
- “aws:TokenIssueTime”がインラインポリシーよりも後の認証情報を作成するために、IAMプロファイルインスタンスをdisassociateして、associateする。
って、こんなことするのであれば、sts:AssumeRoleで有効期限を指定するのが普通のやりかたですね。
EC2インスタンスプロファイルのローテーション期間を指定できるのなら嬉しいですが。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「AWS教科書 AWS認定デベロッパーアソシエイト テキスト&問題集 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
AWS Organizationsからアカウントを新規作成してみて
AWS Organizationsでアカウントを新規作成することがありましたので …
-
-
CloudTrailイベントのコストしか発生していないリージョンのコスト発生源を調査しました
調査のきっかけ ふと検証用AWSアカウントのCostExplorerを見てました …
-
-
EC2インスタンスの起動で、–cli-input-jsonと–cli-input-yamlを使いました
AWS CloudShellから実行しました。 JSON実行 [crayon-6 …
-
-
AWSアカウントrootユーザーのメールアドレスを変更
昔、うっかり会社の個人メールアドレスで作ってしまったAWSアカウントがあるのでメ …
-
-
AWS認定SAPの執筆開始にあたって環境を構築しました
AWS認定ソリューションアーキテクトプロフェッショナル対策本の執筆開始にあたりま …
-
-
AWS CloudWatch LogsエージェントでAmazon EC2上のNginxのaccess.log , error.log , php-fpm error.log , Linuxのmessages , secureログを収集する
参考ページ クイックスタート: 実行中の EC2 インスタンスに CloudWa …
-
-
AWS CodeCommitのリポジトリをiPhoneのWorkingCopyアプリから使う
iPhoneからも執筆できるようにしておこうと思いまして、iOSアプリのGitク …
-
-
Pepperで撮影した写真をAmazon Rekognitionで分析してその結果をPepperがしゃべる ~(1)AWS編~
Pepperの機能を使えるところは使って、何かしたいなあと思ってまして。 目(カ …
-
-
Amazon Linux にnodejsとmongoDBをインストールする
EPEL リポジトリを利用してnodejsとnpmをインストールする [bash …
-
-
JAWS-UG関西「AI で人を笑わせてみよう!ハンズオン」に参加しました
AI で人を笑わせてみよう!ハンズオン 灼熱の7月最終日にJAWS-UG関西のオ …
