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

IAM ユーザーにアクセス許可を委任するロールの作成

IAM ロールを使用することで、お客様の AWS リソースに対するアクセス許可を委任できます。IAM ロールにより、お客様の信頼するアカウントと他の信頼される AWS アカウントとの信頼関係を確立できます。信頼するアカウントは、アクセスされるリソースを所有し、信頼されるアカウントは、リソースへのアクセスを必要とするユーザーを含みます。ただし、別のアカウントがお客様のアカウントのリソースを所有する場合があります。たとえば、信頼するアカウントが、新しいリソースの作成 (Amazon S3 バケットでの新しいオブジェクトの作成など) を、信頼されたアカウントに許可する場合があります。この場合、リソースを作成したアカウントがリソースを所有します。さらに、リソースへのアクセスを誰に許可するかも管理します。

信頼関係の作成後、IAM ユーザーまたは信頼されたアカウントのアプリケーションでは AWS Security Token Service (AWS STS) の AssumeRole API オペレーションを使用できます。このオペレーションから提供される一時的なセキュリティ認証情報を使用して、お客様のアカウントの AWS リソースにアクセスできます。

いずれものアカウントもお客様が管理できます。または、ユーザーが属するアカウントは第三者が管理できます。ユーザーが属する他のアカウントが管理対象外の AWS アカウントである場合は、externalId 属性を使用することもできます。外部 ID は、お客様とサードパーティーのアカウントの管理者との間で同意した任意の単語または数値です。このオプションにより、リクエストに正しい sts:ExternalID が含まれている場合にのみユーザーがロールを引き受けることができるという条件が、信頼ポリシーに自動的に追加されます。詳細については、「AWS リソースへのアクセス権を第三者に付与するときに外部 ID を使用する方法」を参照してください。

ロールを使用してアクセス権限を委任する方法の詳細については、「ロールに関する用語と概念」を参照してください。サービスロールを使用して、サービスからアカウントのリソースへのアクセスを許可する方法については、「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。

IAM ロールの作成 (コンソール)

IAM ユーザーが引き受けるロールは、AWS マネジメントコンソール を使用して作成できます。たとえば、組織で複数の AWS アカウントを使用して本稼働環境から開発環境を分離しているとします。この場合、開発用アカウントのユーザーに対して、本番稼働用アカウントのリソースへのアクセスを許可するロールを設定して使用できます。具体的なステップの概要については、「個別の開発用アカウントと本稼働用アカウントを使用したシナリオ例」を参照してください。

ロールを作成するには (コンソール)

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

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

  3. [別の AWS アカウント] ロールタイプを選択します。

  4. [Account ID (アカウント ID)] ページで、リソースに対するアクセス許可を付与する AWS アカウント ID を入力します。

    指定したアカウントの管理者は、そのアカウントのすべての IAM ユーザーに、このロールを引き受けるアクセス許可を付与できます。そのためには、管理者から sts:AssumeRole アクションのアクセス許可を付与するユーザーまたはグループにポリシーをアタッチします。そのポリシーで、Resource としてロールの ARN を指定する必要があります。

  5. 管理対象外のアカウントのユーザーにアクセス許可を付与し、このロールをユーザーがプログラムで引き受ける場合は、[外部 ID が必要] を選択します。外部 ID は、お客様とサードパーティーのアカウントの管理者との間で同意した任意の単語または数値です。このオプションにより、リクエストに正しい sts:ExternalID が含まれている場合にのみユーザーがロールを引き受けることができるという条件が、信頼ポリシーに自動的に追加されます。詳細については、「AWS リソースへのアクセス権を第三者に付与するときに外部 ID を使用する方法」を参照してください。

    重要

    このオプションを選択すると、AWS CLI、Tools for Windows PowerShell、または AWS API からのみの、ロールへのアクセスが制限されます。これは、AWS コンソールを使用して、その信頼ポリシーに externalId 条件が指定されているロールに切り替えることができないためです。ただし、該当する SDK を使用してスクリプトまたはアプリケーションを作成することで、この種のアクセスをプログラムから実行することができます。詳細とサンプルスクリプトについては、『AWS セキュリティブログ』の「AWS マネジメントコンソール へのクロスアカウントアクセスを有効にする方法」を参照してください。

  6. 多要素認証 (MFA) を使用してサインインするユーザーにロールを制限するには、[MFA が必要] オプションを選択します。これにより、MFA によるサインインの有無を確認する条件がロールの信頼ポリシーに追加されます。ロールを引き受けるユーザーは、設定した MFA デバイスから一時的なワンタイムパスワードを使用してサインインする必要があります。MFA 認証のないユーザーはロールを引き受けることができません。MFA の詳細については、「AWS での多エレメント認証 (MFA) の使用」を参照してください。

  7. [Next: Permissions (次へ: アクセス許可)] を選択します。

  8. IAM には、アカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。アクセス許可ポリシーとして使用するポリシーを選択するか、[ポリシーの作成] を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、「IAM ポリシーの作成 (コンソール)」のステップ 4 を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻ります。ロールを引き受けるユーザーに許可するアクセス許可ポリシーの横にあるチェックボックスをオンにします。必要に応じて、この時点でポリシーを選択せずに、後でポリシーをロールにアタッチすることもできます。デフォルトでは、ロールにはいずれのアクセス権限もありません。

  9. (オプション) アクセス許可の境界を設定します。これはアドバンスド機能です。

    [Set permissions boundary (アクセス許可の境界の設定)] セクションを開き、[Use a permissions boundary to control the maximum role permissions (アクセス許可の境界を使用してロールのアクセス許可の上限を設定する)] を選択します。アクセス許可の境界として使用するポリシーを選択します。

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

  11. [Role name (ロール名)] に、ロールの名前を入力します。ロール名は AWS アカウント内で一意でなければなりません。大文字と小文字は区別されません。たとえば、PRODROLEprodrole というロール名を両方作成することはできません。他の AWS リソースがロールを参照している場合があるため、作成後はロールの名前を変更できません。

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

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

    重要

    上記の手順は、必要となる設定の前半であることに注意してください。信頼されたアカウントの各ユーザーに対して、コンソールでロールを切り替えるか、プログラムでロールを引き受けるためのアクセス許可も付与する必要があります。この手順の詳細については、「ロールを切り替えるユーザーアクセス権限の付与」を参照してください。

