Assume Roleを利用してセキュアにAWSリソースへのアクセス権限を得る方法

Assume Roleは、IAMユーザを作成してCredentialを発行しなくても、一時的にAWSリソースへのアクセス権限を得る事が可能な仕組みです。
EC2などにIAMロールをアサインした際にも内部で同一の処理が発生しています。

Assume Role とは?

通常、非公開なAWSリソースへアプリケーションやAWS CLIでアクセスする場合にはCredentialが必要となります。

簡単な方法としてはIAMユーザを作成し、そのユーザ用に発行したCredentialを利用することです。
この場合、認可条件はIAMユーザにアサインされたIAMポリシーが参照されます。

上記ケースの場合、AWSリソースへの適切なアクセス制御を行うためにはアプリケーション開発の度にCredentialの発行を目的としたIAMユーザを作成することとなります。しかし、アカウント管理の煩雑性やセキュリティ保護(不用意な情報流出阻止)の観点からこのような設計はオススメされません。

そこで推奨されるのが、Assume Roleを利用した環境設計となります。
この場合、認可条件はIAMロールの信頼ポリシーとアサインされたIAMポリシーが参照されます。

上記ケースの場合、アプリケーション内部にCredentialを内包する必要が無いため情報流出の危険性を抑えることができます。
また、AWS側で統合的に認証/認可が制御可能であるため、CloudFormationなどを利用したIaC化が容易となります。

以上から、AWS上でアプリケーション開発を行う際にはAssume Roleを活用することが推奨されています。
尚、Assume Roleで取得した一時的な認証情報(Credential)は、既定では「1時間」で廃棄されます。最大で「12時間」まで保持可能です。

利用方法

以下ではアプリケーション開発においてAssume Roleを利用する際の一例を紹介します。

AWS リソース上での利用

EC2やLambdaなどのコンピュートリソースを利用する際には、そのリソースへアサインされたIAM ロールに従って動的にAssume Roleがなされます。

そのため、アプリケーション上で利用するフレームワークがAWSに対応している場合には特段意識することはありません。これはAWS SDKを利用する場合も同様です。

ローカル環境上での利用

ローカル開発環境などでAWSリソースへのアクセス権限を得る際にはいくつかの方法があります。本記事では、スイッチロールが導入されたAWSアカウントを対象とし、名前付きプロファイルを参照するケースについて紹介します。

スイッチロールについては前回の記事で解説しているので、詳しくはこちらをご参照ください。
IAMのスイッチロールとは? AWSアカウント間の切り替えを楽にする設定方法 | ベアサポートブログ

尚、本記事では開発言語として Python を利用し、AWS SDKとしてBoto3を利用します。

名前付きプロファイルを登録する

Switch Role 先の Role ARN を登録します。

$ cat ~/.aws/config

[default]
region = ap-northeast-1
output = json

[profile myaccount-dev]
role_arn = arn:aws:iam::{ACCOUNT_ID}:role/{ROLE_NAME}
source_profile = default
region = ap-northeast-1
output = json

名前付きProfile を利用する

ローカル環境へ保存されている名前付きプロファイルを利用して、Assume Role で一時的な認証情報(Credential)を取得します。

import boto3
from boto3.session import Session

class EC2:
    def __new__(self) -> obj:
        __profile = 'myaccount-dev'

        __session = Session(profile_name=__profile)
        __ddb_client = __session.client('dynamodb')

        return __ddb_client

まとめ

本記事では、Assume Roleを利用してセキュアにAWSリソースへのアクセス権限を得る方法について、開発環境下でのコードへの実装例も交えて解説しました。Assume Roleを利用したアプリケーション実行環境を実現することはAmazon Web Serviceが推奨する方法論の一つですので、アーキテクチャ設計の際に考慮してみて下さい。

ベアサポートは、20年以上にわたるサーバー運用実績で培ってきたナレッジを武器に、プラットフォームを問わず運用監視サービスを提供しています。監視運用の代行だけではなく、インフラの初期構築や監視設計・導入、セキュリティソリューションの導入・運用なども可能なため、インフラ運用に関することは何でも相談可能です。 もしAWSの設計・構築・運用に課題をお持ちであれば、ベアサポートまでお気軽にご相談ください。
ベアサポート導入事例はこちら