IAM 識別子 - AWS Identity and Access Management

IAM 識別子

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 へのアクセス を参照してください。パスの使用方法のその他の例については、IAM ARN を参照してください。

AWS CloudFormation を使用してリソースを作成する場合、ユーザー、グループ、およびロールのパスを指定できますが、ポリシーは指定できません。

ユーザーとグループに同じパスを指定したからといって、自動的にそのユーザーがグループに分類されるわけではありません。たとえば、Developers グループを作成し、そのパスを /division_abc/subdivision_xyz/product_1234/engineering/ と指定したとします。Bob という名のユーザーを追加して同様のパスを与えたからといって、自動的に Bob が Developers グループに分類されるわけではありません。IAM では、パスに基づいてユーザー、またはグループ間に境界が設定されるわけではありません。パスの異なるユーザーでも (それらのリソースにアクセス許可さえ与えられていれば)、同じリソース使うこともできます。AWS アカウントの IAM リソースの数とサイズは制限されています。詳細については、「IAM および 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 です (123456789012 など)。

  • resource は、特定のリソースを名前で識別する部分です。

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

構文:

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

次の例の多くには、ARN のリソースパートにパスが含まれています。パスをAWS マネジメントコンソールで作成、操作することはできません。リソースでの作業でパスを使用するには、AWS、API、AWS CLI、または 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/S3Access 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: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

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

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

    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:policy/ManageCredentialsPermissions
  • 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
  • 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

もう 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 の 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 の user/group/、または policy 部分にワイルドカードを使用しないでください。たとえば、以下のことは許可されません。

arn:aws:iam::123456789012:u*

例 プロジェクトベースのグループ用のパスと ARN の使用例

パスをAWS マネジメントコンソールで作成、操作することはできません。リソースでの作業でパスを使用するには、AWS、API、AWS CLI、または Tools for Windows PowerShell を使用する必要があります。

この例では、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 が割り当てられます。

AIDAJQABLZS4A3QDU576Q

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

例としては、AWS アカウント内でフレンドリ名を再利用する場合が挙げられます。アカウント内において、ユーザー、グループ、またはポリシーに対するフレンドリ名は一意である必要があります。たとえば、David という IAM ユーザーを作成するとしましょう。会社は、Amazon S3 を使用し、各従業員用のフォルダがあるバケット持っています。バケットには、ユーザーがバケット内の自分のフォルダにのみアクセスできる、リソースベースのポリシー(バケットポリシー)があります。そこで、David という名の従業員が退職することになり、あなたは関連する IAM ユーザーを削除するとします。しかし後に David という名前を持つ別の従業員が入社してきて、あなたは David という新しい IAM ユーザーを作成しました。バケットポリシーで David IAM ユーザーを指定する場合、このポリシーにより、新しい David は、以前の David によって残された情報にアクセスできるようになります。

一方で、新しい IAM ユーザーが以前削除したフレンドリ名を再利用したとしても、すべての IAM ユーザーが一意の ID を持っています。この例の場合、古い IAM ユーザーである David と、新しい IAM ユーザーである David の ID は異なります。ユーザー名だけでなく一意の ID でアクセスを許可する Amazon S3 バケットのリソースポリシーを作成できます。これにより、従業員が所有してはならない情報へのアクセスを誤って許可する可能性が低くなります。

また 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) キー

一意識別子を取得する

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

AWS CLI:

IAM API: