Некоторое время назад я пытался заблокировать доступ к секрету в менеджере Secrets Secrets ко всему, кроме нескольких ролей и пользователей. Это может показаться простой задачей, но были некоторые проблемы. Я включу фрагмент шаблона, чтобы пройти через разные части, но если вы предпочели бы просто получить копию всего шаблона, я добавил его в свой AWS-Cloudformation-reference github Repo Наряду с другими шаблонами облачной формы, которые я создал в качестве эталонной точки. Ниже приведена версия политики ресурсов, прикрепленной к секрету, которая позволяет доступ к конкретным ролям и пользователям IAM.
Parameters: WhitelistedRoleIds: Type: CommaDelimitedList Description: > IDs (AROA*, or AIDA*) to whitelist access for on the created secret. Find the Role ID by running aws iam get-role --role-name ROLE-NAME. Remember to append :* to the end of the Role IDs. Find the User ID by running aws iam get-user --user-name USER-NAME. User IDs do not need :* appended to the end. Resources: ... SecretResourcePolicy: Type: 'AWS::SecretsManager::ResourcePolicy' Properties: SecretId: !Ref MySecret ResourcePolicy: Version: 2012-10-17 Statement: - Resource: !Ref MySecret Action: 'secretsmanager:GetSecretValue' Effect: Deny Principal: '*' Condition: StringNotLike: aws:userId: !Ref WhitelistedRoleIds
Есть некоторые нюансы, которые стоит указать, что я наткнулся на то, чтобы выяснить эту конфигурацию.
Во -первых, я хочу заложить фундамент с политикой ресурсов. У меня были существующие знания, когда я столкнулся с этой проблемой (хотя и не очень практичным опытом), что некоторые ресурсы AWS позволяют нам прикрепить им политики ресурсов. Некоторые из этих других ресурсов включают S3 и Lambda (для огромного списка Проверьте эту страницу в столбце «Политики на основе ресурсов»).
Политики ресурсов позволяют нам Создайте ярлык для доступа и отрицания На основании нескольких ключевых свойств, которые доступны в большинстве вызовов API в ресурс. Это означает, что даже если роль IAM явно допускает доступ к определенному ресурсу, политика ресурсов может явно отрицать эту роль в доступе, тем самым отрицая ресурс, который взял на себя роль. То же самое верно и наоборот, роль IAM, которая отрицает доступ к ресурсу, будет отменена, если политика ресурсов явно предоставит доступ.
Я стараюсь упростить это, на мой взгляд, думая, что любые правила наиболее близки к победе ресурса. Роль IAM может быть общей вещью, но ресурсная политика напрямую прикреплена к ресурсу. Это означает, что правила политики ресурсов побеждают в роли IAM каждый раз.
Строившись на вершине наших знаний о политике ресурсов, мы начинаем входить в орехи и болты этой конкретной политики ресурса менеджера. Поскольку мы хотим создать белый список и черный список всех других ресурсов IAM, нам понадобится явное отрицание всего, кроме тех белых ресурсов. К сожалению, мы не можем упростить это до явного отрицания всего в одном утверждении, а затем другое утверждение, которое дает явное разрешение. То, как правила расставляют приоритеты, даст приоритет «отрицаю все».
Теперь, когда мы понимаем, что такое политика ресурсов, следующим шагом является понимание того, какой тип свойств доступен в призывах API в секрете, в соответствии с которым мы можем предоставить или отказать в доступе. Первый и наиболее очевидный тип конфигурации политики ресурсов, который я пытался использовать, был Notprincipal
Анкет Это похоже на Принципал
Это находится в вышеупомянутой политике ресурсов За исключением того, что это наоборот Анкет Я попытался достичь одной и той же цели, но используя Notprincipal
, что, я надеялся, будет выглядеть следующим образом.
- Resource: !Ref MySecret Action: 'secretsmanager:GetSecretValue' Effect: Deny NotPrincipal: AWS: !Ref WhitelistedPrincipals
К сожалению, когда вызов API приходит из предполагаемой роли IAM, он больше не выглядит как ARN: AWS: STS:: AWS_ACCOUNT_ID: предполагаемый роль/role_name/session_name
который также называется предполагаемой ролью Арн. С тех пор, как Принципал
состоит из ARN роли IAM и предполагаемой роли Arn, IAM будет отказать в доступе к ресурсу с момента Принципал
не совпадает точно.
AWS: userId
вход. После долгих мест, я в конце концов приземлился на странице Перечисление клавиш условия политики IAM Анкет Это была первая часть. Часть вторая была Сообщение в блоге об ограничении доступа к ведро S3 Точно так же, как я хотел сделать со своим секретом. В сообщении объясняется, что роль IAM, которая была принята, всегда будет проходить ту же роль в роли в AWS: userId
переменная вместе с именем сеанса. Мне нравится думать об этой уникальной роли идентификации как о некоторой смесью роли IAM ARN и предполагаемой роли Arn. Поскольку это единственная переменная, мы можем предоставить доступ, основываясь на ней в политике ресурсов.
На случай, если кто -то любопытен, Ароа*
и Аида *
являются Уникальные префиксы, которые предопределены AWS Анкет Я помню, как замечал этот шаблон, просматривая журналы о чем -то не связанном и задавался вопросом, не имеют ли они что -то что -то. Оказывается, они делают.
Используя AWS: userId
Переменная позволяет нам белоснуть как пользователя, так и роли. Роль IAM должна быть в белой списке как что -то вроде AROAJQABLZS4A3QDU576Q:*
Потому что имя сеанса добавлено к идентификатору роли в конце. (Роли должны быть приняты первыми, прежде чем сделать вызов API.) Пользователь IAM должен быть в белом списке как что -то вроде Aidjqablzs4a3qdu576q
без :*
добавлено. Чтобы найти эти забавные идентификаторы, бегите AWS IAM GET-ROLE-ROLE-NAME ROLE_NAME
или AWS IAM GET-USER-USER-NAME USER_NAME
Анкет
Мне пришлось спуститься довольно много кроличьих отверстий, чтобы выяснить это, поэтому она гарантировала историю вместо простого фрагмента. Для тех, кто может столкнуться с этим и нуждаться в большей помощи, не стесняйтесь обратиться ко мне, и я сделаю все, что смогу!
Оригинал: «https://dev.to/thomasstep/creating-a-whitelist-for-a-secrets-manager-secret-4eca»