AWS CodeCommit is no longer available to new customers. Existing customers of
AWS CodeCommit can continue to use the service as normal.
Learn more"
Identity and Access Management for AWS CodeCommit
AWS Identity and Access Management (IAM) is an AWS service that helps an administrator securely control access to AWS resources. IAM administrators control who can be authenticated (signed in) and authorized (have permissions) to use CodeCommit resources. IAM is an AWS service that you can use with no additional charge.
Topics
Audience
How you use AWS Identity and Access Management (IAM) differs based on your role:
-
Service user - request permissions from your administrator if you cannot access features (see Troubleshooting AWS CodeCommit identity and access)
-
Service administrator - determine user access and submit permission requests (see How AWS CodeCommit works with IAM)
-
IAM administrator - write policies to manage access (see AWS CodeCommit identity-based policy examples)
Authenticating with identities
Authentication is how you sign in to AWS using your identity credentials. You must be authenticated as the AWS account root user, an IAM user, or by assuming an IAM role.
You can sign in as a federated identity using credentials from an identity source like AWS IAM Identity Center (IAM Identity Center), single sign-on authentication, or Google/Facebook credentials. For more information about signing in, see How to sign in to your AWS account in the AWS Sign-In User Guide.
For programmatic access, AWS provides an SDK and CLI to cryptographically sign requests. For more information, see AWS Signature Version 4 for API requests in the IAM User Guide.
AWS account root user
When you create an AWS account, you begin with one sign-in identity called the AWS account root user that has complete access to all AWS services and resources. We strongly recommend that you don't use the root user for everyday tasks. For tasks that require root user credentials, see Tasks that require root user credentials in the IAM User Guide.
IAM users and groups
An IAM user is an identity with specific permissions for a single person or application. We recommend using temporary credentials instead of IAM users with long-term credentials. For more information, see Require human users to use federation with an identity provider to access AWS using temporary credentials in the IAM User Guide.
An IAM group specifies a collection of IAM users and makes permissions easier to manage for large sets of users. For more information, see Use cases for IAM users in the IAM User Guide.
IAM roles
An IAM role is an identity with specific permissions that provides temporary credentials. You can assume a role by switching from a user to an IAM role (console) or by calling an AWS CLI or AWS API operation. For more information, see Methods to assume a role in the IAM User Guide.
IAM roles are useful for federated user access, temporary IAM user permissions, cross-account access, cross-service access, and applications running on Amazon EC2. For more information, see Cross account resource access in IAM in the IAM User Guide.
Managing access using policies
You control access in AWS by creating policies and attaching them to AWS identities or resources. A policy defines permissions when associated with an identity or resource. AWS evaluates these policies when a principal makes a request. Most policies are stored in AWS as JSON documents. For more information about JSON policy documents, see Overview of JSON policies in the IAM User Guide.
Using policies, administrators specify who has access to what by defining which principal can perform actions on what resources, and under what conditions.
By default, users and roles have no permissions. An IAM administrator creates IAM policies and adds them to roles, which users can then assume. IAM policies define permissions regardless of the method used to perform the operation.
Identity-based policies
Identity-based policies are JSON permissions policy documents that you attach to an identity (user, group, or role). These policies control what actions identities can perform, on which resources, and under what conditions. To learn how to create an identity-based policy, see Define custom IAM permissions with customer managed policies in the IAM User Guide.
Identity-based policies can be inline policies (embedded directly into a single identity) or managed policies (standalone policies attached to multiple identities). To learn how to choose between managed and inline policies, see Choose between managed policies and inline policies in the IAM User Guide.
Resource-based policies
Resource-based policies are JSON policy documents that you attach to a resource. Examples include IAM role trust policies and Amazon S3 bucket policies. In services that support resource-based policies, service administrators can use them to control access to a specific resource. You must specify a principal in a resource-based policy.
Resource-based policies are inline policies that are located in that service. You can't use AWS managed policies from IAM in a resource-based policy.
Access control lists (ACLs)
Access control lists (ACLs) control which principals (account members, users, or roles) have permissions to access a resource. ACLs are similar to resource-based policies, although they do not use the JSON policy document format.
Amazon S3, AWS WAF, and Amazon VPC are examples of services that support ACLs. To learn more about ACLs, see Access control list (ACL) overview in the Amazon Simple Storage Service Developer Guide.
Other policy types
AWS supports additional policy types that can set the maximum permissions granted by more common policy types:
-
Permissions boundaries – Set the maximum permissions that an identity-based policy can grant to an IAM entity. For more information, see Permissions boundaries for IAM entities in the IAM User Guide.
-
Service control policies (SCPs) – Specify the maximum permissions for an organization or organizational unit in AWS Organizations. For more information, see Service control policies in the AWS Organizations User Guide.
-
Resource control policies (RCPs) – Set the maximum available permissions for resources in your accounts. For more information, see Resource control policies (RCPs) in the AWS Organizations User Guide.
-
Session policies – Advanced policies passed as a parameter when creating a temporary session for a role or federated user. For more information, see Session policies in the IAM User Guide.
Multiple policy types
When multiple types of policies apply to a request, the resulting permissions are more complicated to understand. To learn how AWS determines whether to allow a request when multiple policy types are involved, see Policy evaluation logic in the IAM User Guide.
CodeCommit resource-based policies
CodeCommit does not support resource-based policies.
Authorization based on CodeCommit tags
You can attach tags to CodeCommit resources or pass tags in a request to CodeCommit. To control
access based on tags, you provide tag information in the condition element of a policy using
the codecommit:ResourceTag/
,
key-name
aws:RequestTag/
, or key-name
aws:TagKeys
condition
keys. For more information about tagging CodeCommit resources, see Example 5: Deny or allow
actions on repositories with tags.
For more information about tagging
strategies, see Tagging AWS Resources.
CodeCommit also supports policies based on session tags. For more information, see Session Tags.
Using tags to provide identity information in CodeCommit
CodeCommit supports the use of session tags, which are key-value pair attributes that you pass when you assume an IAM role, use temporary credentials, or federate a user in AWS Security Token Service (AWS STS). You can also associate tags with an IAM user. You can use the information provided in these tags to make it easier to identify who made a change or caused an event. CodeCommit includes the values for tags with the following key names in CodeCommit events:
Key name | Value |
---|---|
displayName |
The human-readable name to display and associate with the user (for example, Mary Major or Saanvi Sarkar). |
emailAddress |
The email address you want displayed for and associated with the user (for example, mary_major@example.com or saanvi_sarkar@example.com). |
If this information is provided, CodeCommit includes it in events sent to Amazon EventBridge and Amazon CloudWatch Events. For more information, see Monitoring CodeCommit events in Amazon EventBridge and Amazon CloudWatch Events.
To use session tagging, roles must have policies that include the
sts:TagSession
permission set to Allow
. If you are using
federated access, you can configure display name and email tag information as part of
your setup. For example, if you're using Azure Active Directory, you might provide the
following claim information:
Claim name | Value |
---|---|
https://aws.amazon.com/SAML/Attributes/PrincipalTag:displayNam e |
user.displayname |
https://aws.amazon.com/SAML/Attributes/PrincipalTag:emailAddress |
user.mail |
You can use the AWS CLI to pass session tags for displayName
and
emailAddress
using AssumeRole. For example,
a
user who wants to assume a role named Developer
who wants to
associate her name Mary Major
might use the
assume-role command similar to the following:
aws sts assume-role \ --role-arn arn:aws:iam::
123456789012
:role/Developer
\ --role-session-nameMary-Major
\ –-tags Key=displayName,Value="Mary Major" Key=emailAddress,Value="mary_major@example.com" \ --external-id Example987
For more information, see AssumeRole.
You can use the AssumeRoleWithSAML
operation to return a set of
temporary credentials that include displayName
and
emailAddress
tags. You can use these tags when you access CodeCommit
repositories. This requires that your company or group has already integrated your
third-party SAML solution with AWS. If so, you can pass SAML attributes as session
tags. For example, if you wanted to pass identity attributes for a display name and
email address for a user named Saanvi Sarkar
as session
tags:
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:displayName"> <AttributeValue>
Saanvi Sarkar
</AttributeValue> </Attribute> <Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:emailAddress"> <AttributeValue>saanvi_sarkar@example.com</AttributeValue> </Attribute>
For more information, see Passing Session Tags using AssumeRoleWithSAML.
You can use the AssumeRoleWithIdentity
operation to return a set of
temporary credentials that include displayName
and
emailAddress
tags. You can use these tags when you access CodeCommit
repositories. To pass session tags from OpenID Connect (OIDC), you must include the
session tags in the JSON Web Token (JWT). For example, the decoded JWP token used to
call AssumeRoleWithWebIdentity
that includes the displayName
and emailAddress
session tags for a user named Li
Juan
:
{ "sub": "lijuan", "aud": "ac_oic_client", "jti": "ZYUCeREXAMPLE", "iss": "https://xyz.com", "iat": 1566583294, "exp": 1566583354, "auth_time": 1566583292, "https://aws.amazon.com/tags": { "principal_tags": { "displayName": ["
Li Juan
"], "emailAddress": ["li_juan@example.com"], }, "transitive_tag_keys": [ "displayName", "emailAddress" ] } }
For more information, see Passing Session Tags using AssumeRoleWithWebIdentity.
You can use the GetFederationToken
operation to return a set of
temporary credentials that include displayName
and
emailAddress
tags. You can use these tags when you access CodeCommit
repositories. For example, to use the AWS CLI to get a federation token that includes the
displayName
and emailAddress
tags:
aws sts get-federation-token \ --name my-federated-user \ –-tags key=displayName,value="Nikhil Jayashankar" key=emailAddress,value=nikhil_jayashankar@example.com
For more information, see Passing Session Tags using GetFederationToken.
CodeCommit IAM roles
An IAM role is an entity within your Amazon Web Services account that has specific permissions.
Using temporary credentials with CodeCommit
You can use temporary credentials to sign in with federation, assume an IAM role, or to assume a cross-account role. You obtain temporary security credentials by calling AWS STS API operations such as AssumeRole or GetFederationToken.
CodeCommit supports using temporary credentials. For more information, see Connecting to AWS CodeCommit repositories with rotating credentials.
Service-linked roles
Service-linked roles allow AWS services to access resources in other services to complete an action on your behalf. Service-linked roles appear in your IAM account and are owned by the service. An IAM administrator can view but not edit the permissions for service-linked roles.
CodeCommit does not use service-linked roles.
Service roles
This feature allows a service to assume a service role on your behalf. This role allows the service to access resources in other services to complete an action on your behalf. Service roles appear in your IAM account and are owned by the account. This means that an IAM administrator can change the permissions for this role. However, doing so might break the functionality of the service.
CodeCommit does not use service roles.
AWS CodeCommit identity-based policy examples
By default, IAM users and roles don't have permission to create or modify CodeCommit resources. They also can't perform tasks using the AWS Management Console, AWS CLI, or AWS API. An IAM administrator must create IAM policies that grant users and roles permission to perform specific API operations on the specified resources they need. The administrator must then attach those policies to the IAM users or groups that require those permissions.
For examples of policies, see the following:
To learn how to create an IAM identity-based policy using these example JSON policy documents, see Creating Policies on the JSON Tab in the IAM User Guide.
Topics
Policy best practices
Identity-based policies determine whether someone can create, access, or delete CodeCommit resources in your account. These actions can incur costs for your AWS account. When you create or edit identity-based policies, follow these guidelines and recommendations:
-
Get started with AWS managed policies and move toward least-privilege permissions – To get started granting permissions to your users and workloads, use the AWS managed policies that grant permissions for many common use cases. They are available in your AWS account. We recommend that you reduce permissions further by defining AWS customer managed policies that are specific to your use cases. For more information, see AWS managed policies or AWS managed policies for job functions in the IAM User Guide.
-
Apply least-privilege permissions – When you set permissions with IAM policies, grant only the permissions required to perform a task. You do this by defining the actions that can be taken on specific resources under specific conditions, also known as least-privilege permissions. For more information about using IAM to apply permissions, see Policies and permissions in IAM in the IAM User Guide.
-
Use conditions in IAM policies to further restrict access – You can add a condition to your policies to limit access to actions and resources. For example, you can write a policy condition to specify that all requests must be sent using SSL. You can also use conditions to grant access to service actions if they are used through a specific AWS service, such as AWS CloudFormation. For more information, see IAM JSON policy elements: Condition in the IAM User Guide.
-
Use IAM Access Analyzer to validate your IAM policies to ensure secure and functional permissions – IAM Access Analyzer validates new and existing policies so that the policies adhere to the IAM policy language (JSON) and IAM best practices. IAM Access Analyzer provides more than 100 policy checks and actionable recommendations to help you author secure and functional policies. For more information, see Validate policies with IAM Access Analyzer in the IAM User Guide.
-
Require multi-factor authentication (MFA) – If you have a scenario that requires IAM users or a root user in your AWS account, turn on MFA for additional security. To require MFA when API operations are called, add MFA conditions to your policies. For more information, see Secure API access with MFA in the IAM User Guide.
For more information about best practices in IAM, see Security best practices in IAM in the IAM User Guide.
Using the CodeCommit console
To access the AWS CodeCommit console, you must have a minimum set of permissions. These permissions must allow you to list and view details about the CodeCommit resources in your Amazon Web Services account. If you create an identity-based policy that is more restrictive than the minimum required permissions, the console won't function as intended for entities (IAM users or roles) with that policy.
To ensure that those entities can still use the CodeCommit console, also attach the following AWS managed policy to the entities. For more information, see Adding Permissions to a User in the IAM User Guide:
For more information, see Using identity-based policies (IAM Policies) for CodeCommit.
You don't need to allow minimum console permissions for users that are making calls only to the AWS CLI or the AWS API. Instead, allow access to only the actions that match the API operation that you're trying to perform.
Allow users to view their own permissions
This example shows how you might create a policy that allows IAM users to view the inline and managed policies that are attached to their user identity. This policy includes permissions to complete this action on the console or programmatically using the AWS CLI or AWS API.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }
Viewing
CodeCommit repositories
based on tags
You can use conditions in your identity-based policy to control access to CodeCommit resources based on tags. For an example policy that demonstrates how to do this, see Example 5: Deny or allow actions on repositories with tags.
For more information, see IAM JSON Policy Elements: Condition in the IAM User Guide.
Troubleshooting AWS CodeCommit identity and access
Use the following information to help you diagnose and fix common issues that you might encounter when working with CodeCommit and IAM.
Topics
I Am not authorized to perform an action in CodeCommit
If the AWS Management Console tells you that you're not authorized to perform an action, then you must contact your administrator for assistance. Your administrator is the person that provided you with your sign-in credentials.
For more information, see Permissions required to use the CodeCommit console
I Am not authorized to perform iam:PassRole
If you receive an error that you're not authorized to perform the iam:PassRole
action, your policies must be updated to allow you to pass a role to CodeCommit.
Some AWS services allow you to pass an existing role to that service instead of creating a new service role or service-linked role. To do this, you must have permissions to pass the role to the service.
The following example error occurs when an IAM user named marymajor
tries to use the console to perform an action in
CodeCommit. However, the action requires the service to have permissions that are granted by a service role. Mary does not have permissions to pass the
role to the service.
User: arn:aws:iam::123456789012:user/
marymajor
is not authorized to perform: iam:PassRole
In this case, Mary's policies must be updated to allow her to perform the iam:PassRole
action.
If you need help, contact your AWS administrator. Your administrator is the person who provided you with your sign-in credentials.
I want to view my access keys
After you create your IAM user access keys, you can view your access key ID at any time. However, you can't view your secret access key again. If you lose your secret key, you must create a new access key pair.
Access keys consist of two parts: an access key ID (for example, AKIAIOSFODNN7EXAMPLE
) and a secret access key (for example,
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
). Like a user name and password, you must use both the access key ID and secret access key
together to authenticate your requests. Manage your access keys as securely as you do your user name and password.
Important
Do not provide your access keys to a third party, even to help find your canonical user ID. By doing this, you might give someone permanent access to your AWS account.
When you create an access key pair, you are prompted to save the access key ID and secret access key in a secure location. The secret access key is available only at the time you create it. If you lose your secret access key, you must add new access keys to your IAM user. You can have a maximum of two access keys. If you already have two, you must delete one key pair before creating a new one. To view instructions, see Managing access keys in the IAM User Guide.
I'm an administrator and want to allow others to access CodeCommit
To allow others to access CodeCommit, you must grant permission to the people or applications that need access. If you are using AWS IAM Identity Center to manage people and applications, you assign permission sets to users or groups to define their level of access. Permission sets automatically create and assign IAM policies to IAM roles that are associated with the person or application. For more information, see Permission sets in the AWS IAM Identity Center User Guide.
If you are not using IAM Identity Center, you must create IAM entities (users or roles) for the people or applications that need access. You must then attach a policy to the entity that grants them the correct permissions in CodeCommit. After the permissions are granted, provide the credentials to the user or application developer. They will use those credentials to access AWS. To learn more about creating IAM users, groups, policies, and permissions, see IAM Identities and Policies and permissions in IAM in the IAM User Guide.
I want to allow people outside of my Amazon Web Services account to access my CodeCommit resources
For more information, see Configure cross-account access to an AWS CodeCommit repository using roles.