IAM ID - AWS Identity and Access Management

IAM ID

IAM は、ユーザー、ユーザーグループ、ロール、ポリシー、およびサーバー証明書に対していくつかの異なった ID を使います。このセクションでは、ID およびそれぞれの ID の使い方について説明します。

フレンドリ名とパス

ユーザー、ロール、ユーザーグループ、またはポリシーを作成する場合、またはサーバー証明書をアップロードする場合は、わかりやすい名前を付けます。たとえば、Bob、TestApp1、開発者、ManageCredentialsPermissions、ProdServerCert などがあります。

IAM API または AWS Command Line Interface (AWS CLI) を使用して IAM リソースを作成する場合、オプションのパスを追加できます。単一のパスを使用することも、複数のパスをフォルダー構造としてネストすることもできます。たとえば、会社の組織構造に一致するように、入れ子パス /division_abc/subdivision_xyz/product_1234/engineering/ を使用できます。その後、パスのユーザーすべてが Policy Simulator API にアクセス許可するためのポリシーを作成できます。このポリシーを表示するには、IAM: ユーザーパスに基づいた Policy Simulator API へのアクセス を参照してください。フレンドリ名の指定方法については、User API のドキュメントを参照してください。パスの使用方法のその他の例については、IAM ARN を参照してください。

AWS CloudFormation を使用してリソースを作成する場合、ユーザー、ユーザーグループ、ロール、およびカスタマーマネージドポリシーのパスを指定できます。

同じパスにユーザーとユーザーグループがある場合、IAM はそのユーザーグループに自動的に配置されません。例えば、Developers ユーザーグループを作成し、そのパスを /division_abc/subdivision_xyz/product_1234/engineering/ と指定したとします。Bob という名のユーザーを追加して同様のパスを追加しても、自動的に Bob が Developers ユーザーグループに分類されるわけではありません。IAM は、パスに基づいてユーザーまたはユーザーグループ間の境界を強制しません。パスの異なるユーザーでも、それらのリソースにアクセス許可さえ与えられていれば)、同じリソース使うことができます。AWS アカウントの IAM リソースの数とサイズには制限があります。詳細については、「IAM と AWS STSクォータ」を参照してください。

IAM ARN

ほとんどのリソースはフレンドリ名を持っています (Bob という名前のユーザー、Developers という名前のユーザーグループなど)。ただし、アクセス許可ポリシー言語では、以下の Amazon リソースネーム (ARN) 形式を使用して、リソースを指定する必要があります。

arn:partition:service:region:account:resource

コードの説明は以下のとおりです。

  • partition は、そのリソースがあるパーティションを識別します。標準の AWS リージョンの場合、パーティションは aws です。他のパーティションにリソースがある場合、パーティションは aws-partitionname です。例えば、中国 (北京) リージョンにあるリソースのパーティションは、aws-cn です。異なるパーティションのアカウント間でアクセスを委任することはできません。

  • service は AWS 製品を示します。IAM リソースは常に iam を使用します。

  • region は、リソースのリージョンを識別します。IAM リソースの場合、これは常に空白にしておきます。

  • account が、ハイフンなしの AWS アカウント ID を指定します。

  • resource は、特定のリソースを名前で識別します。

IAM および AWS STS ARN は、次の構文を使用して指定できます。IAM リソースはグローバルに識別されるため、ARN のリージョンの割り当ては空白です。

構文:

arn:aws:iam::account:root arn:aws:iam::account:user/user-name-with-path arn:aws:iam::account:group/group-name-with-path arn:aws:iam::account:role/role-name-with-path arn:aws:iam::account:policy/policy-name-with-path arn:aws:iam::account:instance-profile/instance-profile-name-with-path arn:aws:sts::account:federated-user/user-name arn:aws:sts::account:assumed-role/role-name/role-session-name arn:aws:sts::account:self arn:aws:iam::account:mfa/virtual-device-name-with-path arn:aws:iam::account:u2f/u2f-token-id arn:aws:iam::account:server-certificate/certificate-name-with-path arn:aws:iam::account:saml-provider/provider-name arn:aws:iam::account:oidc-provider/provider-name

次の例の多くには、ARN のリソースパートにパスが含まれています。パスをAWS Management Consoleで作成、操作することはできません。パスを使用するには、リソースを操作するには、AWS API、AWS CLI または Windows PowerShell 用Tools for Windows PowerShell を使用する

例:

