如何使用 IAM 身分型政策來限制特定 IAM 角色工作階段的存取?

上次更新日期:2022 年 1 月 31 日

我想使用身分型政策來授與特定 AWS Identity and Access Management (IAM) 角色工作階段的許可。

解決方案

建立 IAM 政策以使用 AWS 全域條件內容金鑰 aw:userid 來允許特定 IAM 角色工作階段的存取。

注意:如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本

aw: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 政策可授與 Amazon EC2 執行個體在 aws:userid 全域條件金鑰中的 IAM 角色工作階段之存取。其他角色的工作階段無法執行任何 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 角色工作階段的存取範圍。

注意:aw:userid 全域條件金鑰可用於任何類型的 IAM 政策,例如身分型政策、資源型政策、許可邊界政策等。aw:userid 全域條件金鑰的值取決於發出請求的主體類型。若要確定不同類型之主體的值,請參閲在所有請求中可取得的資訊