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認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
AWS Organizationsのルートユーザー管理(Root user management)でメンバーアカウントのルートユーザー認証を無効にしました
2024年11月発表のAWS Organizations を使用するお客様のため …
-
-
WordPress W3 Total Cache のDatabaseCacheをAmazon ElastiCacheのmemcachedに格納する
このブログのアーキテクチャは現在こちらです。 データベースは、Amazon Au …
-
-
Lucidchart AWSアカウントからインポート機能で自動作図
SNSでLucidchartというサービスが話題になってました。 AWSの環境を …
-
-
Microsoft TeamsのIncoming Webhooksを使ってAWS Lambda(Python)からFeedlyの記事を自動投稿する
Microsoft Teamsの検証を始めましたので、Slackで自動化している …
-
-
AWS Summit 2017 Tokyo Day2 開場~基調講演
昨年に引き続き今年もAWS Summit Tokyoへ行ってきました。 朝一の新 …
-
-
VPN接続先のADで管理されているドメインにEC2 Windowsインスタンスから参加する
オンプレミスに見立てたオハイオリージョンにVyOSインスタンスを起動して東京リー …
-
-
IAM Access Analyzerの検出をEventBridgeルールで検知して通知する
やりたかったことは使用可能としているリージョンのIAM Access Analy …
-
-
Aurora Serverless Data APIを有効にしてLambdaからクエリを実行
Aurora Serverless作成 MySQLを作成しました。 作成時にDa …
-
-
「ポケットスタディ AWS認定 デベロッパーアソシエイト」を執筆しました
2021年3月6日に、「ポケットスタディ AWS認定 デベロッパーアソシエイト」 …
-
-
AWSアカウント内のCloudWatchアラームを削除する
やりたいこと 特定アカウント特定リージョン内のCloudWatdchアラームを全 …