AWS のサービスにアクセス許可を委任するロールの作成 - AWS Identity and Access Management

AWS のサービスにアクセス許可を委任するロールの作成

AWS の多くのサービスでは、ロールを使用して、ユーザーに代わって該当サービスが他のサービスのリソースにアクセスすることを許可する必要があります。サービスがお客様に代わってアクションを実行するために引き受けるロールは、サービスロールと呼ばれます。ロールにサービスに対して特殊な目的がある場合、そのロールは EC2 インスタンスのサービスロール (この例)、またはサービスにリンクされたロールとして分類されます。どのサービスがサービスにリンクされたロールの使用をサポートしているのか、またはサービスがあらゆる形式の一時的な認証情報をサポートしているのか確認するには「IAM と連携する AWS のサービス」をご覧ください。サービスがそれぞれロールをどのように使用するのか把握するには、テーブル内のサービス名を選択し、そのサービスに関するドキュメントをご覧ください。

PassRole アクセス許可を設定する場合、ユーザーがロールに必要以上のアクセス許可があるロールを渡さないようにする必要があります。例えば、Alice が Amazon S3 アクションを実行する許可を持っていない場合があります。Alice が Amazon S3 アクションを許可するサービスにロールを渡すことができる場合、サービスはジョブの実行時に、Alice に代わって Amazon S3 アクションを実行できます。

ロールを使用してアクセス許可を委任する方法の詳細については、「ロールに関する用語と概念」を参照してください。

サービスロールのアクセス許可

IAM エンティティ (ユーザーまたはロール) がサービスロールを作成または編集できるようにするには、アクセス許可を設定する必要があります。

注記

サービスにリンクされたロールの ARN にはサービスプリンシパルが含まれています。以下のポリシーでは SERVICE-NAME.amazonaws.com として示されています。サービスプリンシパルは推量しないでください。サービスプリンシパルは、大文字と小文字が区別され、AWS のサービス間で異なる場合があります。サービスのサービスプリンシパルを表示するには、そのサービスにリンクされたロールのドキュメントを参照してください。

IAM エンティティが特定のサービスロールを作成することを許可するには

サービスロールを作成する必要のある IAM エンティティに、以下のポリシーを追加します。このポリシーでは、指定したサービスおよび特定の名前のサービスロールの作成を許可します。管理ポリシーまたはインラインポリシーをそのロールにアタッチできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" } ] }

IAM エンティティが任意のサービスロールを作成することを許可するには

AWS では、管理者ユーザーのみにサービスロールの作成を許可することをお勧めします。ロールの作成とポリシーのアタッチを許可されたユーザーは、自分のアクセス許可をエスカレートできます。代わりに、彼らが必要とするロールの作成のみを許可したポリシーを作成するか、彼らの代わりに、管理者にサービスロールを作成させます。

管理者が AWS アカウント 全体にアクセスできるポリシーをアタッチするには、AdministratorAccessAWS 管理ポリシーを使用します。

IAM エンティティにサービスロールの編集を許可するには

サービスロールを編集する必要のある IAM エンティティに、以下のポリシーを追加します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EditSpecificServiceRole", "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:PutRolePolicy", "iam:UpdateRole", "iam:UpdateRoleDescription" ], "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" }, { "Sid": "ViewRolesAndPolicies", "Effect": "Allow", "Action": [ "iam:GetPolicy", "iam:ListRoles" ], "Resource": "*" } ] }

IAM エンティティが特定のサービスロールを削除することを許可するには

指定したサービスロールを削除する必要のある IAM エンティティのアクセス許可ポリシーに、以下のステートメントを追加します。

{ "Effect": "Allow", "Action": "iam:DeleteRole", "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" }

IAM エンティティがサービスロールを削除することを許可するには

AWS では、管理者ユーザーのみにサービスロールの削除を許可することをお勧めします。代わりに、彼らが必要とするロールの削除のみを許可したポリシーを作成するか、彼らの代わりに、管理者にサービスロールを削除させます。

管理者が AWS アカウント 全体にアクセスできるポリシーをアタッチするには、AdministratorAccessAWS 管理ポリシーを使用します。

AWS のサービス用ロールの作成 (コンソール)

