IAM Access Key limit per user (#5337)
This commit is contained in:
parent
a9372c2fbc
commit
bc3ddcff5b
@ -59,6 +59,9 @@ SERVICE_NAME_CONVERSION = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LIMIT_KEYS_PER_USER = 2
|
||||||
|
|
||||||
|
|
||||||
class MFADevice(object):
|
class MFADevice(object):
|
||||||
"""MFA Device class."""
|
"""MFA Device class."""
|
||||||
|
|
||||||
@ -2423,6 +2426,12 @@ class IAMBackend(BaseBackend):
|
|||||||
|
|
||||||
def create_access_key(self, user_name=None, status="Active"):
|
def create_access_key(self, user_name=None, status="Active"):
|
||||||
user = self.get_user(user_name)
|
user = self.get_user(user_name)
|
||||||
|
keys = self.list_access_keys(user_name)
|
||||||
|
if len(keys) >= LIMIT_KEYS_PER_USER:
|
||||||
|
raise IAMLimitExceededException(
|
||||||
|
f"Cannot exceed quota for AccessKeysPerUser: {LIMIT_KEYS_PER_USER}"
|
||||||
|
)
|
||||||
|
|
||||||
key = user.create_access_key(status)
|
key = user.create_access_key(status)
|
||||||
self.access_keys[key.physical_resource_id] = key
|
self.access_keys[key.physical_resource_id] = key
|
||||||
return key
|
return key
|
||||||
|
@ -15,6 +15,8 @@ from datetime import datetime
|
|||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
from urllib import parse
|
from urllib import parse
|
||||||
|
|
||||||
|
from moto.s3.responses import DEFAULT_REGION_NAME
|
||||||
|
|
||||||
|
|
||||||
MOCK_CERT = """-----BEGIN CERTIFICATE-----
|
MOCK_CERT = """-----BEGIN CERTIFICATE-----
|
||||||
MIIBpzCCARACCQCY5yOdxCTrGjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQKDAxt
|
MIIBpzCCARACCQCY5yOdxCTrGjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQKDAxt
|
||||||
@ -1422,6 +1424,22 @@ def test_create_access_key():
|
|||||||
assert access_key["AccessKeyId"].startswith("AKIA")
|
assert access_key["AccessKeyId"].startswith("AKIA")
|
||||||
|
|
||||||
|
|
||||||
|
@mock_iam
|
||||||
|
def test_limit_access_key_per_user():
|
||||||
|
conn = boto3.client("iam", region_name=DEFAULT_REGION_NAME)
|
||||||
|
user_name = "test-user"
|
||||||
|
conn.create_user(UserName=user_name)
|
||||||
|
|
||||||
|
conn.create_access_key(UserName=user_name)
|
||||||
|
conn.create_access_key(UserName=user_name)
|
||||||
|
with pytest.raises(ClientError) as ex:
|
||||||
|
conn.create_access_key(UserName=user_name)
|
||||||
|
|
||||||
|
err = ex.value.response["Error"]
|
||||||
|
err["Code"].should.equal("LimitExceeded")
|
||||||
|
err["Message"].should.equal("Cannot exceed quota for AccessKeysPerUser: 2")
|
||||||
|
|
||||||
|
|
||||||
@mock_iam
|
@mock_iam
|
||||||
def test_list_access_keys():
|
def test_list_access_keys():
|
||||||
conn = boto3.client("iam", region_name="us-east-1")
|
conn = boto3.client("iam", region_name="us-east-1")
|
||||||
|
Loading…
Reference in New Issue
Block a user