arn:aws:iam::123456789012:root arn:aws:iam::123456789012:user/JohnDoe arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/JaneDoe arn:aws:iam::123456789012:group/Developers arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_A/Developers arn:aws:iam::123456789012:role/S3Access arn:aws:iam::123456789012:role/application_abc/component_xyz/RDSAccess arn:aws:iam::123456789012:role/aws-service-role/access-analyzer.amazonaws.com/AWSServiceRoleForAccessAnalyzer arn:aws:iam::123456789012:role/service-role/QuickSightAction arn:aws:iam::123456789012:policy/UsersManageOwnCredentials arn:aws:iam::123456789012:policy/division_abc/subdivision_xyz/UsersManageOwnCredentials arn:aws:iam::123456789012:instance-profile/Webserver arn:aws:sts::123456789012:federated-user/JohnDoe arn:aws:sts::123456789012:assumed-role/Accounting-Role/JaneDoe arn:aws:sts::123456789012:self arn:aws:iam::123456789012:mfa/JaneDoeMFA arn:aws:iam::123456789012:u2f/user/JohnDoe/default (U2F security key) arn:aws:iam::123456789012:server-certificate/ProdServerCert arn:aws:iam::123456789012:server-certificate/division_abc/subdivision_xyz/ProdServerCert arn:aws:iam::123456789012:saml-provider/ADFSProvider arn:aws:iam::123456789012:oidc-provider/GoogleProvider arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/a1b2c3d4567890abcdefEXAMPLE11111 arn:aws:iam::123456789012:oidc-provider/server.example.org

以下の例は、さまざまなタイプの IAM および AWS STS リソースの ARN 形式を理解するのに役立つ詳細情報を示します。

  • アカウントの IAM ユーザー:

    注記

    各 IAM ユーザー名 は一意です。ユーザー名は、サインイン処理など、ユーザーに対して大文字と小文字が区別されませんが、ポリシー内で使用する場合や ARN の一部として使用する場合は大文字と小文字が区別されます。

    arn:aws:iam::123456789012:user/JohnDoe
  • 組織図を反映するパスを持つ別のユーザー:

    arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/JaneDoe
  • IAM ユーザーグループの場合:

    arn:aws:iam::123456789012:group/Developers
  • パスを持つ IAM ユーザーグループ:

    arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_A/Developers
  • IAM ロール:

    arn:aws:iam::123456789012:role/S3Access
  • サービスにリンクされたロール:

    arn:aws:iam::123456789012:role/aws-service-role/access-analyzer.amazonaws.com/AWSServiceRoleForAccessAnalyzer
  • サービスロール:

    arn:aws:iam::123456789012:role/service-role/QuickSightAction
  • 管理ポリシー:

    arn:aws:iam::123456789012:policy/ManageCredentialsPermissions
  • Amazon EC2 インスタンスと関連付けることができるインスタンスプロファイル:

    arn:aws:iam::123456789012:instance-profile/Webserver
  • 「Paulo」として IAM で識別されるフェデレーティッドユーザー:

    arn:aws:sts::123456789012:federated-user/Paulo
  • 引き受けるロールが「Accounting-Role」、ロールのセッション名が「Mary」であるユーザーのアクティブセッション:

    arn:aws:sts::123456789012:assumed-role/Accounting-Role/Mary
  • 呼び出し元のセッションに対して操作を行う API コール (AWS STS SetContext API など) でリソースとして使用された場合、呼び出し元のセッションを表します。

    arn:aws:sts::123456789012:self
  • Jorge という名前のユーザーに割り当てられた多要素認証デバイス:

    arn:aws:iam::123456789012:mfa/Jorge
  • サーバー証明書:

    arn:aws:iam::123456789012:server-certificate/ProdServerCert
  • 組織図を反映したパスを持つサーバー証明書:

    arn:aws:iam::123456789012:server-certificate/division_abc/subdivision_xyz/ProdServerCert
  • ID プロバイダー (SAML および OIDC):

    arn:aws:iam::123456789012:saml-provider/ADFSProvider arn:aws:iam::123456789012:oidc-provider/GoogleProvider arn:aws:iam::123456789012:oidc-provider/server.example.org
  • Amazon EKS OIDC ID プロバイダー URL を反映するパスを持つ OIDC ID プロバイダー:

    arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/a1b2c3d4567890abcdefEXAMPLE11111

