added more details
This commit is contained in:
parent
62c04caf12
commit
288131e103
|
@ -11,69 +11,49 @@ also valid in other regions. Global STS are only valid in default regions.
|
||||||
|
|
||||||
In aws cli, [Regions](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-segions) go the cli argument `--region`
|
In aws cli, [Regions](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-segions) go the cli argument `--region`
|
||||||
|
|
||||||
## Simple Storage Service (S3)
|
|
||||||
|
|
||||||
[S3](https://aws.amazon.com/s3/) is an object storage without volume limits.
|
|
||||||
The names of buckets are unique and the namespace of buckets is global but they
|
|
||||||
are stored regionally.
|
|
||||||
|
|
||||||
Methods of access control are as follows
|
|
||||||
1. [Bucket policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)
|
|
||||||
2. [S3 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)
|
|
||||||
|
|
||||||
The aws cli scheme is
|
|
||||||
|
|
||||||
```sh
|
|
||||||
http://<bucketname>.s3.amazonaws.com/file.name
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```sh
|
|
||||||
http://s3.amazonaws.com/BUCKETNAME/FILENAME.ext
|
|
||||||
```
|
|
||||||
|
|
||||||
### Check Permissions of a bucket
|
|
||||||
|
|
||||||
Do a `PUT` method to see if the bucket may be writeable to upload a file via
|
|
||||||
|
|
||||||
```sh
|
|
||||||
curl -vvv -X PUT $BUCKET_URL --data "Test of write permissions"
|
|
||||||
```
|
|
||||||
|
|
||||||
### List content of public bucket via
|
|
||||||
|
|
||||||
```sh
|
|
||||||
aws s3 ls s3://<bucketname>/ --no-sign-request
|
|
||||||
```
|
|
||||||
|
|
||||||
Download via `curl`, `wget` or `s3` cli via
|
|
||||||
|
|
||||||
```sh
|
|
||||||
aws s3 cp s3://<bucketname>/foo_public.xml . --no-sign-request
|
|
||||||
```
|
|
||||||
|
|
||||||
### ACL
|
|
||||||
|
|
||||||
If the ACL is set to
|
|
||||||
|
|
||||||
* `Anyone`, just `curl`
|
|
||||||
* `AuthenticatedUsers`, `s3` cli with aws key
|
|
||||||
|
|
||||||
## Identity Access Management (IAM)
|
## Identity Access Management (IAM)
|
||||||
|
|
||||||
Permissions are granted directly through IAM identities (IAM Principals) inside
|
Permissions are granted directly through IAM identities (IAM Principals) inside
|
||||||
an AWS account or indirectly through
|
an AWS account or indirectly through
|
||||||
roles the user has joined.
|
groups and roles the principal (user or service) has joined.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam list-users
|
||||||
|
```
|
||||||
|
|
||||||
<img src="./include/iam-intro-users-and-groups.diagram.png" alt="Policy evaluation" width="auto" height="auto">
|
<img src="./include/iam-intro-users-and-groups.diagram.png" alt="Policy evaluation" width="auto" height="auto">
|
||||||
|
|
||||||
|
Users can be put into groups instead of direct role assignment, to specify
|
||||||
|
permissions for a collection of users.
|
||||||
|
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam list-groups
|
||||||
|
```
|
||||||
|
|
||||||
|
Roles can be assumed by other trusted users through policies. Assumed roles are
|
||||||
|
needed, so that aws support has access to some resources or external identity Provider (idP) is
|
||||||
|
connected to AWS SSO as a part of federated access. E.g. the Role for support is `AWSServiceRoleForSupport`.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam list-roles
|
||||||
|
```
|
||||||
|
|
||||||
Gaining access to important roles like maintenance opens the door to higher permissions.
|
Gaining access to important roles like maintenance opens the door to higher permissions.
|
||||||
An always unique AWS Account ID has a length of 12 digits.
|
|
||||||
|
Services use resources bound to the IAM inside the account. The scheme for
|
||||||
|
services is `<servicename>amazonaws.com`. Services, as trusted enitites, assume
|
||||||
|
roles to gain permissions.
|
||||||
|
|
||||||
|
A `*` represents every principal. Set the `*` to make an instance of a service
|
||||||
|
public through the Internet.
|
||||||
|
|
||||||
|
|
||||||
The IAM is not necessarily used by S3. AK/SK is sufficient for authentication
|
The IAM is not necessarily used by S3. AK/SK is sufficient for authentication
|
||||||
and authorization.
|
and authorization.
|
||||||
|
|
||||||
|
* An AWS unqiue Account ID has a length of 12 digits.
|
||||||
* Access key ID, starts with `AKIA` + 20 chars
|
* Access key ID, starts with `AKIA` + 20 chars
|
||||||
* Secret access key (SK)
|
* Secret access key (SK)
|
||||||
* Session token, `ASIA` + sessionToken
|
* Session token, `ASIA` + sessionToken
|
||||||
|
@ -83,32 +63,72 @@ and authorization.
|
||||||
|
|
||||||
### Root Accounts
|
### Root Accounts
|
||||||
|
|
||||||
Every AWS account has a single root account bound to an email address. This
|
Every AWS account has a single root account bound to an email address, which is
|
||||||
account has got the all privileges over the account. A root account has MFA
|
also the username. This account has got the all privileges over the account. A
|
||||||
disabled by default. Has all permissions except Organizational Service Control Policies.
|
root account has MFA disabled by default.
|
||||||
|
It has all permissions except Organizational Service Control Policies.
|
||||||
|
|
||||||
The account is susceptible to an attack if the mail address is accessible but
|
The account is susceptible to an attack if the mail address is accessible but
|
||||||
MFA is not activated.
|
MFA is not activated.
|
||||||
|
The email address of the root account, which is called `MasterAccountEmail` can
|
||||||
|
be found as member of an AWS Organization
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws organizations describe-organization
|
||||||
|
```
|
||||||
|
|
||||||
If the MFA is not set, it is an opportunity for a password reset attack when
|
If the MFA is not set, it is an opportunity for a password reset attack when
|
||||||
the account the vulnerable root belongs to is part of an AWS Organization.
|
the account the vulnerable root belongs to is part of an AWS Organization.
|
||||||
|
|
||||||
|
If the email address is also linked to an Amazon retail account and it is
|
||||||
|
shared between people, everyone has full root access.
|
||||||
|
|
||||||
### (User) Policies
|
### (User) Policies
|
||||||
|
|
||||||
After authentication of a user (or principal) policies of the account are
|
Policies are an authorization measurement. After authentication of a user (or
|
||||||
checked if the request is allowed.
|
principal) policies of the account are checked if the request is allowed.
|
||||||
Policy evaluation can be found in the [AWS docs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html).
|
A policy may also be attached to a resource. Policy evaluation can be found in the [AWS docs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html).
|
||||||
A policy may also be attached to a resource.
|
|
||||||
|
```sh
|
||||||
|
aws iam get-policy
|
||||||
|
```
|
||||||
|
|
||||||
|
Policy details consists of the following [example](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Version": "2012-10-17",
|
||||||
|
"Statement": [
|
||||||
|
{
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Action": "s3:ListAllMyBuckets",
|
||||||
|
"Resource": "*"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
The following graph is taken from the documentation, it shows the evaluation
|
The following graph is taken from the documentation, it shows the evaluation
|
||||||
logic inside an account
|
logic inside an account
|
||||||
|
|
||||||
<img src="./include/PolicyEvaluationHorizontal111621.png" alt="Policy evaluation" width="80%" height="auto">
|
<img src="./include/PolicyEvaluationHorizontal111621.png" alt="Policy evaluation" width="80%" height="auto">
|
||||||
|
|
||||||
|
A principal can have multiple policies attached.
|
||||||
|
|
||||||
Policies like `assume-role` and `switch-role` can lead to the gain of roles
|
Policies like `assume-role` and `switch-role` can lead to the gain of roles
|
||||||
with higher permissions
|
with higher permissions
|
||||||
|
|
||||||
## AWS Organizations
|
A `*` inside a policy represents every principal. Set the `*` to make an instance of a service
|
||||||
|
public through the Internet.
|
||||||
|
|
||||||
|
Administrator access policies can be queried to see who has elevated permissions.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam get-policy --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
|
||||||
|
aws iam get-policy-version --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --version-id v1
|
||||||
|
```
|
||||||
|
|
||||||
|
### AWS Organizations
|
||||||
|
|
||||||
An organization is a tree structure, made out of a single root account and
|
An organization is a tree structure, made out of a single root account and
|
||||||
Organizational Units (UOs). UOs can have children UOs. AN UO may contain
|
Organizational Units (UOs). UOs can have children UOs. AN UO may contain
|
||||||
|
@ -129,11 +149,20 @@ every account inside the organization. This SCP allows subscription to all AWS
|
||||||
services. An account can have 5 SCPs at max. Limiting SCPs do not apply to the
|
services. An account can have 5 SCPs at max. Limiting SCPs do not apply to the
|
||||||
management account itself.
|
management account itself.
|
||||||
|
|
||||||
## User Provisioning
|
### User Provisioning and Login
|
||||||
|
|
||||||
When using the cli command, the aws configuration and credentials are stored at `~/.aws`
|
When using the cli command, the aws configuration and credentials are stored at `~/.aws`
|
||||||
|
[The
|
||||||
|
documentation](https://docs.aws.amazon.com/cli/latest/userguide/cli-authentication-user.html)
|
||||||
|
show how to setup the user login.
|
||||||
|
|
||||||
Add credentials to profile via
|
Add the credentials to the default plugin via
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws configure
|
||||||
|
```
|
||||||
|
|
||||||
|
Add credentials to a profile which is not default via
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
aws configure --profile PROFILENAME
|
aws configure --profile PROFILENAME
|
||||||
|
@ -142,6 +171,7 @@ aws configure --profile PROFILENAME
|
||||||
Sanity test a profile through checking its existance via
|
Sanity test a profile through checking its existance via
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
aws iam list-users
|
||||||
aws s3 ls --profile PROFILENAME
|
aws s3 ls --profile PROFILENAME
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -177,7 +207,7 @@ aws secretsmanager list-secrets
|
||||||
ws secretsmanager get-secret-value --secret-id <Name> --region <region>
|
ws secretsmanager get-secret-value --secret-id <Name> --region <region>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Amazon Resource Name (ARN)
|
### Amazon Resource Name (ARN)
|
||||||
|
|
||||||
The [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)
|
The [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)
|
||||||
is a unique ID which identifies resources.
|
is a unique ID which identifies resources.
|
||||||
|
@ -188,13 +218,21 @@ A Unique ID is create through the following scheme
|
||||||
arn:aws:<service>:<region>:<account_id>:<resource_type>/<resource_name>
|
arn:aws:<service>:<region>:<account_id>:<resource_type>/<resource_name>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Virtual Private Cloud (VPC)
|
## Services
|
||||||
|
|
||||||
|
An [action on an
|
||||||
|
API](https://docs.aws.amazon.com/service-authorization-/latest/reference/reference_policies_actions-resources-contextkeys.html)
|
||||||
|
of a service is structured like `<servicename>:<APICall>`.
|
||||||
|
|
||||||
|
### Virtual Private Cloud (VPC)
|
||||||
|
|
||||||
Is a logic network segementation method using its own IP address range.
|
Is a logic network segementation method using its own IP address range.
|
||||||
Contains resources like VMs (EC2) and has an Internet gateway if needed. The
|
Contains EC2 VMs and has an Internet gateway if needed. The
|
||||||
gateway can be either just ingress, egress, or both. EC2 can use elastic IP
|
gateway can be either just ingress, egress, or both. EC2 can use elastic IP
|
||||||
addresses to provide Ingress. A Gateway Load Balancer can be used to do traffic inspection.
|
addresses to provide Ingress. A Gateway Load Balancer can be used to do traffic inspection.
|
||||||
|
|
||||||
|
A VPC is part of the EC2 namespace `ec2:CreateVPC`
|
||||||
|
|
||||||
To connect to a VPC, it does not need to be exposed to the Internet. It is
|
To connect to a VPC, it does not need to be exposed to the Internet. It is
|
||||||
accessible through various connection services like Direct Connect or
|
accessible through various connection services like Direct Connect or
|
||||||
PrivateLink.
|
PrivateLink.
|
||||||
|
@ -206,7 +244,7 @@ NTP can be found under 169.254.169.123. The DNS resolver `Route 53` can be
|
||||||
found under 169.254.169.253. Microsoft's KMS service can be at 169.254.169.250
|
found under 169.254.169.253. Microsoft's KMS service can be at 169.254.169.250
|
||||||
and 169.254.169.251.
|
and 169.254.169.251.
|
||||||
|
|
||||||
### Metadata Service
|
#### Metadata Service
|
||||||
|
|
||||||
The instance (Openstack) Metadata service can be found under 169.254.169.254.
|
The instance (Openstack) Metadata service can be found under 169.254.169.254.
|
||||||
It can be used
|
It can be used
|
||||||
|
@ -256,3 +294,51 @@ aws_secret_access_key = UeEevJGByhEXAMPLEKEYEXAMPLEKEY
|
||||||
aws_session_token = TQijaZw==
|
aws_session_token = TQijaZw==
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Simple Storage Service (S3)
|
||||||
|
|
||||||
|
[S3](https://aws.amazon.com/s3/) is an object storage without volume limits.
|
||||||
|
The names of buckets are unique and the namespace of buckets is global but they
|
||||||
|
are stored regionally.
|
||||||
|
|
||||||
|
Methods of access control are as follows
|
||||||
|
1. [Bucket policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)
|
||||||
|
2. [S3 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)
|
||||||
|
|
||||||
|
The aws cli scheme is
|
||||||
|
|
||||||
|
```sh
|
||||||
|
http://<bucketname>.s3.amazonaws.com/file.name
|
||||||
|
```
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
```sh
|
||||||
|
http://s3.amazonaws.com/BUCKETNAME/FILENAME.ext
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Check Permissions of a bucket
|
||||||
|
|
||||||
|
Do a `PUT` method to see if the bucket may be writeable to upload a file via
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl -vvv -X PUT $BUCKET_URL --data "Test of write permissions"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### List content of public bucket via
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws s3 ls s3://<bucketname>/ --no-sign-request
|
||||||
|
```
|
||||||
|
|
||||||
|
Download via `curl`, `wget` or `s3` cli via
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws s3 cp s3://<bucketname>/foo_public.xml . --no-sign-request
|
||||||
|
```
|
||||||
|
|
||||||
|
#### ACL
|
||||||
|
|
||||||
|
If the ACL is set to
|
||||||
|
|
||||||
|
* `Anyone`, just `curl`
|
||||||
|
* `AuthenticatedUsers`, `s3` cli with aws key
|
||||||
|
|
Loading…
Reference in New Issue