サービス用のロールを作成するには、AWS Management Console を使用します。一部のサービスでは、複数のサービスロールがサポートされているため、該当サービスの「AWS ドキュメント」を参照の上、選択するユースケースを確認してください。必要な信頼ポリシーとアクセス権限ポリシーを割り当て、サービスがお客様に代わってロールを引き受ける方法について説明します。ロールのアクセス許可を管理するために使用できるステップは、サービスでユースケースを定義する方法や、サービスにリンクされたロールを作成するかどうかに応じて異なります。

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

  2. IAM コンソールのナビゲーションペインで、[ロール]、[ロールを作成] を選択します。

  3. 信頼できるエンティティタイプ で、AWS のサービス を選択します。

  4. [サービスまたはユースケース] でサービスを選択し、次にユースケースを選択します。ユースケースは、サービスに必要な信頼ポリシーを含める定義になります。

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

  6. [アクセス許可ポリシー] では、オプションは選択したユースケースによって異なります。

    • サービスがロールのアクセス許可を定義している場合、アクセス許可ポリシーを選択することはできません。

    • 制限されたアクセス許可ポリシーのセットから選択します。

    • すべてのアクセス許可ポリシーから選択します。

    • アクセス許可ポリシーを選択せずに、ロールの作成後にポリシーを作成し、そのポリシーをロールにアタッチします。

  7. (オプション) アクセス許可の境界を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。

    1. [アクセス許可の境界の設定] セクションを開き、[アクセス許可の境界を使用してロールのアクセス許可の上限を設定する] を選択します。

      IAM には、アカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。

    2. アクセス許可の境界として使用するポリシーを選択します。

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

  9. [ロール名] では、オプションはサービスによって異なります。

    • サービスでロール名が定義されている場合、ロール名を編集することはできません。

    • サービスでロール名のプレフィックスが定義されている場合、オプションのサフィックスを入力できます。

    • サービスでロール名が定義されていない場合、ロールに名前を付けることができます。

      重要

      ロールに名前を付けるときは、次のことに注意してください。

      • ロール名は AWS アカウント内で一意である必要があります。ただし、大文字と小文字は区別されません。

        例えば、PRODROLEprodrole の両方の名前でロールを作成することはできません。ロール名がポリシーまたは ARN の一部として使用される場合、ロール名は大文字と小文字が区別されます。ただし、サインインプロセスなど、コンソールにロール名がユーザーに表示される場合、ロール名は大文字と小文字が区別されません。

      • 他のエンティティがロールを参照する可能性があるため、ロールを作成した後にロール名を編集することはできません。

  10. (オプション) [説明] にロールの説明を入力します。

  11. (オプション) ロールのユースケースとアクセス許可を編集するには、[ステップ 1: 信頼されたエンティティを選択] または [ステップ 2: アクセス権限を追加] のセクションで [編集] を選択します。

  12. (オプション) ロールの識別、整理、検索を簡単にするには、キーと値のペアとしてタグを追加します。IAM でのタグの使用に関する詳細については、『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。

  13. ロールを確認したら、[Create role] (ロールを作成) を選択します。

サービス用のロールを作成する (AWS CLI)

AWS CLI を使用したロールの作成には、複数のステップがあります。コンソールを使用してロールを作成する場合、多くのステップは自動的に行われますが、AWS CLI を使用する場合は、各ステップを明示的に実行する必要があります。ロールを作成して、これにアクセス許可ポリシーを割り当てる必要があります。使用しているサービスが Amazon EC2 の場合は、インスタンスプロファイルも作成してロールを追加する必要があります。必要に応じて、ロールのアクセス許可の境界を設定することもできます。

AWS のサービスのロールを AWS CLI で作成するには
  1. 次の create-role コマンドは、Test-Role という名前のロールを作成し、それに信頼ポリシーをアタッチします。

    aws iam create-role --role-name Test-Role --assume-role-policy-document file://Test-Role-Trust-Policy.json

  2. マネージドアクセス許可ポリシー aws iam attach-role-policy をロールにアタッチします。

    たとえば、次の attach-role-policy コマンドは、AWS と呼ばれる ReadOnlyAccess 管理ポリシーIAM ロールを ReadOnlyRole と呼ばれる IAM ロールロールにアタッチします。

    aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess --role-name ReadOnlyRole

    または

    ロールのインラインアクセス許可ポリシーaws iam put-role-policy を作成します。

    インラインアクセス許可ポリシーの追加については、以下の例を参照してください。

    aws iam put-role-policy --role-name Test-Role --policy-name ExamplePolicy --policy-document file://AdminPolicy.json

  3. (オプション) タグ (aws iam tag-role) をアタッチして、カスタム属性をロールに追加します。

    詳細については、「IAM ロールのタグの管理 (AWS CLI または AWS API)」を参照してください。

  4. (オプション) ロールのアクセス許可の境界 aws iam put-role-permissions-boundary を設定します。

    アクセス許可の境界では、ロールに許可されるアクセス許可の上限を設定します。アクセス許可の境界は AWS のアドバンスド機能です。

ロールを Amazon EC2 で使用する場合や、Amazon EC2 を使用する AWS の別のサービスで使用する場合は、ロールをインスタンスプロファイルに保存する必要があります。インスタンスプロファイルは、Amazon EC2 インスタンスの起動時にインスタンスにアタッチできるロールのコンテナです。インスタンスプロファイルに含めることができる ロールは 1 つのみであり、緩和できません。AWS Management Consoleを使用してロールを作成すると、ロールと同じ名前のインスタンスプロファイルが自動的に作成されます。インスタンスプロファイルの詳細については、「インスタンスプロファイルの使用」を参照してください。ロールを使用して EC2 インスタンスを起動する方法については、Linuxインスタンス用AmazonEC2ユーザーガイドの「Amazon EC2リソースへのアクセスの制御」を参照してください。