もう 1 つの重要な ARN は ルートユーザー ARN です。これは IAM リソースではありませんが、この ARN の形式に精通している必要があります。多くの場合、リソースベースのポリシーの Principal 要素で使用されます。

  • AWS アカウント は次の項目を表示します。

    arn:aws:iam::123456789012:root

以下に示すポリシーでは、Richard に対して、本人のアクセスキーを管理する権限を割り当てています。リソースは、IAM ユーザー Richard であることに注目してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageRichardAccessKeys", "Effect": "Allow", "Action": [ "iam:*AccessKey*", "iam:GetUser" ], "Resource": "arn:aws:iam::*:user/division_abc/subdivision_xyz/Richard" }, { "Sid": "ListForConsole", "Effect": "Allow", "Action": "iam:ListUsers", "Resource": "*" } ] }
注記

ARN を使用して IAM ポリシー内のリソースを識別する場合、ポリシー変数を含めることができます。ポリシー変数には、ARN の一部としてランタイム情報(ユーザー名など)のプレースホルダを含めることができます。詳細については、「IAM ポリシーの要素: 変数とタグ」を参照してください。

ARN でのワイルドカードとパスの使用

ARN の resource 部分でワイルドカードを使用して、複数のユーザー、ユーザーグループ、またはポリシーを指定することもできます。例えば、product_1234 の作業に携わっている全ユーザーを表すには、次のように指定します。

arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/product_1234/*

名前が app_ という文字列で始まるユーザーがいる場合、次の ARN を使用してこれらすべてのユーザーを参照ができます。

arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/product_1234/app_*

AWS アカウント の全ユーザー、ユーザーグループ、またはポリシーを表すには、それぞれ ARN の user/group/、または policy/ に続いて、ワイルドカードを指定します。

arn:aws:iam::123456789012:user/* arn:aws:iam::123456789012:group/* arn:aws:iam::123456789012:policy/*

ユーザー arn:aws:iam::111122223333:user/* に次の ARN を指定すると、次の両方の例に一致します。

arn:aws:iam::111122223333:user/JohnDoe arn:aws:iam::111122223333:user/division_abc/subdivision_xyz/JaneDoe

ただし、ユーザー arn:aws:iam::111122223333:user/division_abc* に次の ARN を指定すると、2番目の例と一致しますが、最初の例には一致しません。

arn:aws:iam::111122223333:user/JohnDoe arn:aws:iam::111122223333:user/division_abc/subdivision_xyz/JaneDoe

ARN の user/group/、または policy/ 部分にワイルドカードを使用しないでください。例えば、IAM では次のことは許可されません。

arn:aws:iam::123456789012:u*
例 プロジェクトベースのユーザーグループ用のパスと ARN の使用例

パスをAWS Management Consoleで作成、操作することはできません。パスを使用するには、AWS API、AWS CLI、またはTools for WindowsPowerShellを使用してリソースを操作する必要があります。

この例では、Marketing_Admin ユーザーグループの Jules が /marketing/ パス内にプロジェクトベースのユーザーグループを作成します。Jules は、会社のさまざまな部分のユーザーをユーザーグループに割り当てます。この例では、ユーザーのパスが本人の所属するユーザーグループには関連のないことを示しています。

マーケティング部門には、リリース間近の新製品があり、そのため Jules は /marketing/ パスに Widget_Launch という新しいユーザーグループを作成します。次に、Jules はグループに以下のポリシーを割り当てます。これにより、Widget_Launch ユーザーグループには、新製品プロジェクト用に確保された example_bucket 領域のオブジェクトにアクセスできる権限が与えられます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::example_bucket/marketing/newproductlaunch/widget/*" }, { "Effect": "Allow", "Action": "s3:ListBucket*", "Resource": "arn:aws:s3:::example_bucket", "Condition": {"StringLike": {"s3:prefix": "marketing/newproductlaunch/widget/*"}} } ] }

そして Jules は、この新製品プロジェクトに参加しているユーザーを Widget_Launch ユーザーグループに割り当てます。具体的には、/marketing/ パスから Patricia と Eli が、/sales/ パスからは Chris と Chloe が、/legal/ パスからは Alice と Jim が追加されます。

一意の識別子

IAM がユーザー、ユーザーグループ、ロール、ポリシー、インスタンスプロファイル、サーバー証明書を作成するとき、各リソースには一意の ID が割り当てられます。一意の ID は次のようになります。

AIDAJQABLZS4A3QDU576Q

ほとんどの場合、IAM リソースを操作するときは、フレンドリ名と ARN を使用します。そうすれば、特定のリソースの一意の ID を知る必要はありません。しかしながら、フレンドリ名を用いることが実際的でないときなど、場合によっては一意の ID が役立つこともあります。

1 つの例では、AWS アカウント 内でフレンドリ名を再利用します。アカウント内において、ユーザー、ユーザーグループ、ロール、ポリシーに対するフレンドリ名は一意である必要があります。たとえば、John という IAM ユーザーを作成するとしましょう。会社は、Amazon S3 を使用し、各従業員用のフォルダがあるバケット持っています。IAM ユーザー John は、バケット内の自分のフォルダにのみアクセスが許可される User-S3-Access という名前の IAM ユーザーグループのメンバーです。IAM ユーザーのフレンドリ名を使用して S3 内の自分のバケットオブジェクトへのアクセスを許可するアイデンティティベースのポリシーの作成例については、「Amazon S3: IAM ユーザーが自分の S3 ホームディレクトリにプログラムによりコンソールでアクセスすることを許可する」を参照してください。

そこで、John という名の従業員が退職することになり、John という名の関連する IAM ユーザーを削除するとします。しかし後に、John という名前を持つ別の従業員が入社してきて、John という名の新しい IAM ユーザーを作成することになりました。John という名前の新しい IAM ユーザーが、既存の IAM ユーザーグループ User-S3-Access に追加されます。ユーザーグループに関連付けられたポリシーで、John という名前の IAM ユーザーのフレンドリ名が指定されていた場合、このポリシーにより、新しい John は、以前の John によって残された情報にアクセスできるようになります。

一般に、ポリシーでは、一意の ID ではなく、リソースの ARN を指定することをお勧めします。一方で、新しい IAM ユーザーが以前削除したフレンドリ名を再利用したとしても、すべての ユーザーが一意の ID を持っています。この例では、前の IAM ユーザーである John と、新しい IAM ユーザーである John は、それぞれ異なる一意の ID を持ちます。ユーザー名だけでなく一意の ID でアクセスを許可するリソースポリシーを作成できます。これにより、従業員が所有してはならない情報へのアクセスを誤って許可する可能性が低くなります。

次の例は、リソースベースのポリシーの Principal 要素に一意の ID を指定する方法を示しています。

"Principal": { "AWS": [ "arn:aws:iam::111122223333:role/role-name", "AIDACKCEVSQ6C2EXAMPLE", "AROADBQP57FF2AEXAMPLE" }

次の例は、グローバル条件キー aws:userid を使用して、ポリシーの Condition 要素に一意の ID を指定する方法を示しています。

"Condition": { "StringLike": { "aws:userId": [ "AIDACKCEVSQ6C2EXAMPLE", "AROADBQP57FF2AEXAMPLE:role-session-name", "AROA1234567890EXAMPLE:*", "111122223333" ] } }

また IAM ユーザーまたはロールの情報に関する独自のデータベース (またはその他のデータストア) を維持するときなども、ユーザー ID が役立ちます。一意の ID を使用すれば、IAM ユーザーまたはロールを作成する際に、それぞれに一意の識別子を割り当てられます。この例も前の例と同様、名前を再度使用する IAM ユーザーまたはロールが存在するケースです。

一意の ID プレフィックスを理解する

IAM は、一意の各 ID が適用するリソースタイプを示すために、以下のプレフィックスを使用します。プレフィックスは、作成日時によって異なる場合があります。

プレフィックス リソースタイプ
ABIA AWS STS サービスベアラートークン
ACCA コンテキスト固有の認証情報

AGPA

ユーザーグループ

AIDA

IAM ユーザー

AIPA Amazon EC2 インスタンスプロファイル
AKIA アクセスキー
ANPA

マネージドポリシー

ANVA

管理ポリシーのバージョン

APKA パブリックキー
AROA ロール
ASCA 証明書

ASIA

一時 (AWS STS) アクセスキー ID はこのプレフィックスを使用しますが、シークレットアクセスキーとセッショントークンとの組み合わせでのみ一意です。

一意識別子を取得する

IAM リソースに対する一意の ID は、IAM コンソールでは取得できません。一意の ID を取得するには、以下の AWS CLI コマンドまたは IAM API コールを使用します。

AWS CLI:

IAM API: