Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA

This commit is contained in:
Translator
2025-03-21 09:06:24 +00:00
parent 3bb75a3d98
commit 5c92cbe949

View File

@@ -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)。
## 参考文献