added details
This commit is contained in:
parent
110acc6fb7
commit
45f98dc1d9
|
@ -49,14 +49,19 @@ roles to gain permissions.
|
||||||
A `*` represents every principal. Set the `*` to make an instance of a service
|
A `*` represents every principal. Set the `*` to make an instance of a service
|
||||||
public through the Internet.
|
public through the Internet.
|
||||||
|
|
||||||
|
Identify an unknown accountname by using an access key
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws sts get-access-key-info --access-key <AKIAkey>
|
||||||
|
```
|
||||||
|
|
||||||
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.
|
* An AWS unqiue Account ID has a length of 12 digits.
|
||||||
* Access key ID, starts with `AKIA` + 20 chars
|
* Longterm Access key ID, starts with `AKIA` + 20 chars
|
||||||
* Secret access key (SK)
|
* Secret access key (SK)
|
||||||
* Session token, `ASIA` + sessionToken
|
* Shortterm Session token, `ASIA` + sessionToken
|
||||||
* AWS Organizations control accounts who joined
|
* AWS Organizations control accounts who joined
|
||||||
* Third party identity providers are supported
|
* Third party identity providers are supported
|
||||||
* IAM identity center of an organization allows provision of accounts from third parties through the AWS SSO
|
* IAM identity center of an organization allows provision of accounts from third parties through the AWS SSO
|
||||||
|
@ -83,11 +88,15 @@ 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
|
If the email address is also linked to an Amazon retail account and it is
|
||||||
shared between people, everyone has full root access.
|
shared between people, everyone has full root access.
|
||||||
|
|
||||||
### (User) Policies
|
### Principal, Resource & Service Policies
|
||||||
|
|
||||||
Policies are an authorization measurement. After authentication of a user (or
|
Policies are an authorization measurement. After authentication of a user (or
|
||||||
principal) policies of the account are checked if the request is allowed.
|
principal) policies of the account are checked if the request is allowed.
|
||||||
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). There are resource and identity based policies.
|
A policy may also be attached to a resource or (in an organization) a service.
|
||||||
|
Policy evaluation can be found in
|
||||||
|
the [AWS
|
||||||
|
docs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html).
|
||||||
|
There are resource and identity based policies.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
aws iam get-policy --policy-arn <ARN>
|
aws iam get-policy --policy-arn <ARN>
|
||||||
|
@ -108,13 +117,27 @@ aws iam get-policy --policy-arn <ARN>
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Policy enforcement is done via the `Effect` keys and either has `allow` or `deny` keys set in the JSON object. Deny is default.
|
Policy enforcement is done via the `Effect` keys and either has `allow` or
|
||||||
|
`deny` keys set in the JSON object. Deny is default.
|
||||||
|
|
||||||
The `Action` keyword contains a Service and an API keyword on on that service in the scheme `<servicename>:<APIKeyword>`.
|
The `Action` keyword contains a Service and an API keyword on on that service
|
||||||
|
in the scheme `<servicename>:<APIKeyword>`.
|
||||||
|
|
||||||
The Resource key contains the ARN of the resource the policy is set for.
|
The Resource key contains the ARN of the resource the policy is set for.
|
||||||
|
|
||||||
The `Principal` key is only set for resource policies and contains the principal who is able to act on the resource. For example a `*` value allows public access.
|
The `Principal` key is only set for resource policies and contains the
|
||||||
|
principal who is able to act on the resource. For example a `*` value allows
|
||||||
|
public access.
|
||||||
|
|
||||||
|
[Operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) can be used to set conditions [using key value pairs inside policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)
|
||||||
|
```json
|
||||||
|
"Condition": {
|
||||||
|
"IPAddressIfExists": {"aws:SourceIp": ["xxx"] },
|
||||||
|
"StringEqualsIfExists": {"aws:sourceVpc": ["yyy"]}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Principals, resources and actions can also be excluded specifically through `NotPrincipal`, `NotResource` and `NotAction`.
|
||||||
|
|
||||||
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
|
||||||
|
@ -126,8 +149,14 @@ 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
|
||||||
|
|
||||||
A `*` inside a policy represents every principal. Set the `*` to make an instance of a service
|
A `*` inside a "Principal" value represents every principal. Set the `*` to make an instance of a service
|
||||||
public through the Internet.
|
public through the Internet like this
|
||||||
|
|
||||||
|
```json
|
||||||
|
"Principal": {
|
||||||
|
"AWS": "*"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Administrator access policies can be queried to see who has elevated permissions.
|
Administrator access policies can be queried to see who has elevated permissions.
|
||||||
|
|
||||||
|
@ -195,7 +224,7 @@ Find username to an access key
|
||||||
aws sts get-caller-identity --profile PROFILENAME
|
aws sts get-caller-identity --profile PROFILENAME
|
||||||
```
|
```
|
||||||
|
|
||||||
Listing EC2 instances of an account
|
List EC2 instances of an account
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
aws ec2 describe-instances --output text --profile PROFILENAME
|
aws ec2 describe-instances --output text --profile PROFILENAME
|
||||||
|
@ -207,12 +236,88 @@ In another region
|
||||||
aws ec2 describe-instances --output text --region us-east-1 --profile PROFILENAME
|
aws ec2 describe-instances --output text --region us-east-1 --profile PROFILENAME
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Credentials
|
||||||
|
|
||||||
|
User credentials are called profiles on the webUI and console
|
||||||
|
Password is used by the aws cli tool and queried APIs.
|
||||||
|
|
||||||
|
Create a user password via aws cli
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam create-login-profile --user <username> --password <password>
|
||||||
|
```
|
||||||
|
|
||||||
|
Change the password using the aws cli
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam update-login-profile --user <username> --password <password>
|
||||||
|
```
|
||||||
|
|
||||||
|
Take a look at the password policy via aws cli
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam get-account-password-policy
|
||||||
|
```
|
||||||
|
|
||||||
|
### API Access Keys
|
||||||
|
|
||||||
|
Longterm, non-expiring Access key ID start with `AKIA` + 20 chars
|
||||||
|
|
||||||
|
List the access keys via aws cli.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam list-access-keys
|
||||||
|
```
|
||||||
|
|
||||||
|
Create an access key via the aws cli.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam create-access-key --user-name <username>
|
||||||
|
```
|
||||||
|
|
||||||
|
Disable, enable or delete an access key via the aws cli
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam update-access-key --access-key-id <AKIAkey>
|
||||||
|
aws iam update-access-key --access-key-id <AKIAkey>
|
||||||
|
aws iam delete-access-key --access-key-id <AKIAkey>
|
||||||
|
```
|
||||||
|
|
||||||
|
Session keys are short term, they expire. A session key start
|
||||||
|
with `ASIA`.
|
||||||
|
|
||||||
|
These are generated by the Security Token Service.
|
||||||
|
|
||||||
|
Use aws cli to create a session token through STS.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws sts get-session-token
|
||||||
|
```
|
||||||
|
|
||||||
|
Token can be applied to a user as a second factor. If the user is provided by another
|
||||||
|
federated entity through idP the MFA needs to be provided
|
||||||
|
through this solution.
|
||||||
|
|
||||||
|
List users with MFA enabled via aws cli.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws iam list-virtual-mfa-devices
|
||||||
|
```
|
||||||
|
|
||||||
|
You can get the username of an account through the STS service using the access-key
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws sts get-access-key-info --access-key-id <AKIA-key>
|
||||||
|
```
|
||||||
|
|
||||||
### Secrets
|
### Secrets
|
||||||
|
|
||||||
|
Use the secrets manager via
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
aws secretsmanager help
|
aws secretsmanager help
|
||||||
aws secretsmanager list-secrets
|
aws secretsmanager list-secrets
|
||||||
ws secretsmanager get-secret-value --secret-id <Name> --region <region>
|
aws secretsmanager get-secret-value --secret-id <Name> --region <region>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Amazon Resource Name (ARN)
|
### Amazon Resource Name (ARN)
|
||||||
|
@ -346,8 +451,10 @@ aws s3 cp s3://<bucketname>/foo_public.xml . --no-sign-request
|
||||||
|
|
||||||
#### S3 Policies
|
#### S3 Policies
|
||||||
|
|
||||||
|
Check which policies are set
|
||||||
```sh
|
```sh
|
||||||
aws s3api get-bucket-policy --bucket <bucketname>--query Policy --output text
|
aws s3api get-bucket-policy-status --bucket <bucketname>
|
||||||
|
aws s3api get-bucket-ownership-controls --bucket <bucketname>
|
||||||
```
|
```
|
||||||
|
|
||||||
#### ACL
|
#### ACL
|
||||||
|
@ -356,3 +463,18 @@ If the ACL is set to
|
||||||
|
|
||||||
* `Anyone`, just `curl`
|
* `Anyone`, just `curl`
|
||||||
* `AuthenticatedUsers`, `s3` cli with aws key
|
* `AuthenticatedUsers`, `s3` cli with aws key
|
||||||
|
|
||||||
|
### Lambda
|
||||||
|
|
||||||
|
|
||||||
|
Execute a lambda function
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws lambda invoke --function-name arn:aws:lambda:<region>:<account_id>:function:<function_name> <arg1>
|
||||||
|
```
|
||||||
|
|
||||||
|
List policies
|
||||||
|
|
||||||
|
```sh
|
||||||
|
aws lambda get-policy --function-name arn:aws:lambda:<region>:<account_id>:function:<function_name> --query Policy --output text | jq .
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in New Issue