はじめに
今回はAWSの権限とポリシーがテーマです。AWSを実際に触って各種サービスを連携しようとすると、うまく連携できないことが有る場合は、大体はポリシーや権限の設定が正しくない場合がほとんどです(個人的な感想)。なので、「なんとなく」で理解が止まっている、AWSの各種サービスの権限やポリシーを整理してみたいと思います。AWSを使用する上でのアクセス管理において、ポリシー、ロール、そして委任と引き受けは重要な概念です。この記事では、それらの概念について詳しく説明し、具体的なユースケースも紹介します。
ポリシーとは?
ポリシー(Policy): AWSリソースへのアクセスや操作を許可または拒否するための権限設定。ポリシーはJSON形式で記述され、リソースにアタッチされるリソースベースポリシーと、IAMエンティティに直接埋め込まれるインラインポリシーの2つがあります。
ロールとは?
ロール(Role): AWSリソースへのアクセス権や操作権限を付与するための一時的なセキュリティ資格情報。ロールはIAMエンティティ(ユーザー、サービス、Lambda関数など)にアタッチされ、他のAWSアカウントやサービスに委任されることがあります。
権限とポリシーの概要
権限(Permissions): AWSリソースへのアクセスや操作を許可または拒否するための権限。認証されたユーザーやリソースに対して、どのようなアクションを実行できるかを制御します。
ポリシー(Policy): アクセス権限を定義するAWS Identity and Access Management(IAM)の構成要素。ポリシーはJSON形式で記述され、リソースへのアクセスを許可または拒否するためのルールを定義します。
ポリシーの種類
リソースベースポリシー: AWSリソースに直接アタッチされるポリシー。S3バケットやIAMユーザーなどのリソースに対するアクセス権を定義します。
インラインポリシー: IAMユーザー、グループ、ロールなどのIAMエンティティに直接埋め込まれるポリシー。エンティティごとに個別に管理されます。
委任と引き受けの概要
PassRole(ロールの委任):
AWSのサービスやリソースが、他のAWSサービスやアカウントにIAMロールを委任する機能。例えば、Lambda関数が他のAWSサービスにアクセスする際に必要なIAMロールを渡す場合に使用されます。
AssumeRole(ロールの引き受け):
AWSのIAMエンティティが、別のIAMロールを一時的に引き受けることを可能にする機能。主にクロスアカウントアクセスやAWSサービスへのアクセスに使用されます。
適切な使い分け
PassRoleの使いどころ:
サービスやリソースが他のAWSサービスやアカウントにIAMロールを委任する必要がある場合に使用されます。データ処理パイプラインやサーバレスアーキテクチャなどでよく利用されます。
AssumeRoleの使いどころ:
クロスアカウントアクセスやAWSサービスへのアクセスが必要な場合に使用されます。他のアカウントのリソースにアクセスする際や、AWSサービスが他のAWSサービスにアクセスする場合などに利用されます。
ユースケース
データ処理パイプライン:
クロスアカウントのデータ処理パイプラインを構築する場合、AWS GlueやAmazon EMRなどのサービスが他のアカウント内のS3バケットにアクセスする必要があります。この場合、PassRoleを使用してGlueやEMRに必要なIAMロールを渡し、AssumeRoleを使用してロールを引き受けることができます。
サーバレスアーキテクチャ:
サーバレスアーキテクチャでは、Lambda関数が他のAWSサービスにアクセスする必要があります。例えば、Lambda関数がDynamoDBテーブルにアクセスする場合、Lambdaに必要なIAMロールを渡し、ロールを引き受けることでアクセス権を付与します。
参考
まとめ
ポリシー、ロール、委任、そして引き受けは、AWSのアクセス管理における重要な要素です。適切なポリシーの設定とロールの管理は、セキュアで効率的なAWS環境の構築に不可欠です。委任と引き受けを適切に活用することで、AWSのサービス間での権限の委譲やアクセス権の拡張が可能になるので、ここに備忘録として残しておき、忘れそうになったらまたここを確認して思い出しながら、AWSへの理解を高めていきたいと思います。