Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 20 additions & 46 deletions packages/smithy-aws-core/src/smithy_aws_core/identity/__init__.py
Original file line number Diff line number Diff line change
@@ -1,52 +1,26 @@
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
from dataclasses import dataclass
from datetime import datetime
from typing import Protocol, TypedDict

from smithy_core.aio.interfaces.identity import IdentityResolver
from smithy_core.interfaces.identity import Identity
from smithy_core.types import PropertyKey


@dataclass(kw_only=True)
class AWSCredentialsIdentity(Identity):
access_key_id: str
"""A unique identifier for an AWS user or role."""

secret_access_key: str
"""A secret key used in conjunction with the access key ID to authenticate
programmatic access to AWS services."""

session_token: str | None = None
"""A temporary token used to specify the current session for the supplied
credentials."""

expiration: datetime | None = None
"""The expiration time of the identity.

If time zone is provided, it is updated to UTC. The value must always be in UTC.
"""

account_id: str | None = None
"""The AWS account's ID."""


class AWSIdentityProperties(TypedDict, total=False):
access_key_id: str | None
secret_access_key: str | None
session_token: str | None


type AWSCredentialsResolver = IdentityResolver[
AWSCredentialsIdentity, AWSIdentityProperties
]


class AWSIdentityConfig(Protocol):
aws_access_key_id: str | None
aws_secret_access_key: str | None
aws_session_token: str | None = None

from .components import (
AWSCredentialsIdentity,
AWSCredentialsResolver,
AWSIdentityConfig,
AWSIdentityProperties,
)
from .container import ContainerCredentialResolver
from .environment import EnvironmentCredentialsResolver
from .imds import IMDSCredentialsResolver
from .static import StaticCredentialsResolver

__all__ = (
"AWSCredentialsIdentity",
"AWSCredentialsResolver",
"AWSIdentityProperties",
"ContainerCredentialResolver",
"EnvironmentCredentialsResolver",
"IMDSCredentialsResolver",
"StaticCredentialsResolver",
)

AWS_IDENTITY_CONFIG = PropertyKey(key="config", value_type=AWSIdentityConfig)
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
from smithy_core.aio.identity import ChainedIdentityResolver
from smithy_http.aio.interfaces import HTTPClient

from smithy_aws_core.identity import AWSCredentialsIdentity

from . import AWSCredentialsResolver, AWSIdentityProperties
from .components import (
AWSCredentialsIdentity,
AWSCredentialsResolver,
AWSIdentityProperties,
)
from .environment import EnvironmentCredentialsResolver
from .imds import IMDSCredentialsResolver
from .static import StaticCredentialsResolver
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
from dataclasses import dataclass
from datetime import datetime
from typing import Protocol, TypedDict

from smithy_core.aio.interfaces.identity import IdentityResolver
from smithy_core.interfaces.identity import Identity


@dataclass(kw_only=True)
class AWSCredentialsIdentity(Identity):
access_key_id: str
"""A unique identifier for an AWS user or role."""

secret_access_key: str
"""A secret key used in conjunction with the access key ID to authenticate
programmatic access to AWS services."""

session_token: str | None = None
"""A temporary token used to specify the current session for the supplied
credentials."""

expiration: datetime | None = None
"""The expiration time of the identity.

If time zone is provided, it is updated to UTC. The value must always be in UTC.
"""

account_id: str | None = None
"""The AWS account's ID."""


class AWSIdentityProperties(TypedDict, total=False):
access_key_id: str | None
secret_access_key: str | None
session_token: str | None


type AWSCredentialsResolver = IdentityResolver[
AWSCredentialsIdentity, AWSIdentityProperties
]


class AWSIdentityConfig(Protocol):
aws_access_key_id: str | None
aws_secret_access_key: str | None
aws_session_token: str | None = None
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
from smithy_http.aio import HTTPRequest
from smithy_http.aio.interfaces import HTTPClient, HTTPResponse

from smithy_aws_core.identity import AWSCredentialsIdentity, AWSIdentityProperties
from smithy_aws_core.identity.components import (
AWSCredentialsIdentity,
AWSIdentityProperties,
)

_CONTAINER_METADATA_IP = "169.254.170.2"
_CONTAINER_METADATA_ALLOWED_HOSTS = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from smithy_core.aio.interfaces.identity import IdentityResolver
from smithy_core.exceptions import SmithyIdentityError

from . import AWSCredentialsIdentity, AWSIdentityProperties
from .components import AWSCredentialsIdentity, AWSIdentityProperties


class EnvironmentCredentialsResolver(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from smithy_http.aio.interfaces import HTTPClient

from .. import __version__
from ..identity import AWSCredentialsIdentity, AWSIdentityProperties
from .components import AWSCredentialsIdentity, AWSIdentityProperties

_USER_AGENT_FIELD = Field(
name="User-Agent",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from smithy_core.aio.interfaces.identity import IdentityResolver
from smithy_core.exceptions import SmithyIdentityError

from smithy_aws_core.identity import AWSCredentialsIdentity, AWSIdentityProperties
from .components import AWSCredentialsIdentity, AWSIdentityProperties


class StaticCredentialsResolver(
Expand Down
Loading