IAM and AWS STS condition context keys
You can use the Condition element in a JSON policy to test the value of keys
that are included in the request context of all AWS requests. These keys provide information
about the request itself or the resources that the request references. You can check that keys
have specified values before allowing the action requested by the user. This gives you
granular control over when your JSON policy statements match or don't match an incoming
request. For information about how to use the Condition element in a JSON policy,
see IAM JSON policy elements: Condition.
This topic describes the keys defined and provided by the IAM service (with an
iam: prefix) and the AWS Security Token Service (AWS STS) service (with an sts:
prefix). Several other AWS services also provide service-specific keys that are relevant to
the actions and resources defined by that service. For more information, see Actions, Resources, and
Condition Keys for AWS Services. The documentation for a service that supports
condition keys often has additional information. For example, for information about keys that
you can use in policies for Amazon S3 resources, see Amazon S3 Policy Keys
in the Amazon Simple Storage Service User Guide.
Topics
Available keys for IAM
You can use the following condition keys in policies that control access to IAM resources:
- iam:AccountPropertyNamespaces
-
Works with string operators.
Specifies the account property namespaces being read or modified in the request. Account properties are organized into namespaces (for example,
RoleManager). When you callPutAccountPropertiesorGetAccountProperties, use this condition key to restrict which property namespaces a principal can access. - iam:AssociatedResourceArn
-
Works with ARN operators.
Specifies the ARN of the resource to which this role will be associated at the destination service. The resource usually belongs to the service to which the principal is passing the role. Sometimes, the resource might belong to a third service. For example, you might pass a role to Amazon EC2 Auto Scaling that they use on an Amazon EC2 instance. In this case, the condition would match the ARN of the Amazon EC2 instance.
This condition key applies to only the PassRole action in a policy. It can't be used to limit any other action.
Important
When using the
iam:AssociatedResourceArncondition in a policy to restrict the PassRole action, special considerations apply if the policy is intended to define access for the AddRoleToInstanceProfile action. In this case, you cannot specify a Region or instance ID in the EC2 instance ARN. The ARN value must bearn:aws:ec2:*:CallerAccountId:instance/*. Using any other ARN value might lead to unexpected evaluation results.Use this condition key in an identity-based policy to allow an entity to pass a role, but only if that role is associated with the specified resource. For example, you can allow an IAM user or role to pass any role to the Amazon EC2 service to be used with instances in the AWS account. The IAM user or role would not be allowed to pass roles to other services.
{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" }, "ArnLike": { "iam:AssociatedResourceARN": [ "arn:aws:ec2:*:111122223333:instance/*" ] } } }Note
AWS services that support iam:PassedToService also support this condition key.
- iam:AWSServiceName
-
Works with string operators.
Specifies the AWS service to which this role is attached.
This condition key is supported by the
CreateServiceLinkedRoleAPI operation.Tip
For information about which services support using service-linked roles, see AWS services that work with IAM and look for the services that have Yes in the Service-Linked Role column. Choose a Yes with a link to view the service-linked role documentation for that service.
In this example, you allow an entity to create a service-linked role using the
CreateServiceLinkedRoleAPI operation if the service name is access-analyzer.amazonaws.com. - iam:FIDO-certification
-
Works with string operators.
Checks the MFA device FIDO certification level at the time of registration of a FIDO security key. The device certification is retrieved from the FIDO Alliance Metadata Service (MDS)
. If the certification status or level of your FIDO security key changes, it will not be updated unless the device is unregistered and registered again to fetch the updated certification information. Possible values of L1, L1plus, L2, L2plus, L3, L3plus
In this example, you register a security key and retrieve the FIDO Level 1 plus certification for your device.
- iam:FIDO-FIPS-140-2-certification
-
Works with string operators.
Checks the MFA device FIPS-140-2 validation certification level at the time of registration of a FIDO security key. The device certification is retrieved from the FIDO Alliance Metadata Service (MDS)
. If the certification status or level of your FIDO security key changes, it will not be updated unless the device is unregistered and registered again to fetch the updated certification information. Possible values of L1, L2, L3, L4
In this example, you register a security key and retrieve the FIPS-140-2 Level 2 certification for your device.
- iam:FIDO-FIPS-140-3-certification
-
Works with string operators.
Checks the MFA device FIPS-140-3 validation certification level at the time of registration of a FIDO security key. The device certification is retrieved from the FIDO Alliance Metadata Service (MDS)
. If the certification status or level of your FIDO security key changes, it will not be updated unless the device is unregistered and registered again to fetch the updated certification information. Possible values of L1, L2, L3, L4
In this example, you register a security key and retrieve the FIPS-140-3 Level 3 certification for your device.
- iam:OrganizationsPolicyId
-
Works with string operators.
Checks that the policy with the specified AWS Organizations ID matches the policy used in the request. To view an example IAM policy that uses this condition key, see IAM: View service last accessed information for an AWS Organizations policy.
- iam:PassedToService
-
Works with string operators.
Specifies the service principal of the service to which a role can be passed. This condition key applies to only the PassRole action in a policy. It can't be used to limit any other action.
When you use this condition key in a policy, specify the service using a service principal. A service principal is the name of a service that can be specified in the
Principalelement of a policy. This is the usual format:SERVICE_NAME_URL.amazonaws.com.You can use
iam:PassedToServiceto restrict your users so that they can pass roles only to specific services. For example, a user might create a service role that trusts CloudWatch to write log data to an Amazon S3 bucket on their behalf. Then the user must attach a permissions policy and a trust policy to the new service role. In this case, the trust policy must specifycloudwatch.amazonaws.comin thePrincipalelement. To view a policy that allows the user to pass the role to CloudWatch, see IAM: Pass an IAM role to a specific AWS service.By using this condition key, you can make sure that users create service roles only for the services that you specify. For example, if a user with the preceding policy attempts to create a service role for Amazon EC2, the operation will fail. The failure occurs because the user does not have permission to pass the role to Amazon EC2.
Sometimes you pass a role to a service that then passes the role to a different service.
iam:PassedToServiceincludes only the final service that assumes the role, not the intermediate service that passes the role.Note
Some services do not support this condition key.
- iam:PermissionsBoundary
-
Works with ARN operators.
Checks that the specified policy is attached as permissions boundary on the IAM principal resource. For more information, see Permissions boundaries for IAM entities
- iam:PolicyARN
-
Works with ARN operators.
Checks the Amazon Resource Name (ARN) of a managed policy in requests that involve a managed policy. For more information, see Controlling access to policies.
- iam:RoleTemplateARN
-
Works with ARN operators.
Specifies the ARN of the role template used to create or manage a role. When an AWS service acquires a role from a role template, the role template ARN is included as a context key in the authorization checks for
CreateRole,TagRole,PutRolePolicy,AttachRolePolicy,PutRolePermissionsBoundary, andGetRole. - iam:RegisterSecurityKey
-
Works with string operators.
Checks the current state of MFA device enablement.
Possible values of
CreateorActivate.In this example, you register a security key and retrieve the FIPS-140-3 Level 1 certification for your device.
- iam:ResourceTag/
key-name -
Works with string operators.
Checks that the tag attached to the identity resource (user or role) matches the specified key name and value.
Note
IAM and AWS STS support both the
iam:ResourceTagIAM condition key and theaws:ResourceTagglobal condition key.You can add custom attributes to IAM resources in the form of a key-value pair. For more information about tags for IAM resources, see Tags for AWS Identity and Access Management resources. You can use
ResourceTagto control access to AWS resources, including IAM resources. However, because IAM does not support tags for groups, you cannot use tags to control access to groups.This example shows how you might create an identity-based policy that allows deleting users with the
status=terminatedtag. To use this policy, replace theitalicized placeholder textin the example policy with your own information. Then, follow the directions in create a policy or edit a policy. - iam:ServiceSpecificCredentialAgeDays
-
Works with numeric operators.
This condition key limits the creation of service-specific credentials based on their expiration settings. It allows you to control the maximum age, in days, of service-specific credentials that can be created.
The valid range for days is 1 to 36600 (minimum 1 day, maximum 36600 days).
This condition key is supported by the
CreateServiceSpecificCredentialAPI operation.In this example, you allow a user to create service-specific credentials for the Amazon Bedrock service only if they expire within 90 days.
- iam:ServiceSpecificCredentialServiceName
-
Works with string operators.
Specifies which AWS services can be used when managing service-specific credentials. This condition key allows you to restrict which AWS services are permitted when managing service-specific credentials.
This condition key is supported by the following API operations:
The following services are supported for service-specific credentials with their exact value formatting:
-
bedrock.amazonaws.com -
cassandra.amazonaws.com -
codecommit.amazonaws.com
In this example, you allow a user to create service-specific credentials using the
CreateServiceSpecificCredentialAPI operation only for the Amazon Bedrock service. -
- iam:DelegationDuration
-
Works with numeric operators.
Filters access based on the duration of temporary access requested in a delegation request.
Product providers can use this condition key to control the maximum duration they allow in delegation requests sent to customers. The duration is specified in seconds and determines how long temporary credentials remain valid after the customer releases the exchange token. This helps product providers enforce internal policies around access duration limits based on their use case.
This condition key is supported by the
CreateDelegationRequestAPI operation.In this example, you allow creating delegation requests only if the requested duration is 7200 seconds (2 hours) or less.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateDelegationRequest", "Resource": "*", "Condition": { "NumericLessThanEquals": { "iam:DelegationDuration": "7200" } } } ] } - iam:NotificationChannel
-
Works with ARN operators.
Filters access based on the Amazon SNS topic ARN specified for receiving delegation request notifications.
Product providers can use this condition key to restrict which SNS topics can be used for delegation request notifications in the CreateDelegationRequest API call. Product providers must specify an SNS topic to receive state change notifications and exchange tokens. This ensures that notifications are sent only to approved channels within the product provider's organization.
This condition key is supported by the
CreateDelegationRequestAPI operation.In this example, you allow creating delegation requests only if they use a specific SNS topic for notifications.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateDelegationRequest", "Resource": "*", "Condition": { "ArnEquals": { "iam:NotificationChannel": "arn:aws:sns:us-east-1:123456789012:delegation-notifications" } } } ] } - iam:TemplateArn
-
Works with ARN operators.
Filters access based on the policy template ARN used to define permissions in a delegation request.
Product providers can use this condition key to control which policy templates can be used in the CreateDelegationRequest API call. Policy templates define the temporary permissions that product providers request in customer accounts. This allows product providers to restrict which registered policy templates can be used when creating delegation requests.
This condition key is supported by the
CreateDelegationRequestAPI operation.In this example, you allow creating delegation requests only if they use a policy template from a specific partner domain.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateDelegationRequest", "Resource": "*", "Condition": { "ArnLike": { "iam:TemplateArn": "arn:aws:iam::*:delegation-template/partner_*" } } } ] } - iam:DelegationRequestOwner
-
Works with ARN operators.
Filters access based on the AWS identity or principal that owns the delegation request.
Customers can use this condition key to control who can perform actions on delegation requests based on ownership. The owner of a delegation request is the AWS identity or principal in the customer account that initiated or received the delegation request.
This condition key is supported by the following API operations:
-
GetDelegationRequest -
AcceptDelegationRequest -
RejectDelegationRequest -
SendDelegationToken -
ListDelegationRequests -
UpdateDelegationRequest
In this example, you allow users to manage only delegation requests that they own.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetDelegationRequest", "iam:AcceptDelegationRequest", "iam:RejectDelegationRequest", "iam:SendDelegationToken", "iam:UpdateDelegationRequest", "iam:ListDelegationRequests" ], "Resource": "*", "Condition": { "ArnEquals": { "iam:DelegationRequestOwner": "${aws:PrincipalArn}" } } } ] } -
Available keys for AWS OIDC federation
You can use OIDC federation to give temporary security credentials to users who have been authenticated through an OpenID Connect compatible identity provider (IdP) to an IAM OpenID Connect (OIDC) identity provider in your AWS account. Examples of such providers include GitHub, Amazon Cognito, Login with Amazon, and Google. Identity tokens and access tokens from your own IdP might be used, as well as service account tokens granted to Amazon Elastic Kubernetes Service workloads.
You can use AWS OIDC condition context keys to write policies that limit the access of
federated principals to resources that are associated with a specific provider, app, or
user. These keys are typically used in the trust policy for a role. Define condition keys
using the name of the OIDC provider (token.actions.githubusercontent.com)
followed by a claim (:aud): token.actions.githubusercontent.com:aud.
Some OIDC federation condition keys can be used in the role session to authorize resource access. If the value is Yes in the Available in session column, you can use these condition keys in policies to define what users are allowed to access in other AWS services. When a claim is not available in session, the OIDC condition context key can only be used in a role trust policy for the initial AssumeRoleWithWebIdentity authentication.
Select your IdP to see how claims from your IdP map to IAM condition context keys in AWS. More information on keys for GitHub and Google can be found under the Default tab.