IAM アイデンティティベースのポリシーを使用して、特定の IAM ロールセッションへのアクセスを制限する方法を教えてください。

最終更新日時: 2022 年 1 月 31 日

アイデンティティベースのポリシーを使用して、特定の AWS Identity and Access Management (IAM) ロールセッションに許可を付与したいと考えています。

解決方法

AWS グローバル条件コンテキストキー aws:userid を使用して、特定の IAM ロールセッションへのアクセスを許可する IAM ポリシーを作成します。

注意: AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

aws:userid グローバル条件キーは、リクエストを行うプリンシパルの一意の ID が IAM ポリシーで指定された一意の ID と一致するかどうかをチェックします。

例えば、特定の IAM ロールセッションで、お客様の AWS アカウントで特定の Amazon Elastic Compute Cloud (Amazon EC2) アクションのみを実行できるようにする場合などです。次のような IAM ポリシーを追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowASpecificRoleSession",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:RebootInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:userid": "AROAXXXXXXXXXXXXXXXXX:<role-session-name>"
                }
            }
        }
    ]
}

この IAM ポリシーは、aws:userid グローバル条件キーの IAM ロールセッションへのアクセスを Amazon EC2 インスタンスに付与します。他のロールセッションでは Amazon EC2 アクションを実行できません。

IAM ロールのロール ID を取得するには、次の AWS CLI コマンドを実行します。

$ aws iam get-role --role-name <rolename>

次のような出力が表示されます。

{
    "Role": {
        "Description": "Test Role",
        "AssumeRolePolicyDocument":"<URL-encoded-JSON>",
        "MaxSessionDuration": 3600,
        "RoleId": "AROA1234567890EXAMPLE",
        "CreateDate": "2019-11-13T16:45:56Z",
        "RoleName": "Test-Role",
        "Path": "/",
        "RoleLastUsed": {
            "Region": "us-east-1",
            "LastUsedDate": "2019-11-13T17:14:00Z"
        },
        "Arn": "arn:aws:iam::123456789012:role/Test-Role"
    }
}

出力で RoleId 文字列を確認します。ロール ID は、Amazon EC2 インスタンスが IAM ロールセッションにアクセスできるようにするために、アイデンティティベースのポリシーで使用されます。

注意: aws:userid グローバル条件キーは、アイデンティティベースのポリシー、リソースベースのポリシー、許可境界ポリシーなど、あらゆるタイプの IAM ポリシーで使用できます。aws:userid グローバル条件キーの値は、リクエストを開始するプリンシパルのタイプによって異なります。さまざまなタイプのプリンシパルの値を調べるには、「すべてのリクエストで利用可能な情報」を参照してください。