AWS Identity and Access Management
ユーザーガイド

AWS サービスにロールを渡すアクセス許可をユーザーに許可する

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

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

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

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

例 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:PassRole は、ユーザーが渡すロールの詳細を得られるように、iam:GetRole と共に使用します。この例でユーザーが渡すことができるのは、指定されたアカウントに存在し、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 Enhanced Monitoring のロールを作成する

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

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

  3. [AWS サービス] ロールタイプ、[Amazon RDS Role for Enhanced Monitoring] サービスの順に選択します。続いて、[Next: Permissions] を選択します。

  4. アクセス許可ポリシー [AmazonRDSEnhancedMonitoringRole] を選択します。

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

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

  7. [Next: Review] を選択します。

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

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

  10. ロール情報を確認し、[Create role] を選択します。

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

Enhanced Monitoring を有効にするための権限を付与したいユーザーには、次のようにユーザーがロールを渡すことを許可するステートメントを含むポリシーが必要になります。アカウント番号を使用し、ロールの名前をステップ 3 で使用した名前に変更します。

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

別のポリシーのステートメントとこのステートメントを組み合わせたり、独自のポリシーで使用することができます。RDS- で始まるロールをユーザーが渡せるように特定するには、リソース ARN にあるロールの名前をワイルドカードに変更することもできます。次の例をご覧ください。

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