AWS のサービスにロールを渡すアクセス権限をユーザーに付与する - AWS Identity and Access Management

AWS のサービスにロールを渡すアクセス権限をユーザーに付与する

多くの AWS サービスを設定するには、そのサービスに IAM ロールを渡す必要があります。これで、その後サービスがロールを引き受け、ユーザーに代わってアクションを実行できるようになります。大半のサービスでは、サービスにロールを渡さなければならないのはセットアップ時の 1 回のみで、サービスがロールを引き受けるたびには行いません。たとえば、Amazon EC2 インスタンスで実行しているアプリケーションがあるとします。このアプリケーションには認証に使う一時的な認証情報と、AWS でアクションを実行するためのアプリケーション認証のアクセス許可が必要です。アプリケーションをセットアップする場合、こうした認証情報を提供するインスタンスで使用するよう、Amazon EC2 にロールを渡す必要があります。そのロールに IAM ポリシーをアタッチして、インスタンスで実行するアプリケーションのアクセス許可を定義します。アプリケーションは、このロールが許可しているアクションを実行する必要があるたびに、ロールを引き受けます。

ユーザーがロール (とそのアクセス許可) を AWS サービスに渡すには、そのサービスにロールを渡すアクセス許可が必要になります。これにより、承認済みのユーザーのみが、アクセス許可を付与するロールを使用してサービスを設定できるようになります。ユーザーが AWS サービスにロールを渡すには、IAM ユーザー、ロール、またはグループに PassRole アクセス許可を付与する必要があります。

メモ
  • クロスアカウントロールを渡す PassRole のアクセス権は使用できません。

  • ResourceTag/key-name 条件キーを使用してロールにアタッチされたタグに基づいてロールを渡すアクセス許可を制限することはできません。詳細については、「AWS のリソースへのアクセスの制御」を参照してください。

サービスにリンクされたロールを作成する場合は、サービスにそのロールを渡すためのアクセス許可も必要になります。一部のサービスでは、そのサービスでアクションを実行する際にアカウント内にサービスにリンクされたロールが自動的に作成されます。たとえば、Amazon EC2 Auto Scaling では Auto Scaling グループが最初に作成されたときに、AWSServiceRoleForAutoScaling のサービスにリンクされたロールを作成します。PassRole のアクセス許可がない状態で Auto Scaling グループの作成を試みると、エラーが表示されます。デフォルトのロールを選択する場合、iam:PassRole のアクセス権は必要ないかも知れません。サービスにリンクされたロールをサポートするサービスを確認するには、「IAM と連携する AWS のサービス」を参照してください。サービスにリンクされたロールがサービスでアクションの実行時に自動的に作成されるかどうかを確認するには、「はい」リンクを選択して、該当サービスのサービスにリンクされたロールに関するドキュメントを参照してください。

ユーザーは、ロールを使用してサービスにアクセス許可を割り当てる任意の API オペレーションで、パラメータとして ARN を渡すことができます。次に、そのサービスはユーザーに iam:PassRole 権限があるかどうか確認します。ユーザーが渡せるロールを承認済みのロールだけに制限するには iam:PassRole のアクセス許可と IAM のポリシーステートメントの Resources 要素をフィルターに掛けることができます。

JSON ポリシーの Condition 要素を使用して、すべての AWS リクエストのリクエストコンテキストに含まれるキーの値をテストできます。ポリシーでの条件キーの使用の詳細については、「IAM JSON ポリシー要素: Condition」をご参照ください。iam:PassedToService 条件キーを使用して、ロールを渡すことができるサービスのサービスプリンシパルを指定できます。ポリシーでの iam:PassedToService 条件キーの使用の詳細については、「iam:PassedToService」をご参照ください。

例 1

