mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-15 09:01:01 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA
This commit is contained in:
@@ -8,11 +8,11 @@
|
||||
|
||||
### 账户
|
||||
|
||||
在 AWS 中有一个 **根账户,** 它是您 **组织中所有账户的父容器**。然而,您不需要使用该账户来部署资源,您可以创建 **其他账户以将不同的 AWS** 基础设施分开。
|
||||
在 AWS 中,有一个 **根账户**,它是您 **组织中所有账户的父容器**。然而,您不需要使用该账户来部署资源,您可以创建 **其他账户以将不同的 AWS** 基础设施分开。
|
||||
|
||||
从 **安全** 的角度来看,这非常有趣,因为 **一个账户无法访问其他账户的资源**(除非专门创建了桥接),因此您可以在部署之间创建边界。
|
||||
|
||||
因此,在一个组织中有 **两种类型的账户**(我们谈论的是 AWS 账户,而不是用户账户):一个被指定为管理账户的单一账户,以及一个或多个成员账户。
|
||||
因此,在一个组织中有 **两种类型的账户**(我们讨论的是 AWS 账户,而不是用户账户):一个被指定为管理账户的单一账户,以及一个或多个成员账户。
|
||||
|
||||
- **管理账户(根账户)** 是您用来创建组织的账户。从组织的管理账户,您可以执行以下操作:
|
||||
|
||||
@@ -46,7 +46,7 @@ aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
|
||||
绕过此限制的唯一方法是同时妥协配置 SCP 的 **主账户**(主账户无法被阻止)。
|
||||
|
||||
> [!WARNING]
|
||||
> 请注意,**SCP 仅限制账户中的主体**,因此其他账户不受影响。这意味着拥有一个拒绝 `s3:GetObject` 的 SCP 不会阻止人们 **访问您账户中的公共 S3 存储桶**。
|
||||
> 请注意,**SCP 仅限制账户中的主体**,因此其他账户不受影响。这意味着拥有一个 SCP 拒绝 `s3:GetObject` 不会阻止人们 **访问您账户中的公共 S3 存储桶**。
|
||||
|
||||
SCP 示例:
|
||||
|
||||
@@ -55,9 +55,11 @@ SCP 示例:
|
||||
- 仅允许白名单服务
|
||||
- 拒绝禁用 GuardDuty、CloudTrail 和 S3 公共阻止访问
|
||||
|
||||
- 拒绝删除或修改安全/事件响应角色。
|
||||
- 拒绝安全/事件响应角色被删除或
|
||||
|
||||
- 拒绝删除备份。
|
||||
修改。
|
||||
|
||||
- 拒绝备份被删除。
|
||||
- 拒绝创建 IAM 用户和访问密钥
|
||||
|
||||
在 [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html) 中查找 **JSON 示例**。
|
||||
@@ -76,7 +78,7 @@ RCP 示例:
|
||||
- 限制 S3 存储桶,使其只能被您组织内的主体访问
|
||||
- 限制 KMS 密钥使用,仅允许来自受信任组织账户的操作
|
||||
- 限制 SQS 队列的权限,以防止未经授权的修改
|
||||
- 强制 Secrets Manager 秘密的访问边界,以保护敏感数据
|
||||
- 在 Secrets Manager 秘密上强制访问边界,以保护敏感数据
|
||||
|
||||
在 [AWS Organizations Resource Control Policies documentation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) 中查找示例。
|
||||
|
||||
@@ -87,7 +89,7 @@ RCP 示例:
|
||||
arn:partition:service:region:account-id:resource-type/resource-id
|
||||
arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
|
||||
```
|
||||
注意,AWS中有4个分区,但只有3种调用方式:
|
||||
注意,AWS中有4个分区,但只有3种调用它们的方法:
|
||||
|
||||
- AWS Standard: `aws`
|
||||
- AWS China: `aws-cn`
|
||||
@@ -98,15 +100,15 @@ arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
|
||||
|
||||
IAM是允许您管理**身份验证**、**授权**和**访问控制**的服务。
|
||||
|
||||
- **身份验证** - 定义身份及其验证的过程。此过程可以细分为:识别和验证。
|
||||
- **身份验证** - 定义身份和验证该身份的过程。此过程可以细分为:识别和验证。
|
||||
- **授权** - 确定身份在系统中经过身份验证后可以访问的内容。
|
||||
- **访问控制** - 授予安全资源访问权限的方法和过程。
|
||||
- **访问控制** - 授予对安全资源访问的方式和过程。
|
||||
|
||||
IAM可以通过其管理、控制和治理身份对您AWS账户内资源的身份验证、授权和访问控制机制的能力来定义。
|
||||
|
||||
### [AWS账户根用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) <a href="#id_root" id="id_root"></a>
|
||||
|
||||
当您首次创建Amazon Web Services (AWS)账户时,您将拥有一个具有**完全访问所有**AWS服务和资源的单一登录身份。这是AWS账户的_**根用户**_,通过使用**您用于创建账户的电子邮件地址和密码**进行登录。
|
||||
当您首次创建Amazon Web Services (AWS)账户时,您将开始使用一个具有**对所有**AWS服务和资源**完全访问权限**的单一登录身份。这是AWS账户的_**根用户**_,通过使用**您用于创建账户的电子邮件地址和密码**进行登录。
|
||||
|
||||
请注意,新创建的**管理员用户**将具有**比根用户更少的权限**。
|
||||
|
||||
@@ -161,17 +163,17 @@ IAM [用户组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)
|
||||
|
||||
### [IAM角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) <a href="#id_iam-roles" id="id_iam-roles"></a>
|
||||
|
||||
IAM **角色**与**用户**非常**相似**,因为它是一个**具有权限策略的身份,决定它在AWS中可以做什么和不能做什么**。然而,角色**没有任何凭证**(密码或访问密钥)与之关联。角色的设计目的是**可以被任何需要它的人(并且有足够权限)假设**。IAM用户可以假设一个角色以临时**承担特定任务的不同权限**。角色可以分配给使用外部身份提供者而不是IAM登录的[**联合用户**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。
|
||||
IAM **角色**与**用户**非常**相似**,因为它是一个**具有权限策略的身份,决定了它在AWS中可以做什么和不能做什么**。然而,角色**没有任何凭证**(密码或访问密钥)与之关联。角色的设计目的是**可以被任何需要它的人(并且有足够权限)假设**。IAM用户可以假设一个角色以临时**承担特定任务的不同权限**。角色可以分配给使用外部身份提供者而不是IAM登录的[**联合用户**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。
|
||||
|
||||
IAM角色由**两种类型的策略**组成:**信任策略**,不能为空,定义**谁可以假设**该角色,以及**权限策略**,不能为空,定义**它可以访问什么**。
|
||||
|
||||
#### AWS安全令牌服务(STS)
|
||||
|
||||
AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权限凭证的发放**。它专门用于:
|
||||
AWS安全令牌服务(STS)是一个网络服务,便于**发放临时、有限权限的凭证**。它专门用于:
|
||||
|
||||
### [IAM中的临时凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) <a href="#id_temp-creds" id="id_temp-creds"></a>
|
||||
|
||||
**临时凭证主要与IAM角色一起使用**,但也有其他用途。您可以请求具有比标准IAM用户更有限权限集的临时凭证。这**防止**您**意外执行不允许的任务**。临时凭证的一个好处是它们在设定的时间段后会自动过期。您可以控制凭证的有效期。
|
||||
**临时凭证主要与IAM角色一起使用**,但也有其他用途。您可以请求具有比标准IAM用户更有限权限集的临时凭证。这**防止**您**意外执行不被更有限凭证允许的任务**。临时凭证的一个好处是它们在设定的时间段后会自动过期。您可以控制凭证的有效期。
|
||||
|
||||
### 策略
|
||||
|
||||
@@ -183,7 +185,7 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权
|
||||
- 客户管理策略:由您配置。您可以基于AWS管理策略创建策略(修改其中一个并创建自己的),使用策略生成器(一个帮助您授予和拒绝权限的GUI视图)或编写自己的策略。
|
||||
|
||||
默认情况下,访问**被拒绝**,如果指定了明确的角色,则将授予访问权限。\
|
||||
如果**存在单个“拒绝”**,它将覆盖“允许”,但AWS账户的根安全凭证的请求(默认允许)除外。
|
||||
如果**存在单个“拒绝”**,它将覆盖“允许”,但AWS账户的根安全凭证(默认允许)使用的请求除外。
|
||||
```javascript
|
||||
{
|
||||
"Version": "2012-10-17", //Version of the policy
|
||||
@@ -211,8 +213,8 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权
|
||||
|
||||
#### 内联策略
|
||||
|
||||
这种策略是**直接分配**给用户、组或角色的。因此,它们不会出现在其他人可以使用的策略列表中。\
|
||||
内联策略在您想要**保持策略与应用于的身份之间的严格一对一关系**时非常有用。例如,您希望确保策略中的权限不会意外分配给除其预期身份以外的身份。当您使用内联策略时,策略中的权限不会意外附加到错误的身份。此外,当您使用AWS管理控制台删除该身份时,嵌入在身份中的策略也会被删除。这是因为它们是主体实体的一部分。
|
||||
这种策略是**直接分配**给用户、组或角色的。因此,它们不会出现在策略列表中,因为其他任何人都可以使用它们。\
|
||||
内联策略在您想要**保持策略与应用于的身份之间的严格一对一关系**时非常有用。例如,您希望确保策略中的权限不会意外分配给除其预期身份以外的身份。当您使用内联策略时,策略中的权限不能意外附加到错误的身份。此外,当您使用AWS管理控制台删除该身份时,嵌入在身份中的策略也会被删除。这是因为它们是主体实体的一部分。
|
||||
|
||||
#### 资源桶策略
|
||||
|
||||
@@ -222,17 +224,17 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权
|
||||
|
||||
### IAM边界
|
||||
|
||||
IAM边界可以用来**限制用户或角色应有的权限**。这样,即使通过**不同的策略**授予用户不同的权限,如果他尝试使用它们,操作将**失败**。
|
||||
IAM边界可用于**限制用户或角色应有的权限**。这样,即使通过**不同的策略**授予用户不同的权限,如果他尝试使用它们,操作将**失败**。
|
||||
|
||||
边界只是附加到用户的策略,**指示用户或角色可以拥有的最大权限级别**。因此,**即使用户具有管理员访问权限**,如果边界指示他只能读取S·桶,那就是他能做的最大事情。
|
||||
边界只是附加到用户的策略,**指示用户或角色可以拥有的最大权限级别**。因此,**即使用户具有管理员访问权限**,如果边界指示他只能读取S·桶,那就是他能做的最大限度。
|
||||
|
||||
**这**、**SCPs**和**遵循最小权限**原则是控制用户权限不超过其所需权限的方式。
|
||||
|
||||
### 会话策略
|
||||
|
||||
会话策略是在某种情况下**假设角色时设置的策略**。这将类似于该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限为角色所拥有的权限)。
|
||||
会话策略是在某种情况下**假设角色时设置的策略**。这将类似于该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限为角色拥有的权限)。
|
||||
|
||||
这对于**安全措施**非常有用:当管理员要假设一个非常特权的角色时,他可以将权限限制为仅在会话策略中指示的权限,以防会话被破坏。
|
||||
这对于**安全措施**非常有用:当管理员要假设一个特权很高的角色时,他可以将权限限制为仅在会话策略中指示的权限,以防会话被破坏。
|
||||
```bash
|
||||
aws sts assume-role \
|
||||
--role-arn <value> \
|
||||
@@ -240,9 +242,9 @@ aws sts assume-role \
|
||||
[--policy-arns <arn_custom_policy1> <arn_custom_policy2>]
|
||||
[--policy <file://policy.json>]
|
||||
```
|
||||
注意,默认情况下,**AWS 可能会向即将生成的会话添加会话策略**,这是由于其他原因。例如,在[未经身份验证的 Cognito 假定角色](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles)中,默认情况下(使用增强身份验证),AWS 将生成**带有会话策略的会话凭证**,该策略限制会话可以访问的服务[**为以下列表**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)。
|
||||
注意,默认情况下,**AWS 可能会为将要生成的会话添加会话策略**,这是由于其他原因。例如,在[未经身份验证的 Cognito 假定角色](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles)中,默认情况下(使用增强身份验证),AWS 将生成**带有会话策略的会话凭证**,该策略限制会话可以访问的服务[**为以下列表**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)。
|
||||
|
||||
因此,如果在某个时刻您遇到错误“...因为没有会话策略允许...”,而角色有权限执行该操作,这意味着**存在一个会话策略阻止它**。
|
||||
因此,如果在某个时刻您遇到错误“...因为没有会话策略允许...”,而角色有权限执行该操作,那是因为**有一个会话策略阻止了它**。
|
||||
|
||||
### 身份联合
|
||||
|
||||
@@ -257,7 +259,7 @@ aws sts assume-role \
|
||||
|
||||
### IAM 身份中心
|
||||
|
||||
AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个**集中位置**,将**用户及其对 AWS**帐户和云应用程序的访问管理汇集在一起。
|
||||
AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个**集中位置**,将**用户及其对 AWS** 账户和云应用程序的访问管理汇集在一起。
|
||||
|
||||
登录域将类似于 `<user_input>.awsapps.com`。
|
||||
|
||||
@@ -269,20 +271,20 @@ AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访
|
||||
|
||||
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够**为他们分配策略**到**组织的任何帐户**。
|
||||
在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够**为他们分配策略**到**组织的任何账户**。
|
||||
|
||||
为了给身份中心用户/组访问一个帐户,将创建一个**信任身份中心的 SAML 身份提供者**,并在目标帐户中创建一个**信任身份提供者并具有指示策略的角色**。
|
||||
为了给予身份中心用户/组对账户的访问,将创建一个**信任身份中心的 SAML 身份提供者**,并在目标账户中创建一个**信任身份提供者并具有指示策略的角色**。
|
||||
|
||||
#### AwsSSOInlinePolicy
|
||||
|
||||
可以通过**内联策略向通过 IAM 身份中心创建的角色授予权限**。在被授予**AWS 身份中心内联策略**的帐户中创建的角色将具有名为**`AwsSSOInlinePolicy`**的内联策略中的这些权限。
|
||||
可以通过**内联策略向通过 IAM 身份中心创建的角色授予权限**。在被授予**AWS 身份中心内联策略**的账户中创建的角色将具有名为**`AwsSSOInlinePolicy`**的内联策略中的这些权限。
|
||||
|
||||
因此,即使您看到两个具有名为**`AwsSSOInlinePolicy`**的内联策略的角色,也**并不意味着它们具有相同的权限**。
|
||||
|
||||
### 跨账户信任和角色
|
||||
|
||||
**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后**允许另一个用户**(受信任)**访问他的帐户**,但仅**具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供您拥有的 AWS 账户之间的访问,以及提供您拥有的账户与第三方 AWS 账户之间的访问。\
|
||||
建议**指定受信任的用户,而不是放置一些通用内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也可能滥用此信任。
|
||||
**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后**允许另一个用户**(受信任)**访问他的账户**,但仅**具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供您拥有的 AWS 账户之间的访问,以及提供您拥有的账户与第三方 AWS 账户之间的访问。\
|
||||
建议**指定被信任的用户,而不是放置一些通用的内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也可能滥用此信任。
|
||||
|
||||
### AWS Simple AD
|
||||
|
||||
@@ -292,13 +294,13 @@ AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访
|
||||
- AD 管理中心
|
||||
- 完整的 PS API 支持
|
||||
- AD 回收站
|
||||
- 组托管服务帐户
|
||||
- 组托管服务账户
|
||||
- 架构扩展
|
||||
- 无法直接访问操作系统或实例
|
||||
|
||||
#### Web 联合或 OpenID 身份验证
|
||||
|
||||
该应用程序使用 AssumeRoleWithWebIdentity 创建临时凭证。然而,这并不授予对 AWS 控制台的访问权限,仅授予对 AWS 内部资源的访问权限。
|
||||
该应用程序使用 AssumeRoleWithWebIdentity 创建临时凭证。然而,这并不授予对 AWS 控制台的访问,仅授予对 AWS 内部资源的访问。
|
||||
|
||||
### 其他 IAM 选项
|
||||
|
||||
@@ -311,9 +313,9 @@ AWS 身份和访问管理(IAM)提供**细粒度的访问控制**,覆盖所
|
||||
|
||||
在[**此页面**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)中,您可以找到根据其性质的键的**IAM ID 前缀**:
|
||||
|
||||
| 标识符代码 | 描述 |
|
||||
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| ABIA | [AWS STS 服务承载令牌](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
|
||||
| 标识符代码 | 描述 |
|
||||
| --------------- | ----------------------------------------------------------------------------------------------------------- |
|
||||
| ABIA | [AWS STS 服务承载令牌](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
|
||||
|
||||
| ACCA | 上下文特定凭证 |
|
||||
| AGPA | 用户组 |
|
||||
@@ -325,7 +327,7 @@ AWS 身份和访问管理(IAM)提供**细粒度的访问控制**,覆盖所
|
||||
| APKA | 公钥 |
|
||||
| AROA | 角色 |
|
||||
| ASCA | 证书 |
|
||||
| ASIA | [临时(AWS STS)访问密钥 ID](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html)使用此前缀,但仅在与秘密访问密钥和会话令牌组合时是唯一的。 |
|
||||
| ASIA | [临时(AWS STS)访问密钥 ID](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) 使用此前缀,但仅在与秘密访问密钥和会话令牌组合时是唯一的。 |
|
||||
|
||||
### 审计账户的推荐权限
|
||||
|
||||
@@ -345,7 +347,7 @@ AWS 身份和访问管理(IAM)提供**细粒度的访问控制**,覆盖所
|
||||
### CLI 身份验证
|
||||
|
||||
为了让常规用户通过 CLI 认证到 AWS,您需要拥有**本地凭证**。默认情况下,您可以在 `~/.aws/credentials` 中**手动**配置它们,或通过**运行** `aws configure`。\
|
||||
在该文件中,您可以拥有多个配置文件,如果使用**aws cli**时**未指定配置文件**,则将使用该文件中名为**`[default]`**的配置文件。\
|
||||
在该文件中,您可以拥有多个配置文件,如果在使用**aws cli**时**未指定配置文件**,则将使用该文件中名为**`[default]`**的配置文件。\
|
||||
具有多个配置文件的凭证文件示例:
|
||||
```
|
||||
[default]
|
||||
@@ -357,7 +359,7 @@ aws_access_key_id = AKIA8YDCu7TGTR356SHYT
|
||||
aws_secret_access_key = uOcdhof683fbOUGFYEQuR2EIHG34UY987g6ff7
|
||||
region = eu-west-2
|
||||
```
|
||||
如果您需要访问**不同的AWS账户**,并且您的配置文件被授予访问**在这些账户内假设角色**的权限,您就不需要每次手动调用STS(`aws sts assume-role --role-arn <role-arn> --role-session-name sessname`)并配置凭证。
|
||||
如果您需要访问**不同的AWS账户**,并且您的配置文件被授予访问**在这些账户内假设角色**的权限,您不需要每次手动调用STS(`aws sts assume-role --role-arn <role-arn> --role-session-name sessname`)并配置凭证。
|
||||
|
||||
您可以使用`~/.aws/config`文件来[**指示要假设的角色**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html),然后像往常一样使用`--profile`参数(`assume-role`将以透明的方式为用户执行)。\
|
||||
配置文件示例:
|
||||
@@ -373,7 +375,7 @@ sts_regional_endpoints = regional
|
||||
```
|
||||
aws --profile acc2 ...
|
||||
```
|
||||
如果您正在寻找类似的东西,但用于**浏览器**,您可以查看**扩展** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en)。
|
||||
如果您正在寻找类似于此但适用于**浏览器**的内容,可以查看**扩展** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en)。
|
||||
|
||||
## 参考文献
|
||||
|
||||
|
||||
Reference in New Issue
Block a user