问题描述
在本地开发环境中创建了一个微服务,该微服务需要访问AWS S3存储桶。以前,用户要求每个使用该解决方案的开发人员自行获取AWS访问密钥和秘密密钥。但最近,公司实施了Okta SSO解决方案,现在有一个新的动机,即使用一个专用的AWS访问密钥(通过Okta)来访问AWS中所需的资源,该密钥具有只读访问权限。用户希望避免在代码中硬编码此AWS访问密钥,而是希望将访问密钥和秘密密钥存储在AWS Secrets Manager中,然后使用一个角色来从那里读取密钥。但问题是,用户必须以某种方式对公司的AWS帐户进行身份验证,以便能够扮演角色并从AWS SM中读取密钥。用户想知道是否有任何方法可以实现这一点。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
一种方法是创建一个服务,该服务通过SSO对AWS进行授权,并通过AWS STS服务提供临时凭证。这样,您就不必在任何地方存储任何内容,一旦用户失去对SSO的访问权限,他们也将失去对AWS的访问权限。您需要一个具有对开发环境的访问权限的角色,开发人员将扮演该角色。
以下是实现此方法的步骤:
1. 创建一个服务,该服务与SSO进行授权,并通过AWS STS服务提供临时凭证。
2. 在AWS中创建一个角色,该角色具有对开发环境的访问权限。
3. 开发人员使用SSO登录,并扮演角色以获取临时凭证。
4. 在代码中使用临时凭证来访问AWS资源。
请注意,此方法确保了安全性,因为开发人员只能在拥有SSO访问权限的情况下访问AWS资源。一旦他们失去对SSO的访问权限,他们将无法访问AWS资源。
方案2
使用AWS CLI配置和使用临时凭证可能需要一些额外的配置和步骤。
另一种方法是使用AWS CLI配置和使用临时凭证来访问AWS Secrets Manager。这样,您可以避免在代码中硬编码访问密钥和秘密密钥。
以下是实现此方法的步骤:
1. 安装并配置AWS CLI。
2. 使用AWS CLI获取临时凭证。您可以使用以下命令:
aws sts assume-role --role-arn <role_arn> --role-session-name <session_name>
其中,<role_arn>
是您要扮演的角色的ARN,<session_name>
是会话名称。
3. 获取临时凭证后,您可以使用AWS CLI访问AWS Secrets Manager。您可以使用以下命令:
aws secretsmanager get-secret-value --secret-id <secret_id>
其中,<secret_id>
是您要访问的密钥的ID。
请注意,此方法需要一些额外的配置和步骤,但它可以帮助您避免在代码中硬编码访问密钥和秘密密钥。
方案3
使用AWS SDK可能需要一些额外的配置和步骤。
另一种方法是使用AWS SDK来访问AWS Secrets Manager。这样,您可以避免在代码中硬编码访问密钥和秘密密钥。
以下是实现此方法的步骤:
1. 安装并配置适用于您选择的编程语言的AWS SDK。
2. 使用AWS SDK获取临时凭证。您可以使用适当的方法来获取临时凭证。
3. 获取临时凭证后,您可以使用AWS SDK访问AWS Secrets Manager。您可以使用适当的方法来访问密钥。
请注意,此方法需要一些额外的配置和步骤,但它可以帮助您避免在代码中硬编码访问密钥和秘密密钥。