IAMIAM ロールの作成 (AWS CLI)

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

クロスアカウントアクセス用のロールを作成するには (AWS CLI)

  1. ロール aws iam create-role を作成します。

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

    または

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

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

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

次の例では、シンプルな環境でクロスアカウントロールを作成するための最初の 2 つのステップ (最も一般的なステップ) を示します。この例では、123456789012 アカウントの任意のユーザーに、ロールを引き受けて Amazon S3 バケット example_bucket を表示することを許可します。また、この例では、Windows を実行しているクライアントコンピュータを使用中であり、アカウントの認証情報とリージョンを使ってコマンドラインインターフェイスを設定済みであることを前提とします。詳細については、「AWS コマンドラインインターフェイスの設定」を参照してください。

この例では、ロールの作成時に、次の信頼ポリシーを最初のコマンドに含めます。この信頼ポリシーでは、123456789012 アカウントのユーザーに対して、AssumeRole オペレーションを使用してロールを引き受けることを許可します。ただし、ユーザーが SerialNumber パラメータと TokenCode パラメータを使用して MFA 認証を提供することを条件とします。MFA の詳細については、「AWS での多エレメント認証 (MFA) の使用」を参照してください。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } } }

重要

Principal 要素に特定の IAM ロールまたはユーザーの ARN が含まれている場合、この ARN はポリシーの保存時に一意のプリンシパル ID に変換されます。これにより、第三者がロールやユーザーを削除して再作成することで、そのユーザーのアクセス許可をエスカレートするリスクを緩和できます。通常、この ID はコンソールには表示されません。信頼ポリシーが表示されるときに、ARN への逆変換が行われるためです。ただし、ロールまたはユーザーを削除すると、プリンシパル ID はコンソールに表示されます。これは、AWS が ARN に ID をマッピングできなくなるためです。したがって、信頼ポリシーの Principal 要素で指し示しているユーザーまたはロールを削除し、再作成する場合、ロールを編集して ARN を置き換える必要があります。

2 番目のコマンドを使用する場合、既存の管理ポリシーをロールにアタッチする必要があります。以下のアクセス許可ポリシーでは、Amazon S3 バケット example_bucket に対して ListBucket アクションのみを実行することを、ロールを引き受ける任意のユーザーに許可します。

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

この Test-UserAccess-Role ロールを作成するには、まず以前の信頼ポリシーを trustpolicyforacct123456789012.json という名前でローカル policies ドライブの C: フォルダに保存する必要があります。次に、以前のアクセス許可ポリシーを PolicyForRole という名前のカスタマー管理ポリシーとして AWS アカウントに保存します。次に、以下のコマンドを使用してロールを作成し、管理ポリシーをアタッチできます。

# Create the role and attach the trust policy file that allows users in the specified account to assume the role. $ aws iam create-role --role-name Test-UserAccess-Role --assume-role-policy-document file://C:\policies\trustpolicyforacct123456789012.json # Attach the permissions policy (in this example a managed policy) to the role to specify what it is allowed to do. $ aws iam attach-role-policy --role-name Test-UserAccess-Role --policy-arn arn:aws:iam::123456789012:role/PolicyForRole

重要

上記の手順は、必要となる設定の前半であることに注意してください。信頼されたアカウントに属している個々のユーザーに、ロールを切り替えるアクセス権限を付与する必要もあります。この手順の詳細については、「ロールを切り替えるユーザーアクセス権限の付与」を参照してください。

ロールを作成し、このロールに AWS タスクの実行や AWS リソースへのアクセスに必要なアクセス許可を付与すると、123456789012 アカウントのユーザーはこのロールを引き受けることができます。詳細については、「IAM ロールへの切り替え (AWS CLI)」を参照してください。

IAM ロールの作成 (AWS API)

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

コードでロールを作成するには (AWS API)

  1. ロールとして CreateRole を作成します。

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

  2. マネージドアクセス許可ポリシー AttachRolePolicy をロールにアタッチします。

    または

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

    重要

    上記の手順は、必要となる設定の前半であることに注意してください。信頼されたアカウントに属している個々のユーザーに、ロールを切り替えるアクセス権限を付与する必要もあります。この手順の詳細については、「ロールを切り替えるユーザーアクセス権限の付与」を参照してください。

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

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

ロールを作成し、このロールに AWS タスクの実行や AWS リソースへのアクセスに必要なアクセス許可を付与したら、アカウントのユーザーにアクセス許可を付与して、このロールを引き受けることを許可する必要があります。ロールの引き受けに関する詳細については、「IAM ロールへの切り替え (AWS API)」を参照してください。