salesforceからawsへの接続 using oidc/saml
TRANSCRIPT
SalesforceからAWSへの接続 Using OIDC/SAML
Shinichi TomitaMashmatrix, Inc.
@stomita
何をやったのか• SalesforceにAWSのシークレットを保存せずにAWS上の各種サービス(もちろん非公開)にSalesforceからアクセスする
• http://qiita.com/stomita/items/81e88ca380300ac35563 (OIDCの場合)
• http://stomita.hatenablog.com/entry/2013/12/23/195110 (SAMLの場合:2年前の記事)
通常の連携との違い
通常の連携 OIDC/SAMLによる連携
AWS Access Key IDAWS Secret AccessKey
OIDC ID Token /SAML Assertion
SF Username/Password
SF Username/Password
何がうれしいのか• AWSサービスをSalesforceと同一のセキュリティコンテキストで利用できる
• シークレット情報をSalesforceで管理しなくてもOK
• エンドユーザレベルでのアクセス監査も可能に
• 属性を用いたFine-Grained Access Control (FGAC)
参考: DynamoDBでのFGAC
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/FGAC_DDB.html
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadOnlyAccessToUserItems", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": [ "${www.amazon.com:user_id}" ] } } } ]}
例:ユーザIDで始まるパーティション・キー値を持つレコードにのみアクセスさせたい場合のポリシー設定
Policy Variable
何を学んだか• OIDCでの連携の場合は、Policy Variableに利用できる属性が現在のところsubしかない模様
• subの値はSalesforce OIDCの場合 https://login.salesforce.com/id/<orgid>/<userid> の形式で表現される識別子となる
• SAML連携の場合はアサーション属性をpolicy keyにマッピング可能
• http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html
• ちゃんとFGACをやりたいときはSAML連携がよさそう
• Salesforceではアサーションに含める属性は数式で自在に定義できるため、もし使えるなら強力になるなのだけど…