インスタンスプロファイルを作成し、これにロールを保存するには (AWS CLI)
  1. インスタンスプロファイル aws iam create-instance-profile を作成します。

  2. ロールをインスタンスプロファイル aws iam add-role-to-instance-profile に追加します。

次に示す AWS CLI のコマンド例では、ロールを作成してアクセス許可をアタッチする手順の最初の 2 つのステップを示します。また、インスタンスプロファイルを作成し、これにロールを追加する手順の最初の 2 つのステップも示します。この信頼ポリシー例では、ロールを引き受けて Amazon S3 バケット example_bucket を表示することを Amazon EC2 サービスに許可します。また、この例では、Windows を実行するクライアントコンピュータを使用中であり、アカウントの認証情報とリージョンを使ってコマンドラインインターフェイスを設定済みであることを前提とします。詳細については、「AWS コマンドラインインターフェイスの設定」を参照してください。

この例では、ロールの作成時に、次の信頼ポリシーを最初のコマンドに含めます。この信頼ポリシーにより、Amazon EC2 サービスはロールを引き受けることを許可されます。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } }

2 番目のコマンドを使用する場合、アクセス許可ポリシーをロールにアタッチする必要があります。次のアクセス許可ポリシーの例では、Amazon S3 バケット ListBucket に対して example_bucket アクションのみを実行することをロールに許可します。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::example_bucket" } }

この Test-Role-for-EC2 ロールを作成するには、まず前の信頼ポリシーを trustpolicyforec2.json という名前で、前のアクセス許可ポリシーを permissionspolicyforec2.json という名前で、ローカル C: ドライブの policies ディレクトリに保存する必要があります。次に、以下のコマンドを使用して、ロールの作成、ポリシーのアタッチ、インスタンスプロファイルの作成、およびインスタンスプロファイルへのロールの追加を行います。

# Create the role and attach the trust policy that allows EC2 to assume this role. $ aws iam create-role --role-name Test-Role-for-EC2 --assume-role-policy-document file://C:\policies\trustpolicyforec2.json # Embed the permissions policy (in this example an inline policy) to the role to specify what it is allowed to do. $ aws iam put-role-policy --role-name Test-Role-for-EC2 --policy-name Permissions-Policy-For-Ec2 --policy-document file://C:\policies\permissionspolicyforec2.json # Create the instance profile required by EC2 to contain the role $ aws iam create-instance-profile --instance-profile-name EC2-ListBucket-S3 # Finally, add the role to the instance profile $ aws iam add-role-to-instance-profile --instance-profile-name EC2-ListBucket-S3 --role-name Test-Role-for-EC2

EC2 インスタンスを起動するとき、AWS コンソールを使用する場合は、[インスタンスの詳細の設定] ページでインスタンスプロファイル名を指定します。aws ec2 run-instances CLI コマンドを使用する場合は、--iam-instance-profile パラメータを指定します。

サービス用のロールを作成する (AWS API)

AWS API からロールを作成するには、複数のステップが必要です。コンソールでロールを作成する場合は多くのステップが自動的に実行されますが、API では各ステップを手動で明示的に実行する必要があります。ロールを作成して、これにアクセス許可ポリシーを割り当てる必要があります。使用しているサービスが Amazon EC2 の場合は、インスタンスプロファイルも作成してロールを追加する必要があります。必要に応じて、ロールのアクセス許可の境界を設定することもできます。

AWS のサービスのロールを作成するには (AWS API)
  1. ロールとして CreateRole を作成します。

    ロールの信頼ポリシーに対して、ファイルの場所を指定できます。

  2. ロールに管理アクセス許可ポリシーをアタッチします: AttachRolePolicy

    または

    ロールのインラインアクセス許可ポリシー PutRolePolicy を作成します。

  3. (オプション) タグ (TagRole) をアタッチして、カスタム属性をユーザーに追加します。

    詳細については、「IAM ユーザーのタグの管理 ( AWS CLI または AWS API)」を参照してください。

  4. (オプション) ロールのアクセス許可の境界 PutRolePermissionsBoundary を設定します。

    アクセス許可の境界では、ロールに許可されるアクセス許可の上限を設定します。アクセス許可の境界は AWS のアドバンスド機能です。

ロールを Amazon EC2 で使用する場合や、Amazon EC2 を使用する AWS の別のサービスで使用する場合は、ロールをインスタンスプロファイルに保存する必要があります。インスタンスプロファイルは、ロールのコンテナとして機能します。各インスタンスプロファイルに含めることができるロールは 1 つのみであり、増やすことはできません。AWS Management Consoleでロールを作成すると、ロールと同じ名前のインスタンスプロファイルが自動的に作成されます。インスタンスプロファイルの詳細については、「インスタンスプロファイルの使用」を参照してください。ロールを使用して Amazon EC2 インスタンスを起動する方法については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「Amazon EC2 リソースへのアクセスの制御」を参照してください。

インスタンスプロファイルを作成し、これにロールを保存するには (AWS API)
  1. インスタンスプロファイル CreateInstanceProfile を作成します。

  2. ロールをインスタンスプロファイル AddRoleToInstanceProfile に追加します。