インスタンスの起動時に、承認済みの一連のロールを Amazon EC2 サービスに渡すための権限をユーザーに付与したいと考えているとします。その場合、3 つの要素が必要です。

  • ロールに許可されている内容を定義し、ロールにアタッチしている IAM のアクセス許可ポリシー ロールが実行しなければならない操作やロールが操作を実行する上で必要とするリソースのみにアクセス許可を制限します。AWS のマネージドまたはカスタマー定義の IAM アクセス権ポリシーが使用できます。

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "A list of the permissions the role is allowed to use" ], "Resource": [ "A list of the resources the role is allowed to access" ] } }
  • サービスにロールの引き受けを許可する、ロールの信頼ポリシー。たとえば、次の信頼ポリシーを UpdateAssumeRolePolicy アクションを使用するロールにアタッチできます。この信頼ポリシーは Amazon EC2 がロールを使用し、そのロールにアタッチしているアクセス許可の使用を許可します。

    { "Version": "2012-10-17", "Statement": { "Sid": "TrustPolicyStatementThatAllowsEC2ServiceToAssumeTheAttachedRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  • 承認済みのロールのみをユーザーが渡せるように許可する、IAM ユーザーにアタッチしている IAM のアクセス許可ポリシー。ユーザーが渡すロールの詳細を得るため、通常 iam:GetRoleiam:PassRole に追加します。この例でユーザーが渡すことができるのは、指定されたアカウントに存在し、EC2-roles-for-XYZ- で始まる名前を持つロールに限ります。

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/EC2-roles-for-XYZ-*" }] }

これでユーザーは割り当てられたロールで Amazon EC2 インスタンスを起動することができます。インスタンスで実行しているアプリケーションはインスタンスプロファイルのメタデータのロールで一時的な認証情報にアクセスすることができます。ロールにアタッチされたアクセス権限ポリシーは、インスタンスに許可する操作を定義します。

例 2

Amazon Relational Database Service (Amazon RDS) は、拡張モニタリングと呼ばれる機能をサポートしています。この機能により、Amazon RDS はエージェントを使用してデータベースインスタンスをモニタリングできます。また、Amazon RDS は Amazon CloudWatch Logs にメトリックスを記録することもできます。この機能を有効にするには、サービスロールを作成して、メトリクスをモニタリングしログに書き込む権限を Amazon RDS に付与する必要があります。

Amazon RDS 拡張モニタリング用のロールを作成するには

  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ロール]、[ロールの作成] の順に選択します。

  3. [AWS Service] (AWS のサービス) ロールタイプを選択し、[Use cases for other AWS のサービス] (他の AWS のサービス のユースケース) で [RDS] サービスを選択します。[RDS – Enhanced Monitoring] (RDS – 拡張モニタリング)、[Next] (次へ) の順に選択します。

  4. AmazonRDSEnhancedMonitoringRole アクセス権ポリシーを選択します。

  5. [Next] を選択します。

  6. [Role name] (ロール名) に、このロールの目的を識別しやすくするロール名を入力します。ロール名は AWS アカウント内で一意でなければなりません。大文字と小文字は区別されません。例えば、PRODROLEprodrole というロール名を両方作成することはできません。多くのエンティティによりロールが参照されるため、作成後にロール名を変更することはできません。

  7. (オプション) [Description] (説明) には、新しいロールの説明を入力します。

  8. (オプション) タグをキーバリューペアとしてアタッチして、メタデータをユーザーに追加します。IAM におけるタグの使用の詳細については、「IAM リソースのタグ付け」を参照してください。

  9. ロール情報を確認し、[Create role (ロールの作成)] を選択します。

ロールを引き受ける monitoring.rds.amazonaws.com サービスのアクセス許可を付与する信頼ポリシーをロールが自動的に取得します。その後、Amazon RDS は AmazonRDSEnhancedMonitoringRole ポリシーが許可するすべての操作を実行できるようになります。

拡張モニタリングへのアクセスを許可するユーザーは、次に示すように、ユーアーが RDS をリストすることを許可するステートメントとユーザーがロールを渡すことを許可するステートメントを含むポリシーが必要になります。アカウント番号を自分のものに置き換え、ロールの名前をステップ 6 で指定した名前に置き換えます。

{ "Sid": "PolicyStatementToAllowUserToListRoles", "Effect": "Allow", "Action": ["iam:ListRoles"], "Resource": "*" }, { "Sid": "PolicyStatementToAllowUserToPassOneSpecificRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/RDS-Monitoring-Role" }

別のポリシーのステートメントとこのステートメントを組み合わせたり、独自のポリシーで使用することができます。代わりにユーザーが RDS- で始まるロールを渡せるように指定するには、以下のようにリソース ARN にあるロールの名前をワイルドカードに置き換えできます。

"Resource": "arn:aws:iam::account-id:role/RDS-*"